Ado联access数据库,sql查询(200分)

  • 主题发起人 主题发起人 iwalk
  • 开始时间 开始时间
I

iwalk

Unregistered / Unconfirmed
GUEST, unregistred user!
数据库:access,ADO
设:表mytab有一文本字段myfield,
执行adoqry1.sql.add('select * from mytab where trim(myfield)=:v1');
Parameters[0].value:=trim(edit1.text);
adoqry1.open;
当表中有一条记录myfield字段为空时,edit1.text为空,
但查不出任何记录,即:adoqry1.eof=true
为何?本人以前使用bde连sqlserver,从没出现这种问题啊。
 
要想查出myfield字段為空的記錄,好
像只能用myfield is null,不能用myfield=null.
而你那樣想查詢空字段記錄,就好像myfield=null,
所以查不出來。
 
你可變換一下:
if trim(edit1.text)<>'' then
begin
adoqry1.sql.add('select * from mytab where trim(myfield)=:v1');
Parameters[0].value:=trim(edit1.text);
end
else
adoqry1.sql.add('select * from mytab where trim(myfield) is null');
adoqry1.open;

 
但是像这样的情况SQLserver7是能查出的啊!
 
呵呵,我前天刚碰到过和你一样的情况 access在数据库中是有内容的一旦在adoQuery中写就是空的了
 
...
try
...
sql.clear;
sql.add('select * from delphibbs where name=高手');
open;
except
showmessage('My God!');
end;
...
...

 
晕倒,你的条件本来就是这样的嘛,:查找所有myfield=‘’的记录!
 
字段值为NULL与''不是同一个概念!
 
在access中''和null是两个不同的概念!
 
adoqry1.sql.add('select * from mytab where trim(myfield)=:v1');
~~~~
myfield's type is fixedchar,you should write like this
adoqry1.sql.add('select * from mytab where trim(myfield)=":v1"');
~ ~
 
用null就可以表示为空了.
 
在不同类型的数据库中某个字段的''和nil是两回是,所以在查询时要注意。
其中zxb200的方法是比较好的。
 
在Access中是否设置了“允许空字符串”为"false"(这是默认设置),
如果这样的话,数据库中根本不存在''的值,所以只能用null才查得出
 
同意。
‘’和null是不同的含义。
‘’表示数据长度为0; null表示该数据项从未保存过数据,即没有数据!
 
这个你要看数据库设计先,里面是否设置了“允许空字符串”为"false"(这是默认设置),
然后,你要明白,‘’和NULL是两个概念,你要是查询=‘’的,是不会查询出条件为NULL的记录的。同样,
你要是查NULL的,你也不会查询出‘’的。
数据库不同,里面很多设置和默认也不相同。
还有,用ACCESS还要注意大小写问题。我数次碰到过这种问题。
 
后退
顶部