关于ADOQuery的连接数据库问题(20分)

  • 主题发起人 主题发起人 muyixin
  • 开始时间 开始时间
M

muyixin

Unregistered / Unconfirmed
GUEST, unregistred user!
我新建了一个ACCESS数据库information 在这个数据库中建了几张表 A B C..
我通过adoquery的ConnectionString 使ADOQuery和数据库information连接
那我怎么确定adoquery是和那张表连接呢?因为他不象ADOTable有TableName属性
回答:
可以通过下面的代码
Close;
SQL.Clear;
S:='Select *from 表的名称';
SQL.Add(S);
Prepared:=True;
Open;
Locate('字段名称','字段内容',[]); 这是在S 中设置的表的名称中查找
Close;
//下面进行表的操作


但是如果我没有上面的代码 直接这样写
Open;
Locate('字段名称','字段内容',[]);
Close;

把字段名称设置为几张表中字段名称 我发现总有一张表 是可以找到的 即 Locate('字段名称','字段内容',[]); 可以执行 我就不明白ADOQuery是怎么确定表的 我开始以为他是处理数据库中第一张表的 可试了几次 发现不是这么一回事 无论表的顺序怎么变 他只能执行其中一张表 ,有那位大侠可以帮忙解说一下?
 
你的sql语句写的是哪个表就是哪个表;
你也可以把这几个表都选择进去;
没什么稀奇的!
 
我问的是 我没有写sql语句 没有选择表 直接执行下面的语句
Open;
Locate('字段名称','字段内容',[]);
Close;
 
你是不是在设计阶段写好了?你不写sql语句你打开ADOQuery时,会出现提示的!
ADOQuery:missing SQL property
 
哦 谢谢楼上的提醒 我仔细分析了一下 总结
如果你在之前已经执行了 数据集返回的SQL语句 那你下次 如果没有写SQL语句 那么ADOQuery 里的数据还是基于你上次的数据集合
比如 在formactivate事件里执行 S:='Select *from a where a='''+'aaa''' 找到了在a表中字段a=aaa的记录 在buttonclick 中虽然没预执行sql语句 直接Locate('a','aaa',[]) 是可以找到这条记录的 但是执行Locate('a','a',[]) 却找不到了 记录了 因为上次ADOQuery 上的返回的记录中没有满足条件的记录 (虽然表a中有这条记录)
procedure TForm1.FormActivate(Sender: TObject);
var
S:String;
begin
with ADOQuery1 do
begin
Close;
SQL.Clear;
S:='Select *from a where a='''+'aaa''';
SQL.Add(S);
Prepared:=True;
Open;

edit1.Text:=FieldByName('b').AsString;
Close;
end;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
S:String;
begin
with ADOQuery1 do
begin
Open;
if Locate('a','aaa',[]) then //如果这里执行if Locate('a','a',[]) 不会
//有信息框 ok 出来
begin
ShowMessage('ok');
end;
Close;
end;
end;
 
接受答案了.
 
后退
顶部