R
redted4
Unregistered / Unconfirmed
GUEST, unregistred user!
Access数据表结构如下:
version l(长整型)
AlarmId l
Alarmsource l
AlarmType l
WarnName 60 文本
WarnDetail 255 文本
proposal 255 文本
paracount byte
paraExpla 255 文本
-------------
type
ptblAlarmInfoRec = ^tblAlarmInfoRec;
tblAlarmInfoRec = record
version: longInt;
AlarmId: longInt;
AlarmSource:longInt;
AlarmType: longInt;
WarnName: array[0..60] of char;
warnDetail: array[0..255] of char;
proposal: array[0..255] of char;
paracount: byte;
paraExpla: array[0..255] of char;
end;
var
ptoptblAlarmInfoRectblAlarmInfoRec;
tblAlarmInfoRecordCount:integer;
a_alarmInfo:array[0..100] of tblAlarmInfoRec; //定义数组
i:integer;
procedure TForm1.datafromquerytoarray;
begin
query1.Open;
tblAlarmInfoRecordCount:=Query1.RecordCount;
GetMem(ptoptblAlarmInfoRec,SizeOf(tblAlarmInfoRec)*tblAlarmInfoRecordCount);
for i:=0 to tblAlarmInfoRecordCount-1 do
begin
with query1 do
begin
a_alarmInfo.version:=fieldbyname('version').AsInteger;
a_alarmInfo.AlarmId:=fieldbyname('AlarmId').AsInteger;
a_alarmInfo.alarmsource:=fieldbyname('AlarmSource').AsInteger;
a_alarmInfo.alarmType:=fieldbyname('AlarmType').AsInteger;
StrPCopy(a_alarmInfo.WarnName,fieldByName('WarnName').Asstring);
StrPCopy(a_alarmInfo.WarnDetail,fieldByName('WarnDetail').Asstring);
StrPCopy(a_alarmInfo.Proposal,fieldByName('proposal').Asstring);
a_alarmInfo.paracount:=Byte(fieldbyname('AlarmType'));
StrPCopy(a_alarmInfo.ParaExpla,fieldByName('ParaExpla').Asstring);
next;
end;
end;
end;
{
在发出以前我刚改成动态数组
a_alarmInfo:array of tblAlarmInfoRec;
SetLength(a_alarmInfo,tblAlarmInfoRecordCount);
因为不在公司没法调试,不知道结果是不是会好一些?}
用query1从中取到数据后(select *...)再赋给记录数组,可是有点问题啊:1、调试观察到只有a_alarmInfo{0]有数据,其余没有数据。2。其余的数据和有汉字的地方匀显示为#0. 3。会出现“access violation..."的错误,就是在循环a_alarmInfo.version:=...开始出现,但如果把循环体中语句改为a_alarmInfo[0].version...则不会有错。
如果请教各位大侠如何才能改进?
version l(长整型)
AlarmId l
Alarmsource l
AlarmType l
WarnName 60 文本
WarnDetail 255 文本
proposal 255 文本
paracount byte
paraExpla 255 文本
-------------
type
ptblAlarmInfoRec = ^tblAlarmInfoRec;
tblAlarmInfoRec = record
version: longInt;
AlarmId: longInt;
AlarmSource:longInt;
AlarmType: longInt;
WarnName: array[0..60] of char;
warnDetail: array[0..255] of char;
proposal: array[0..255] of char;
paracount: byte;
paraExpla: array[0..255] of char;
end;
var
ptoptblAlarmInfoRectblAlarmInfoRec;
tblAlarmInfoRecordCount:integer;
a_alarmInfo:array[0..100] of tblAlarmInfoRec; //定义数组
i:integer;
procedure TForm1.datafromquerytoarray;
begin
query1.Open;
tblAlarmInfoRecordCount:=Query1.RecordCount;
GetMem(ptoptblAlarmInfoRec,SizeOf(tblAlarmInfoRec)*tblAlarmInfoRecordCount);
for i:=0 to tblAlarmInfoRecordCount-1 do
begin
with query1 do
begin
a_alarmInfo.version:=fieldbyname('version').AsInteger;
a_alarmInfo.AlarmId:=fieldbyname('AlarmId').AsInteger;
a_alarmInfo.alarmsource:=fieldbyname('AlarmSource').AsInteger;
a_alarmInfo.alarmType:=fieldbyname('AlarmType').AsInteger;
StrPCopy(a_alarmInfo.WarnName,fieldByName('WarnName').Asstring);
StrPCopy(a_alarmInfo.WarnDetail,fieldByName('WarnDetail').Asstring);
StrPCopy(a_alarmInfo.Proposal,fieldByName('proposal').Asstring);
a_alarmInfo.paracount:=Byte(fieldbyname('AlarmType'));
StrPCopy(a_alarmInfo.ParaExpla,fieldByName('ParaExpla').Asstring);
next;
end;
end;
end;
{
在发出以前我刚改成动态数组
a_alarmInfo:array of tblAlarmInfoRec;
SetLength(a_alarmInfo,tblAlarmInfoRecordCount);
因为不在公司没法调试,不知道结果是不是会好一些?}
用query1从中取到数据后(select *...)再赋给记录数组,可是有点问题啊:1、调试观察到只有a_alarmInfo{0]有数据,其余没有数据。2。其余的数据和有汉字的地方匀显示为#0. 3。会出现“access violation..."的错误,就是在循环a_alarmInfo.version:=...开始出现,但如果把循环体中语句改为a_alarmInfo[0].version...则不会有错。
如果请教各位大侠如何才能改进?