我正在使用查询(实际上是来自 Devart 的 TMyQuery,继承自 TDataSet)从 mySQL 数据库中获取数据。通常我在while not eof
循环中使用fieldbyname()
.
由于某些处理很复杂,我想取而代之的是获取整个记录并将其传递给一个过程来处理远离循环的每个字段。
我认为这可能与该GetCurrentRecord()
方法有关,如果它被覆盖,该方法似乎返回一个指向 Byte 的指针,但是我不清楚如何从该指针中提取我的字段。
如果可以这样做,请有人告诉我获取一条完整记录的语法,将其作为参数传递,然后提取每个字段吗?
我通常使用的代码结构
Procedure ProcessTable;
begin
Query1.SQL.Clear;
Query1.SQL.Add(SQL);
Query1.Open;
Query1.first ;
while not Query1.Eof do
begin
var1 := Query1.FieldByName('field1').AsString;
var2 := Query1.FieldByName('field2').AsInteger;
//etc.
Query1.Next;
end;
Query1.close;
end;
我想做的伪代码
procedure ProcessRecord( TheRecord : PByte );
begin
..
<extract the fields from TheRecord and process them>
..
end;
Procedure ProcessTable;
var
buffer : PByte;
begin
Query1.SQL.Clear;
Query1.SQL.Add(SQL);
Query1.Open;
Query1.first ;
while not Query1.Eof do
begin
buffer := Query1.GetCurrentRecord;
ProcessRecord(buffer);
Query1.Next;
end;
Query1.close
end;