刚使用delphi
问一下各位大人,怎么我用combox通过adoquery读取数据库不显示数据
我的代码如下:
var
i : integer;
begin
cb_gpmc.Clear;
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select 公司名称 from 公司信息');
adoquery1.ExecSQL;
adoquery1.Open;
begin for i := 0 to adoquery1.recordcount - 1
do
cb_gpmc.items.Add(adoquery1.fieldbyname('公司名称').asstring);
adoquery1.Next;
end;
end;
好像是adoquery1没有返回数据给combox,谢谢各位大侠;
还问一下,adoquery1执行的sql语句是 adoquery1.SQL.Add('select 公司名称 from 公司信息');
还是adoquery1中sql属性的语句?
非常感谢
问一下各位大人,怎么我用combox通过adoquery读取数据库不显示数据
我的代码如下:
var
i : integer;
begin
cb_gpmc.Clear;
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select 公司名称 from 公司信息');
adoquery1.ExecSQL;
adoquery1.Open;
begin for i := 0 to adoquery1.recordcount - 1
do
cb_gpmc.items.Add(adoquery1.fieldbyname('公司名称').asstring);
adoquery1.Next;
end;
end;
好像是adoquery1没有返回数据给combox,谢谢各位大侠;
还问一下,adoquery1执行的sql语句是 adoquery1.SQL.Add('select 公司名称 from 公司信息');
还是adoquery1中sql属性的语句?
非常感谢
var
i : integer;
begin
cb_gpmc.Clear;
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select 公司名称 from 公司信息');
//有数据集返回要用open; adoquery1.ExecSQL;
adoquery1.open;
adoquery1.first;
while not adoquery1.eof do
begin
cb_gpmc.items.Add(adoquery1.fieldbyname('公司名称').asstring);
adoquery1.Next;
end;
end
好像根本看不到adoquery1有查询的迹象
adoquery1在使用之前要做特别的设置吗?
我的connection和datasouce应该没有问题,我可以通过他们调用数据库的存储过程
我的好像没有任何问题,是不是设置的有问题,combox根本没有调用啊?
谢谢
--
另一个问题:adoquery1执行的sql语句是 adoquery1.SQL.Add('select 公司名称 from 公司信息');
还是adoquery1中sql属性的语句?这两句话指的是同一个意思 。都是执行的SQL的语句.adoquery1.sql.add(),指不过是TAdoquery的一个方法而已。
最后要关闭游标 adoquery1.Close
是不是 AdoConnection 没有打开呀?
我都可以通过AdoConnection执行存储过程啊
2、还问一下,adoquery1执行的sql语句是 adoquery1.SQL.Add('select 公司名称 from 公司信息');
还是adoquery1中sql属性的语句?
ADOQuery执行的是SQL属性中的语句。不过,你通过adoquery1.Close;
adoquery1.SQL.Clear;这两句后,SQL中原来的语句已经被清除了;然后再执行adoquery1.SQL.Add('select 公司名称 from 公司信息');
之后,ADOQuery就执行你新添加到SQL属性中的语句"select 公司名称 from 公司信息"了。
3、adoquery1.ExecSQL;
adoquery1.Open;
这两句,只用一句。如一楼所述,有数据集返回时使用open方法,如果不需要返回查询结果,调用ExecSQL,在调用Open或ExecSQL之前,最好先调用Prepare通知服务器作好准备。
4、使用select时,要注意去除重复记录:对于单表唯一查询用:distinct,多表的唯一查询用:group by
。以下是一段示例代码:
procedure TFmAddr.FormCreate(Sender: TObject);
begin
QryAddr.DatabaseName:=ExTractFilePath(Application.ExeName);
with QryAddr do
begin
Close;
SQL.Clear;
SQL.Add('Select distinct 开发公司名称 from "addr.db" addr order by 开发公司名称');
Prepare;
Open;
end;
while (not QryAddr.EOF) do
begin
CbxName.Items.Add(QryAddr.Fields[0].AsString);
QryAddr.Next;
end;
end;
begin
CbxName.Clear;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select 开发公司名称 from test');
try
adoquery1.Open;
while not AdoQuery1.Eof do
begin
CbxName.Items.Add(AdoQuery1.FieldValues['开发公司名称']);
AdoQuery1.Next;
end;
except
showmessage('错误');
end;
end;
cb_gpmc.Clear;
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select 公司名称 from 公司信息');
adoquery1.Open;
while not adoquery1.eof do
begin
cb_gpmc.items.Add(adoquery1.fieldbyname('公司名称').asstring);
adoquery1.Next;
end;
end;