以下是我的查询按钮的代码,编译过了,我设了断点,sql语句也没有错,可是我点击查询以后,(50分)

  • 主题发起人 主题发起人 sailor_zh
  • 开始时间 开始时间
S

sailor_zh

Unregistered / Unconfirmed
GUEST, unregistred user!
代码:
以下是我的查询按钮的代码,编译过了,我设了断点,sql语句也没有错,可是我点击查询以后,
我的dbgrid1中的内容却没有变化,我相信我的DATASOURCE 和query及table,都没有错误,因为相同的设置,我用别
的sql语句都能够查询出来。
procedure TcxipxxForm.BitBtn1Click(Sender: TObject);
var
sqlall,log:string;
arrstr:array[1..7]of string;
i,lenofstr,p:integer;
function getsth(curredit:tedit):boolean;
begin
result:=false;
if curredit.text<>'' then
result:=true;
end;
begin

log:='and';
sqlall:='select * from "局直使用IP地址.db" where';
if getsth(edit1) then arrstr[1]:='(IP地址='''+edit1.text+''')';
if getsth(edit2) then arrstr[2]:='(部门='''+edit2.text+''')';
if getsth(edit3) then arrstr[3]:='(使用人='''+edit3.text+''')';
if getsth(edit4) then arrstr[4]:='(机器型号='''+edit4.text+''')';
if getsth(edit5) then arrstr[5]:='(MAC地址='''+edit5.text+''')';
if getsth(edit6) then arrstr[6]:='(控制修改='''+edit6.text+''')';
arrstr[7]:='';
for i:=1 to 6 do
begin
arrstr[7]:=arrstr[7]+arrstr;
if arrstr<>'' then sqlall:=sqlall+log+arrstr;
end;
if arrstr[7]='' then
begin
showmessage('没有查询项目!');
exit ;
end;
p:=pos('and',sqlall);
lenofstr:=length(sqlall);
arrstr[7]:=copy(sqlall,p+3,(lenofstr-3));
sqlall:=arrstr[7];

with dm.cxipxxquery do
begin
dm.cxipxxquery.sql.clear;
dm.cxipxxquery.sql.add('select * from "局直使用IP地址.db" where');
dm.cxipxxquery.sql.add(sqlall);
prepare;
dm.cxipxxquery.execsql;
dm.cxipxxquery.open;
showmessage(sql.text)
end;
end;
 

with dm.cxipxxquery do
begin
dm.cxipxxquery.close;
dm.cxipxxquery.sql.clear;
dm.cxipxxquery.sql.add('select * from "局直使用IP地址.db" where');
dm.cxipxxquery.sql.add(sqlall);
if prepared=false then prepare;
dm.cxipxxquery.open;
showmessage(sql.text)
end;
确保SQL语句没错的前提下,试试!
 
还是不行,showmessage(sql.text)的结果是以下:

select * from "局直使用IP地址.db" where
(IP地址='10.60.66.9')
 
难道真的就没有人愿意回答我的问题吗?
 
我很着急,我也很难过,我决定,谁回答了我的问题,我愿意把我的所有家当都给了他,我伤心的哭了!!!!!!1
 
内容却没有变化, 仍然显示原来的内容,还是说空的?
 
仍然显示原来的内容,他显示表的所有记录!
 
不会吧!我刚才整个按你的程序写了一遍没有问题啊!挺对的,查询结果也挺对的
你自己再看看!
 
在sql explorer执行:
select * from "局直使用IP地址.db" where
(IP地址='10.60.66.9')
看看结果是不是你预期的
 
select * from "局直使用IP地址.db" where
(IP地址='10.60.66.9')

列名用“IP地址”是否不妥?(有中文)改成:
select * from "局直使用IP地址.db" t where
(t."IP地址"='10.60.66.9')
看看
 
SELECT * FROM "局直使用IP地址.db" t WHERE t."IP地址"='10.60.66.9 '
支持PIPI说的""
 
不对呀,我在sql explorer 中试了:select * from "局直使用IP地址.db" where
(IP地址='10.60.66.9')
没有问题的,是我预期的结果哦
另外,根据以上的意思,我把我的列名都改成英文了,然后我去运行查询,还是不行,同样
相同的代码:select * from "局直使用IP地址.db" where
(ipaddress='10.60.66.9')
没有问题的,是我预期的结果!
 
1、那就:
with dm.cxipxxquery do
begin
close;
sql.text:='select * from "局直使用IP地址.db" where '+sqlall;
open;
showmessage(sql.text)
end;
看看
2、你再次检查grid的datasource对不对,datasource的dataset对不对,还有,dm是自动创建
的还是你手工创建的,手工创建的就不对了。
如果是手工创建的dm。那么有一种假象,实际显示的是自动创建的dm里面的数据
你在设计期把 dm.cxipxxquery 的active设置为false,在运行,看看你的grid是不是一直没数据就知道了
 
对不起,我在DM中检查cxipxxquery时,我发现其active属性是false,当我把他想改成TRUE时,
出现提示错误:
unexpected end of command
token
line number:1
另外:根据您的第一项,我做了,sql.text是预期的值,没错
另外:我的DM是我在设计期间为了放有关内容建的,许多query和table、datasource都在其中,
另外:我的grid的datasource:=dm.cxipxxdatasource
dm.cxipxxdatasource.dataset:=dm.cxipxxtable
dm.cxipxxquery.datasource:=dm.cxipxxdatasource
dm.cxipxxtable.database:='pyinfo'
dm.cxipxxtable.tablename:='局直使用IP地址.db'
 
真是奇怪:
我没有用DM中的table,query,datasource
而是把table,query,datasource都加到了当前的查询窗口里了,在GRID中也看到了数据表中
的数据,with query1 do
begin
//dm.cxipxxquery.close;
query1.close;
//dm.cxipxxquery.sql.clear;
query1.SQL.clear;
//dm.cxipxxquery.sql.text:='select * from "usingip.db" where'+sqlall;
query1.sql.text:='select * from "usingip.db" where'+sqlall;
//dm.cxipxxquery.sql.add(sqlall);
showmessage(sql.text);
prepare;
//dm.cxipxxquery.execsql;
execsql;
//dm.cxipxxquery.open;
open;

end;
如上所示,该改的我都改过了,可是还是和以前的结果一样,查询按钮点击后,毫无反应。
同时,showmessage(sql.text)中所显示是正确的SQL语句,我把他放在SQL EXPLORER中测试过了
是正确的!
怎么办呢,呼唤大师,我快疯了!!!!!
 
你先试一试'select * from "局直使用IP地址.db" 能不能通过,在接着试别的。
 
设置错了,应该
grid的datasource:=dm.cxipxxdatasource
dm.cxipxxdatasource.dataset:=dm.cxipxxquery
dm.cxipxxquery.datasource不要设置,保存空的
dm.cxipxxtable 和这里说的东西无关
 
另外,datasource控件不要放在dm,一般放于用到他的form内
dm只放database和dataset控件比较好
 
谢谢,我接受你的答案了,我借此机会能向您再提个问题吗?
你能给我在讲下,有关 dbgrid,datasource,query,table 在使用过程中的一些注意事项吗?
还有,能就您回答过的我的哪个问题,请问,为什么会是你说的那样,说实话,我不太懂!
 
后退
顶部