且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

使用字符串+整数和调用函数形成一个变量名

更新时间:2023-11-15 14:06:46

而不是创建变量 ADOQuery1 ADOQuery2 ADOQuery3 等类型 TADOQuery ,创建一个数组:

  ADOQueries:数组的TADOQuery; 

然后设置其中的元素数量,当你知道他们将有多少:

  SetLength(ADOQueries,NumberOfQueries); 

或者,如果您从头开始知道将有多少元素,您可以定义 ADOQueries 改为静态数组:

  ADOQueries:array [0..7 ]的TADOQuery; 

现在你可以做

  procedure TForm1.QueryChange(sqltext:String; query:Integer); 
begin
ADOQueries [Query] .Close;
ADOQueries [Query] .SQL.Clear;
ADOQueries [Query] .SQL.Add(sqltext);
ADOQueries [Query]。打开;
结束


Firstly, I am new to these and the question could be stupid. Anyway, I have a procedure like this:

procedure Tform1.QueryChange(sqltext : String; query : Integer);
begin
if query = 1 then begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(sqltext);
ADOQuery1.Open;
end;
if query = 2 then begin
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add(sqltext);
ADOQuery2.Open;
end;

I would like to remove the if blocks and make one united code:

ADOQuery+query.Close; (know that looks very silly)
ADOQuery+query.SQL.Clear;
ADOQuery+query.SQL.Add(sqltext);
ADOQuery+query.Open;

My goal is when query=1 code will use ADOQuery1.Close; etc. when query=2 code will use ADOQuery2.Close;

Instead of creating variables ADOQuery1, ADOQuery2, ADOQuery3 etc of type TADOQuery, create an array:

ADOQueries: array of TADOQuery;

Then set the number of elements in it, when you know how many they will be:

SetLength(ADOQueries, NumberOfQueries);

Alternatively, if you know from the beginning how many elements there will be, you can define ADOQueries to be a static array instead:

ADOQueries: array[0..7] of TADOQuery;

Now you can do

procedure TForm1.QueryChange(sqltext: String; query: Integer);
begin
  ADOQueries[Query].Close;
  ADOQueries[Query].SQL.Clear;
  ADOQueries[Query].SQL.Add(sqltext);
  ADOQueries[Query].Open;
end;