做一个查询器(100分)

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

ll8

Unregistered / Unconfirmed
GUEST, unregistred user!
Delphi4.0+SQL7.0
1.想做一个查询器:
edit1、edit2、edit3对应query1的field1(char)、field2(integer)、
field3(datetime),三个Tedit中都是可填可不填,都是等于关系,求sql
语句。
2.SQL7.0装在英文NT4.0上,前台应用程序中输入中文后update,返回的值乱
码,原来的一个汉字变成了一个问号,如何解决?

问题比较菜,望高手们耐心解答!(真想多出点分,可惜我剩的太少!同
志们原谅则个!)

 
1。要先处理一下再写SQL语句,
如:flag:=0;
SQL:= 'Select * from yourdb';
if Edit1.Text<>''then
begin
SQL:=SQL+'where field1='+Edit1.Text;
flag=1;
end;

if Edit2.Text<>''then
begin
if flag=1 then
SQL:=SQL+'field2='+Edit2.Text
else
begin
SQL:=SQL+'where field2='+Edit2.Text;
flag=1;
end;
end;

if Edit3.Text<>''then
begin
if flag=1 then
SQL:=SQL+'field3='+Edit3.Text
else
begin
SQL:=SQL+'where field3='+Edit3.Text;
flag=1;
end;
end;
 
'and' is lost,
you should add it to the sql statement.
 
hawkview,yaoyao:谢谢回答!我试了,结果报错:invalid field name.
[SQL Server]Invalid column name('')。我只用一个edit,SQL:= 'Select *
from tablename where field1='+edit1.text;当edit1填入纯数字时正常,其他
均报错(如上)。但用sql:= 'Select * from tablename where field1=:temp
';
ParamByName('temp').asstring:=edit1.text;
一切正常!望继续指正!
“2”无人知道吗?
 
1.如果field1为char类型,则应该写成
SQL := Select * from tablename where field1='''+edit1.text+'''';
如果是integer类型,
SQL := Select * from tablename where field1='+edit1.text;
 
1:Liuly也少打一个引号(在Edit1前)

如果field1为char类型,则应该写成
SQL := 'Select * from tablename where
field1='''+''''+edit1.text+'''';

2.数据库所用的字符集设置的对吗?
 
>>Liuly也少打一个引号
yes,但是是在Select前,edit1前不用再加吧?
 
1.引号中的引号要用单引号转义,如同C中的/, pB中的~
2.可以用带参数的Tquery
query1.sql: = Format( "select .... from ... where field1 like
'':q1%'' and field2 like '':q2'' and field3....", [edit1.text,
edit2.text, edit3.text} )
 
不好意思,送分晚了点---这两天没上网。
“1”按liuly,cheka的方法解决了。
“2”用rebuildm解决了!
 
多人接受答案了。
 
后退
顶部