我们有一个遗留数据集,其中一个字段(最后一个)用于保存打包记录。
我们现在需要访问这些数据,我想把它阅读回一个打包的记录会很简单--但不是那么简单。
设计/编写代码的人早就走了,所以我只剩下我能发现的东西。
我目前掌握的情况是-
写入的打包记录格式为:
TRecordStru = packed record
RecData1 : integer ;
RecData2 : array [0..9] of char ;
RecData3 : array [0..9] of char ;
RecData4 : integer ;
RecData5 : array [0..9] of char ;
RecData6 : integer ;
end;
字符串
创建打包记录的代码为:
with myRecord do // TRecordStru
begin
RecData1 := Num1 ; // integer
StrPLCopy(RecData2,StrData2,sizeof(RecData2)) ; // mm/dd/yyyy
StrPLCopy(RecData3,StrData3,sizeof(RecData3)) ;
RecData4 := Num2 ; // integer
StrPLCopy(RecData5,StrData5,sizeof(RecData5)) ;
RecData6 := Num6 ; // integer
end;
型
为字段创建数据的代码:
...
var
tmpData : string
...
tmpData := spaces(sizeof(myRecord)); // TRecordStru
move(myRecord,tmpData[1],sizeof(myRecord));
...
型
以及将数据保存到字段的代码:
...FieldByName('myField').AsString := VarToStr(Value)+#0 ; // variant
型
为了阅读回它,我尝试了以下方法:FieldByName('myField').DataType
报告的DataType
是ftBytes
。
我可以使用以下方法将数据放入缓冲区:
FieldByName('myField').GetData(myBuffer)
型myBuffer
定义为:
myBuffer : array of byte;
型
初始化如下:
getmem(myBuffer,260) ;
型
我可以看到数据在那里,可以手动解析,但有没有一个“正确”的方法来做到这一点?
1条答案
按热度按时间chy5wohz1#
我会用这样的东西。也许再加些检查。
字符串