一段ado代码有点问题???(20分)

  • 主题发起人 主题发起人 绯红之王
  • 开始时间 开始时间

绯红之王

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure selectquery(aquery:tadoquery; sql : string);
begin
aQuery := TADOQuery.Create(nil);
aQuery.Connection := dmaconnection.adoconnection1;
aQuery.SQL.Add(sql);
aquery.Close;
aquery.open;
end;

以上是个公共过程
我在调用时
procedure Tflogin.btnloginClick(Sender: TObject);
var aQuery1 : TADOQuery;
begin
selectquery(aquery1,'select * from username where 用户名 = '''+edit1.text+'''');
showmessage(aquery1.fields[0].value );

end;
只要使用aquery1就会出错,,提示说aquery1没有初始化
这是怎么回事
 
我也想知道
 
aQuery := TADOQuery.Create(nil);
你这样用很不安全,执行次数超过一次后,就会出错,因为没有释放,却总是创建。最好用一个function返回要得到的东东然后,把这个控件释放。
要不,你就用:
if not Assigned(aQuery) then
  aQuery := TADOQuery.Create(Application);
另外,还要这样:
aQuery.SQL.Clear;
然后再添加SQL。
 
调用函数时,传进实参,函数内部对形参做操作。
procedure selectquery(aquery:tadoquery; sql : string);
begin
aQuery.Connection := dmaconnection.adoconnection1;
aQuery.SQL.Add(sql);
aquery.Close;
aquery.open;
end;

procedure Tflogin.btnloginClick(Sender: TObject);
var aQuery1 : TADOQuery;
begin
aquery1:= TADOQuery.Create(nil);
try
selectquery(aquery1,'select * from username where 用户名 = ''' + edit1.text + '''');
showmessage(aquery1.fields[0].value);
finally
aquery1.Free;
end;
end;
 
你在应用程序中加入adoquery吧,使用更安全。
 
同意happycyp的意见,可改为如下:
function selectquery(sql : string): TADOQuery;
begin
Result := TADOQuery.Create(nil);
with Result do
begin
Connection := dmaconnection.adoconnection1;
Close;
SQL.Add(sql);
open;
end;
end;

调用的时候:aQuery1 := selectquery('select * from username where 用户名 = '''+edit1.text+'''');
aQuery1.Free;
 
我试过的,不要说我的不行
function SelectQuery(ADOConn: TADOConnection;
strSQL: String): TADOQuery;
begin
Result:=TADOQuery.Create(nil);
with Result do
begin
Connection:=ADOConn;
SQL.Text:=strSQL;
Open;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
ADOQry:TADOQuery;
begin
//ADOConnection1是我预先放在窗体上,并已连接
ADOQry:=SelectQuery(ADOConnection1,'select * from username where 用户名 = '''+edit1.text+'''');
with ADOQry do
try
if RecordCount=0 then exit; //如果没有记录,就不要读数据了吧
while not eof do //假设有多条记录
begin
Memo1.Lines.Add(Fields[0].AsString);
Next;
end;
finally
Free;
end;
end;
 
happycyp,是正解
 
procedure Tflogin.btnloginClick(Sender: TObject);
var aQuery1 : TADOQuery;
begin
selectquery(aquery1,'select * from username where 用户名 = '''+edit1.text+'''');
showmessage(aquery1.fields[0].value );

end;
在selectquery(aquery1,'select * from username where 用户名 = '''+edit1.text+'''');前应先把aquery1连接到某个TAdoConnection上吧??否则肯定说没有初始化的了
 
多人接受答案了。
 
后退
顶部