奇怪的问题!!!!!!!!!!!!!(100分)(100分)

  • 主题发起人 主题发起人 kintsoon
  • 开始时间 开始时间
K

kintsoon

Unregistered / Unconfirmed
GUEST, unregistred user!
界面上有TQuery:Query1,TDataSource:DataSource,Dbgrid.三个控件.
其中Dbgrid.datasource:=datasource ; datasource.datasource:=query1
由query1连到数据库.程序如下:
With frmmain.query1 do
begin
close;
sql.clear;
sql.add('select * from db');
repare;
execsql;
open;
end;

运行后dbgrid里没有记录。[?](数据库里有)
改成
open;
execsql;
后可以查出数据,但提示出错“Can not perform this operation on an open dataset”[:(]
 
With frmmain.query1 do
begin
close;
sql.clear;
sql.add('select * from db');
repare;
execsql;//去掉这句
open;
end;
 
with query1 do
begin
close;
sql.clear;
sql.add(' SELECT * FROM tablename');
open;
end;//试试.
 
with query do begin
close;
sql.text:='select * from db';
open;
end;
 
hbezwwl的最可以了,不用那么麻烦
 
都行啊,
execsql一般是用来执行没有返回记录的sql语句,如update,delete等
 
去掉这句execsql;也不行。查不出数据。
 
to hbezwwl.
用此方法查不出记录。
 
是不是你的数据感知控件没连好,字段名有显示吗?
如果没有,那肯定是没连上
 
With frmmain.query1 do
begin
close;
sql.clear;
sql.add('select * from db');
repare;
open;
execsql;
end;
但是这样是可以查出记录的。并且会提示错误信息“Can not perform this operation on an open dataset”
 
repare去掉了吗?
 
这个问题太简单,不是程序的错误,你设计时就将sql值写进去,将query1 的active设置为
true再报错的话,可以肯定是你的数据库的问题
 
首先纠正几点错误:
》 datasource.datasource:=query1 应为 datasource.dataset:=query1
》 repare应为prepare
修改以后用你原来的代码能够查到数据(从Delphi自带的employee表中查询),
而实际上execsql与open都是执行查询的动作区别在于后者输出数据(如用dbgrid显示、
把数据赋值给变量等),后者不输出数据,所以用了execsql再用open是画蛇添足,而
用open再用execsql根本就不是合法的sql语法。
 
晚上看一下,明天来
 
我才看到cooler168可真的仔细,确实,open 和execsql怎莫可以同时用呢?要返回值的话
一般是这样用的
try
open;
Except
Execsql;
end;
 
谢谢cooler168的细心.
上面的错误是我的笔误,Sorry.
按照你的方法我试过了,至少在我的机子上是不行的:-).
 
to zhoulide:设计时就将sql值写进去,将query1 的active设置为true是可以的.
但是程序运行后记录又没了.[?]
 
这样试试
With frmmain.query1 do
begin
close;
sql.clear;
sql.add('select * from db');
execsql;
end;
 
to dragonhorse:问题解决后马上给/
 

Similar threads

回复
0
查看
1K
不得闲
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部