我想在程序中将二维数组作为记录集使用(行对应记录,列对应字段),请问在Delphi中可以将一个二维数组装入一个记录集吗?
解决方案 »
- 请教用WebBrower,如果只知道变量名字,如何取得网页script变量
- 在sql表中和DbgridEh中显示正常的身份证号码,导出到Excel表中尾数部分会自动变为0
- ■■经典回放
- 劝大家千万要注意身体
- TIdTCPServer/TIdTCPClient发送数据的问题
- 一个菜问题,请教各位了
- 看吧!叫你不揭帖!!没信誉了吧!!!
- 请delphi database板块的版主进来
- delphi 中ISAPI 编程问题
- Delphi程序最小化的问题
- 请教高手:在DBGridEh中能对clientdataset数据集实现多列排序吗?(按ctrl键点击标题可选择按多列)
- 根据光标在图片中的位置来判断点出的是那个小图
procedure TForm1.Button1Click(Sender: TObject);
var
Col: Integer;
Row: Integer;
Rows: Integer;
Cols: Integer;
ArrData: array of array of Variant; //动态二维数组
begin
Row := 0;
if Ds.DataSet.RecordCount > 0 then //DS是TDataSource
begin
Rows := Ds.DataSet.RecordCount;
SetLength(ArrData, Rows);
while not Ds.DataSet.Eof do
begin
Cols := Ds.DataSet.FieldCount;
SetLength(ArrData[Row], Cols);
for Col := 0 to Pred(Ds.DataSet.FieldCount) do
ArrData[Row, Col] := Ds.DataSet.Fields[Col].Value;
Inc(Row);
Ds.DataSet.Next;
end;
end;
end;
你可能理解错了,我问的是怎样将二维数组赋值给一个记录集,而不是记录集赋值给二维数组。谢谢!
DS := TDataSource.Create(self);
DS.DataSet.FieldCount := 2;
DS.DataSet.RecordCount := 2;
编译时报错说FieldCount和RecordCount是只读的!
ActiveX, ADODB, DB;..........procedure TForm1.BtnWriteClick(Sender: TObject);
var
ADOConnection: TADOConnection;
ADOTable: TADOTable;
DataSource: TDataSource;
ArrData: array[0..100, 0..10] of Variant;
begin
//你的数组赋值过程
ArrData[0,0] := '2006';
ArrData[0,1] := '女';
ArrData[0,0] := '2007';
ArrData[0,1] := '男';
//......
CoInitialize(nil);
ADOConnection := TADOConnection.Create(nil);
ADOConnection.ConnectionString := 'Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=WANGS;Data Source=.;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=HOME;Use Encryption for Data=False;Tag with column collation when possible=False';
ADOConnection.LoginPrompt := False; ADOTable := TADOTable.Create(nil);
ADOTable.Connection := ADOConnection;
ADOTable.TableName := 'TableID'; //创建数据源没有什么实际意义,只是演示让你知道怎样去动态创建
DataSource := TDataSource.Create(nil);
DataSource.DataSet := ADOTable; //你的字段创建过程(字段数据类型有很多种,具体你去参阅DB单元)
with TStringField.Create(ADOTable) do
begin
Size := 50;
FieldName := 'Content';
FieldKind := fkData; //字段类型有很多种,具体你去参阅DB单元
DataSet := ADOTable;
end; with TStringField.Create(ADOTable) do
begin
Size := 50;
FieldName := 'Sex';
FieldKind := fkData;
DataSet := ADOTable;
end;
//...... try
//你的数据集赋值和提交过程 (根据你的数据量循环)
try
ADOConnection.Open;
ADOConnection.BeginTrans;
ADOTable.Open;
ADOTable.Append;
ADOTable.Fields[0].Value := ArrData[0,0];
ADOTable.Fields[1].Value := ArrData[0,1];
ADOTable.Post;
ADOConnection.CommitTrans;
ADOTable.Close;
ADOConnection.Close;
except
ADOConnection.RollbackTrans;
ADOConnection.Close;
end;
//......
finally
DataSource.Free;
ADOTable.Free;
ADOConnection.Free;
end;
end;
----以上代码测试通过。 测试员: 老冯
还想问下,这种方法所用的DataSet是以ADOTable形式体现的,而ADOTable要与数据库中的表相关联,有没有不用和数据库表关联的创建DataSet的方法?因为我只想用DataSet本身,不想在数据库中单单为DataSet建立一个空表。谢谢!