字符串和常数(100分)

  • 主题发起人 主题发起人 yangtao
  • 开始时间 开始时间
Y

yangtao

Unregistered / Unconfirmed
GUEST, unregistred user!
大家好,我在学习数据库编程时,在设置查询时,编号的数字必须输成'1'的形式,
如果不加'',则在查找时出错,如何才能不加'',望广大高手指教.
 
在数据库设计时,“编号”字段如果设为CHAR类型(字符串类型)则在查询的时候就
必须加入引号用来表示该数字为字符串,用字符串的比较方法来匹配。
解决的方法1、可以把该字段设计为数值类型。
解决的方法2、可以自己写一句SQL语句,例如:
"SELECT * FROM TABNAME WHERE 编号=“+INTTOSTR(RECORDNUM)
 
两种办法,
1、将数字1变为字符串,IntToStr();
2、将字符变成数字,Val().
用字符方式便于比对操作,用数字便于累加求和。
 
如果你用的是SQLSERVER, 可以这样:
SELECT * FROM TABLE1 WHERE CONVERT(INT,NOS)=1
编程:
SQL.TEXT='SELECT * FROM TABLE1 WHERE CONVERT(INT,NOS)='+INTTOSTR(NOS);
就可以了.
 
最好的办法是用Params.

sql.add('SELECT * FROM xxx WHERE ID=:userid');
sql.parambyname('userid').asInteger:=inttostr(edit1.text);

这样就不用考虑各种数据类型的格式了。
 
看来,还是加个''省事:)
 
char的东东你还是加个''清晰一点.
 
方法太多了,只为一个目的:
就是转换一下数据格式,
要么你就把数据库改掉.
 
还是加个''吧,其它方法都挺麻烦的。
 
其实这不是很难吧,先添加Button1、Query1和Edit1,在Button1的Click 事件为:
Try
StrToFloat(Edit1.text);
Except
Messagedlg('请输入数字型');
Abort;
end;
with query1 do
begin
close;
sql.clear;
sql.add('select * from table1 where no1=:no1');
parambyname('no1').AsString:=edit1.text;
open;
end;

祝你好运
 
自己写个转化函数就行了
function SQLStr(str:string);
begin
result:=''''+str+'''';
end;
 
这主要是类型不匹配,加符号便强制转换成字符型,如果是其他类型加‘’便不行
了,所以你可用强制转换 例如 inttostr()便可建整数型转换成字符型
 
多人接受答案了。
 
后退
顶部