var a:=tdataset; with query1 do begin close; ... ... open; end; if not (query1.eof ) then a:=query1.fieldbyname('field').asdata;
这样就行了 var aa:TDataSet; begin aa:=Query1; DataSource1.DataSet :=aa; end;
源码是这样的: procedure TPasswordDlg.FormCreate(Sender: TObject); var i:integer; rr:TDataSet; begin if not((DataBase1.Connected) and (Table1.Active)) then begin DataBase1.Connected :=True; Table1.Active:=True; end; Query1.SQL.Clear ; Query1.Close; Query1.SQL.Add('select Distinct GroupID From ImportCustom ') ; Query1.Open ; rr:=Query1; for i:=0 to RR.RecordCount -1 do begin ComboBox1.Items.Add(RR.FieldByName('GroupID').Value ); end; end; 我想在COMBOBOX中显示过滤之后的GROUPID字段值,这样写对不对,为什么老是提示GENERATE SQL ERROR,ms jet 4.0参数不足
做一下修改,请参考:procedure TPasswordDlg.FormCreate(Sender: TObject); var i:integer; rr:TDataSet; begin if not((DataBase1.Connected) and (Table1.Active)) then begin DataBase1.Connected :=True; Table1.Active:=True; end; try rr:=TQuery.Create(Self);//先初始化 Query1.Close; Query1.SQL.Clear ; //必须先Close Query1.SQL.Add('select Distinct GroupID From ImportCustom ') ; Query1.Open ; rr:=Query1; for i:=0 to RR.RecordCount -1 do begin ComboBox1.Items.AddRR.FieldByName'GroupID').AsString ); end; //String
finally rr.Free; end; end; 感觉没必要用rr
在你这个用法中rr根本没有用的; 修改成下面的就应该可以; procedure TPasswordDlg.FormCreate(Sender: TObject); begin if not((DataBase1.Connected) and (Table1.Active)) then begin DataBase1.Connected :=True; Table1.Active:=True; end; Query1.Close; Query1.SQL.Clear ; Query1.SQL.Add('select Distinct GroupID From ImportCustom ') ; Query1.Open ; query1.first; while not query1.eof do begin ComboBox1.Items.Add(query1.FieldByName('GroupID').asstring); next; end;
TO chao_jian(升级中...) 我试过了,好象只有讲原来的Table和DataSource两个控件删除,讲Query和 DataBase之间连起来就行了。而要是还用Table和DataSource两个控件的话,跟踪到Query1.Open 时就报错提示:在应用程序目录下没有ImportCustom.mdb文件.不知道是为什么!
a:=query;
这样吗?
var
a:=tdataset;
with query1 do
begin
close;
...
...
open;
end;
if not (query1.eof ) then
a:=query1.fieldbyname('field').asdata;
var
aa:TDataSet;
begin
aa:=Query1;
DataSource1.DataSet :=aa;
end;
procedure TPasswordDlg.FormCreate(Sender: TObject);
var i:integer;
rr:TDataSet;
begin
if not((DataBase1.Connected) and (Table1.Active)) then
begin
DataBase1.Connected :=True;
Table1.Active:=True;
end; Query1.SQL.Clear ;
Query1.Close;
Query1.SQL.Add('select Distinct GroupID From ImportCustom ') ;
Query1.Open ;
rr:=Query1; for i:=0 to RR.RecordCount -1 do
begin
ComboBox1.Items.Add(RR.FieldByName('GroupID').Value );
end;
end;
我想在COMBOBOX中显示过滤之后的GROUPID字段值,这样写对不对,为什么老是提示GENERATE SQL ERROR,ms jet 4.0参数不足
var i:integer;
rr:TDataSet;
begin
if not((DataBase1.Connected) and (Table1.Active)) then
begin
DataBase1.Connected :=True;
Table1.Active:=True;
end; try
rr:=TQuery.Create(Self);//先初始化
Query1.Close;
Query1.SQL.Clear ; //必须先Close
Query1.SQL.Add('select Distinct GroupID From ImportCustom ') ;
Query1.Open ;
rr:=Query1; for i:=0 to RR.RecordCount -1 do
begin
ComboBox1.Items.AddRR.FieldByName'GroupID').AsString );
end; //String
finally
rr.Free;
end;
end;
感觉没必要用rr
修改成下面的就应该可以;
procedure TPasswordDlg.FormCreate(Sender: TObject);
begin
if not((DataBase1.Connected) and (Table1.Active)) then
begin
DataBase1.Connected :=True;
Table1.Active:=True;
end;
Query1.Close;
Query1.SQL.Clear ;
Query1.SQL.Add('select Distinct GroupID From ImportCustom ') ;
Query1.Open ;
query1.first;
while not query1.eof do
begin
ComboBox1.Items.Add(query1.FieldByName('GroupID').asstring);
next;
end;
我试过了,好象只有讲原来的Table和DataSource两个控件删除,讲Query和
DataBase之间连起来就行了。而要是还用Table和DataSource两个控件的话,跟踪到Query1.Open 时就报错提示:在应用程序目录下没有ImportCustom.mdb文件.不知道是为什么!