怎样写SQL语句??高分!!急!!(100分)

  • 主题发起人 主题发起人 LIUYECAI
  • 开始时间 开始时间
L

LIUYECAI

Unregistered / Unconfirmed
GUEST, unregistred user!
我用TADOQUERY控件来实现动态查询:可是总调试不通!真的是急死人啦!!
几句代码说明情况:
1. 2.
with adoquery1 do sqlstring:string;
begin sqlstring:='myvalue'
close; with adoquery1 do
sql.clear; begin
sql.add( 'select * from tablename'); close;
sql.add( 'where fieldname="myvalue" '); sql.clear;
perpared; sql.text:='select * from tabname where fieldname="'+sqlstring+'"';
open; perpared;
end; open;
end;
两条语句都调试通不过!!!?? 错误提示为表中没有"myvalue"列名!
高手救我!SQL语句中的常量及变量到底怎样引用? 我真的找不到错在哪了??
此题暂计分100,不过可以再加分的!!
 
myvalue用单引号,用两个单引号
sql.add('select * from tablename where fieldname='''myvalue''');
 
对了, 只能用单引号
 
一语中的!
可这个变量怎样考虑呢?
如果表中的字段不是字符串怎办?现在我的表中有货币型的字段,
在SQL语句中如何实现对它的查询?说清楚些!附代码吧.
 
对于数字类型的比如整形,单精度性等不要引号,对于日期要引号,布儿类型根据数据库
来确定,有的是把“true”作为1来处理“false”作为0处理,有的是。。太多了。
 
用带参数的查询不就行了么
 
你的SQL可以动态构造
with Query1 do
begin
close;
sql.clear;
sql.add( 'select * from tablename');
sql.add( 'where fieldname=');
sql.add('''string'''); // sql.add('123.45');
prepare;
open;
end;
 
with Query1 do
begin
close;
sql.clear;
sql.add( 'select * from tablename');
sql.add( 'where fieldname=:string');
parambyname('string').asstring := your value;
prepare;
open;
end;
string 是参数!
 
看清楚了,是ADOQUERY的带参查询
with adoQuery1 do
begin
close;
sql.clear;
sql.add( 'select * from tablename');
sql.add( 'where fieldname=:v_param');
parameters.paramvalue['v_param'] := myvalue;
prepare;
open;
end;
 
对不起,有点错
parameters.paramvalue
^^^
应该是paramvalues
 
fieldname-->char
sql.add('select * from tablename where fieldname='''+myvalue+'''');

fieldname-->int
sql.add('select * from tablename where fieldname='+myvalue);
 
我看还是赋值来得容易,不需去注意那烦人的单引号:)
 
对了,用参数:

with query do begin
close;
sql.clear;
sql.add('......fieldname=:fieldname');
parambyname('fieldnemr').asstring:='...';
parambyname(' ....')
end
 
SQL server中:
数值型的字段直接表示(用字串),布尔型用数值0和1表示,其它用带单引号的字串表示。
动态购造SQL查询语句:
if field类型为数值型
sql.text:='select * from table1 where field='+str1
else
sql.text:='select * from table1 where field='+quotedstr(str1);
或者使用参数,此时必须定义参数的类型!其实一样麻烦!
 
str:string;
str := 'valname';
with Query1 do
begin
close;
sql.clear;
sql.add( 'select * from tablename');
sql.add( 'where fieldname=');
sql.add(str);
prepare;
open;
end;
 
要么把下面的语句改一下:
sql.add( 'where fieldname="myvalue" ');
改成;
sql.add( 'where fieldname="&myvalue&" ');
看一下能行吗
 
多谢大家的指点!可是我的疑问并没解除.再次说明我的问题如下:
var selfield,sqlfield:string;
selfield:='';
sqlfield:='';
if check1.checked then selfield:='field1,';
if check2.checked then selfield:='field2,'; //and so as more
//-----------------------------------------------------
if radiobutton1.checked then sqlfield:='where field1=' + eidt1.text;
if radiobutton2.checked then sqlfield:='where field2=' + edit2.text;
//and so as more -----------------------------------------------------
if copy(selfild,length(selfield)-1,1)=',' then
selfild:=copy(selfield,1,length(selfield)-1);
//---------------------------------------------
with adoquery1 do
begin
close;
clear;
sql.add('select'); // write another a code.
sql.add(selfield); //sql.text:='select '+selfield +'from tablename'+sqlfield
sql.add('from tablename');
sql.add(sqlfield);
pepared;
open;
end;
//这段代码一执行就出现上述错误提示.
希望有高手能指点迷津!高分放送!
 
一樣的道理﹐要加'單引號﹐但加單引號可能會引起你困惑﹐所以你最好加參數了。
'select * from yourdata where yourfield=:yourdata';
query1.parambyname('yourdata').asstring:='abcde';
query1.open;
就行了。你想加几個參數都可以﹐這樣不容易搞混的。
 
>>if check1.checked then selfield:='field1,';
>>if check2.checked then selfield:='field2,'; //and so as more
我想你肯定是想程序中由用户控制选取的字段!
selfield:='';
if check1.checked then selfield:=selfield+'field1,';
if check2.checked then selfield:=selfield+'field2,'; //and so as more
注:如果你有很多字段可以选择的话,最好每一句的写法都与上面两行一样,那样selfield
字串的最后肯定有一个,号,那样可以省去一个判断语句!
setlength(selfield,length(selfield)-1);//将最后一个,号去掉
如果你的field1,field2...均是数值型的话:
if radiobutton1.checked then sqlfield:='where field1=' + eidt1.text;
if radiobutton2.checked then sqlfield:='where field2=' + edit2.text;
如果你的field1,field2...是非数值型的话:
if radiobutton1.checked then sqlfield:='where field1=' + quotedstr(eidt1.text);
if radiobutton2.checked then sqlfield:='where field2=' + quotedstr(edit2.text);


 
简单的说:
字符一类的要加单引号
数值一类的只要XXXTOSTR(VALUE),插入SQL语句就可以了!
至于BLOB,要用参数了!
 
后退
顶部