我在DLL里面有这样一个函数:返回tstringlist,在这个函数就是读出一个值,然后返回.function TForm1.conSqlName(getWord: string;gettablename:string): Tstringlist;
var
accstr,temstr: string;
rstring: TstringList;
counti,i: integer;begin
accstr:='';
accstr := 'Select KeyName from YY_Sys_TableName where KeyWord='+ ''''+getWord+''''
+ ' and TableName='+''''+gettablename+'''';
Form1.ADOQuery1.Close;
Form1.ADOQuery1.SQL.Clear;
with Form1.ADOQuery1 do
begin
SQL.Add(accstr);
Open;
end;
counti := 0;
counti := ADOQuery1.RecordCount;
rstring.Free;
rstring := TStringList.Create();
i := 1;
for I := 1 to counti do begin
temstr := ADOQuery1.Recordset.Fields.Item[0].Value;
ADOQuery1.Recordset.MoveNext;
rstring.Add(temstr);
counti := counti+1;
end;
ADOQuery1.SQL.Clear;
ADOQuery1.Close;
Result := rstring;
end;
我用这样的方法调用:procedure TForm2.FormCreate(Sender: TObject);
var
lw,lt:string;
i: integer;
clist: TStringList;
begin
clist:= TStringList.Create();
lw := 'AddressCharacter';
lt := 'YY_fangwu_Character';
clist := Form1.conSqlName(lw,lt);
combobox1.Clear;
i := 0;
for i := 0 to clist.Count-1 do
begin
combobox1.Items.Add(clist[i]) ;
end;
combobox1.ItemIndex := 0;
clist.Free;end;就是在这个combobox里面显示第一个函数里面的值.一切正常,问题是,我紧接着在第二个地方调用的时候,就死活通不过!!!
急呀!!!var
lw,lt:string;
i: integer;
clist1: TStringList;
begin
clist1:= TStringList.Create(); case ComboBox1.ItemIndex of
0: //普通主宅
begin
lw := 'putongzhuhu';
lt := 'OwnerTable';
end;
1: //出租户
begin
lw := 'zhulinghu';
lt := 'OwnerTable';
end;
2: // 单位
begin
lw := 'qishidanwei';
lt := 'OwnerTable';
end;
3: //宣传栏
begin
lw := 'xuanchuanlan';
lt := 'OwnerTable';
end;
else
begin
showmessage('othjer');
end;
end;
combobox2.Clear;
clist1 := fconSqlName(lw,lt);
i := 0; for i := 0 to clist1.Count-1 do
begin
combobox2.Items.Add(clist1[i]) ;
end;
combobox1.ItemIndex := 0;
clist1.Free;
200分相送,如果愿意,请高人教一下delphi里面ado的连接比较高效的方式!
var
accstr,temstr: string;
rstring: TstringList;
counti,i: integer;begin
accstr:='';
accstr := 'Select KeyName from YY_Sys_TableName where KeyWord='+ ''''+getWord+''''
+ ' and TableName='+''''+gettablename+'''';
Form1.ADOQuery1.Close;
Form1.ADOQuery1.SQL.Clear;
with Form1.ADOQuery1 do
begin
SQL.Add(accstr);
Open;
end;
counti := 0;
counti := ADOQuery1.RecordCount;
rstring.Free;
rstring := TStringList.Create();
i := 1;
for I := 1 to counti do begin
temstr := ADOQuery1.Recordset.Fields.Item[0].Value;
ADOQuery1.Recordset.MoveNext;
rstring.Add(temstr);
counti := counti+1;
end;
ADOQuery1.SQL.Clear;
ADOQuery1.Close;
Result := rstring;
end;
我用这样的方法调用:procedure TForm2.FormCreate(Sender: TObject);
var
lw,lt:string;
i: integer;
clist: TStringList;
begin
clist:= TStringList.Create();
lw := 'AddressCharacter';
lt := 'YY_fangwu_Character';
clist := Form1.conSqlName(lw,lt);
combobox1.Clear;
i := 0;
for i := 0 to clist.Count-1 do
begin
combobox1.Items.Add(clist[i]) ;
end;
combobox1.ItemIndex := 0;
clist.Free;end;就是在这个combobox里面显示第一个函数里面的值.一切正常,问题是,我紧接着在第二个地方调用的时候,就死活通不过!!!
急呀!!!var
lw,lt:string;
i: integer;
clist1: TStringList;
begin
clist1:= TStringList.Create(); case ComboBox1.ItemIndex of
0: //普通主宅
begin
lw := 'putongzhuhu';
lt := 'OwnerTable';
end;
1: //出租户
begin
lw := 'zhulinghu';
lt := 'OwnerTable';
end;
2: // 单位
begin
lw := 'qishidanwei';
lt := 'OwnerTable';
end;
3: //宣传栏
begin
lw := 'xuanchuanlan';
lt := 'OwnerTable';
end;
else
begin
showmessage('othjer');
end;
end;
combobox2.Clear;
clist1 := fconSqlName(lw,lt);
i := 0; for i := 0 to clist1.Count-1 do
begin
combobox2.Items.Add(clist1[i]) ;
end;
combobox1.ItemIndex := 0;
clist1.Free;
200分相送,如果愿意,请高人教一下delphi里面ado的连接比较高效的方式!
第一次Uese单元.clist1:= TStringList.Create();//这行是不要的, 要不会出现内存
泄露.
ADOQuery1.SQL.Clear;
就是在这儿就卡住了.access violation at address 005A54D3 in module 'yy.dll'
ADOQuery1.SQL.Clear;
就是在这儿就卡住了.access violation at address 005A54D3 in module 'yy.dll'