代码大致内容:
type
TDBRecord=record
id:integer;
name:string;
age:integer;
end;
PDBRecord=^TDBRecord;
type
......function ConnectDBandGetDBcontent(HostIp,UserName:String):Pointer;
var
SQLConnection: TSQLConnection;
SQLQuery:TSQLQuery;
Count,i:integer;
ArrDBRecord:Array of PDBRecord;
begin
SQLConnection :=TSQLConnection.Create(nil);
SQLQuery:=TSQLQuery.Create(nil);
...
...
while not SQLQuery.Eof do
begin
new(ArrDBRecord[i]);
ArrDBRecord[i]^.id :=SQLQuery.Fields.Fields[0].AsInteger ;
ArrDBRecord[i]^.name:=SQLQuery.Fields.Fields[1].AsString ;
ArrDBRecord[i]^.age:=SQLQuery.Fields.Fields[2].AsInteger ;
dispose(ArrDBRecord[i]);
SQLQuery.Next ;
Inc(i);
end;
Result:= @ArrDBRecord;
end;目的:我现在是想把数据库中的数据存到一个指针数组,数组中的各个指针分别指向结构体,函数的 返回值为指针。
问题1:Result:= @ArrDBRecord 返回的是数组的首地址,还是数组中每一个元素的地址?
问题2:如何引用数组中指针指向结构体的内容?
type
TDBRecord=record
id:integer;
name:string;
age:integer;
end;
PDBRecord=^TDBRecord;
type
......function ConnectDBandGetDBcontent(HostIp,UserName:String):Pointer;
var
SQLConnection: TSQLConnection;
SQLQuery:TSQLQuery;
Count,i:integer;
ArrDBRecord:Array of PDBRecord;
begin
SQLConnection :=TSQLConnection.Create(nil);
SQLQuery:=TSQLQuery.Create(nil);
...
...
while not SQLQuery.Eof do
begin
new(ArrDBRecord[i]);
ArrDBRecord[i]^.id :=SQLQuery.Fields.Fields[0].AsInteger ;
ArrDBRecord[i]^.name:=SQLQuery.Fields.Fields[1].AsString ;
ArrDBRecord[i]^.age:=SQLQuery.Fields.Fields[2].AsInteger ;
dispose(ArrDBRecord[i]);
SQLQuery.Next ;
Inc(i);
end;
Result:= @ArrDBRecord;
end;目的:我现在是想把数据库中的数据存到一个指针数组,数组中的各个指针分别指向结构体,函数的 返回值为指针。
问题1:Result:= @ArrDBRecord 返回的是数组的首地址,还是数组中每一个元素的地址?
问题2:如何引用数组中指针指向结构体的内容?
解决方案 »
- 怎样将Excel表格中的数据导入数据库?
- 后台数据库的并发测试问题
- DBGrid未提供响应CellExit事件,咨询各位是如何解决相关问题的?
- 为什么运行时说参数找不到呢?有分
- 今天结了1000分的贴子,有问题要请教高手。
- 有点难度的问题:我想在SQLServer的存储过程中调用COM组件,怎么调用啊,能不能给个例子,我高分相送。
- 如何在客户端的到数据库某个表的信息?
- 在一个窗口上贴图,但当窗体最大化的时候图大小没有变化
- 请教关于 datetimepicker控件的用法??
- 郑重发问,《程序员大本营》里的InterBase6.0是否正常可用版?(20分)
- 可否确定一个Excel文件是否已经打开. 当Excel关闭时能否发送一个消息来告诉程序.请高人指点啦
- 日期型数据如何显示的时候只为年月,不要日.
2、你的程序里已经在引用了啊,“ArrDBRecord[i]^.id”
1. array of ... 这种动态数组, 并不能够用new命令来设置它的某个元素。动态数组应该用SetLength函数来设置它的大小(元素个数)。
2. new(ArrDBRecord[i]); ... dispose(ArrDBRecord[i]);
new完之后,就dispose了,意味着这个元素所占据的空间又被释放了(暂不论这个new方法本身是否正确)
3. ArrDBRecord:Array of PDBRecord; 这个ArrDBRecord变量是这个函数的局部变量,它的生存周期仅限于函数内部,函数一返回,这个变量已经不存了,Result:= @ArrDBRecord;返回的是一个不能引用的地址。