gpt4 book ai didi

excel - 如何在 Delphi 6 运行时向 ADO Recordset 添加字段?

转载 作者:行者123 更新时间:2023-12-03 18:35:50 34 4
gpt4 key购买 nike

我有一个关于 ADO 记录集的简单问题。我有两个 _RecordSet 正在运行,我正在比较它们的差异。

代码如下。

    function TPT101_ANAF.DataSetKarsilastir(Eski: _Recordset; Yeni: _Recordset) :_Recordset;
var
varBookMark:OleVariant;
begin
Eski.MoveFirst;
Yeni.MoveFirst;
while not Yeni.EOF do
begin
Eski.Find('SİCİL = '''+Yeni.Fields['SİCİL'].Value+'''',0, adSearchForward, adBookmarkFirst);
If (Eski.BOF = True) OR (Eski.EOF = True) Then
begin
PT101FDM.EXCELSET.Append;
**/* i want to add differences to EXCELSET (From Yeni RecordSet)
/* but the disconnected ADODataset error raising.**
PT101FDM.EXCELSET.Insert;
end;
Yeni.MoveNext;
end;
Result := PT101FDM.EXCELSET.Recordset;

结尾;

我应该怎么做才能创建一个新的 RecordSet 并将数据写入其中。

注意:EXCELSET.Recordset 是另一个制作 excel 表的函数,因此它与数据库没有这样的东西。

最佳答案

我认为,如果您使用预先存在的电子表格,该电子表格不包含您要用于保存数据的工作表,那么执行此操作会更容易。然后,您可以构造一个 Sql 语句来创建具有所需结构的表,并将 TAdoCommand 的 CommandText 设置为该表,然后在其上调用 TAdoCommand.Execute,将工作表添加到电子表格中。 (显然,在 Excel 中手动添加工作表会更容易,但我假设您不想这样做,无论出于何种原因,无论如何,弄清楚如何做这样的事情很有趣/有用“艰难的道路”)。

下面是一个在现有工作簿中创建新表的最小项目,我希望它足以让您继续前进。

我发现让它工作的最棘手的一点是让 TAdoConnectionString 正确。特别是,在 IDE 的 AdoConnectionString 构建器中,您需要转到
全部 选项卡并在扩展属性条目中输入适当的值,在我的例子中是“Excel 8.0”。

请注意(无论如何在 D7 中):

a) 如果您在 IDE 中对连接到它的数据集进行后续更改,扩展属性条目往往会变为空白,并且

b) 在 IDE 中,TAdoCommand 以某种方式获取创建的 Parameter 对象,在编译和运行程序之前需要将其删除。

更新 我假设一旦你创建了新的表格/工作表,你就可以使用你选择的标准 Delphi Ado 组件来填充它,但为了完整起见,我更新了下面的代码以显示一种方法它。

代码

  TForm1 = class(TForm)
[...]
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
ADOQuery2: TADOQuery;
ListBox1: TListBox;
ADOCommand1: TADOCommand;
Button1: TButton;
[...]
const
scSheetName = 'test';
scCreateSheet = 'create table %s (id integer, name char(80))';
scSelect = 'select * from [%s]';

procedure TForm1.FormDestroy(Sender: TObject);
begin
AdoQuery1.Close;
AdoQuery2.Close;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if ListBox1.Items.IndexOf(scSheetName) < 0 then begin
AdoCommand1.CommandText := Format(scCreateSheet, [scSheetName]);
AdoCommand1.Execute;
end;
AdoQuery2.SQL.Text := Format(scSelect, [scSheetName]);
if AdoQuery2.Active then
AdoQuery2.Close;
AdoQuery2.Open;
if AdoQuery2.RecordCount = 0 then begin
AdoQuery2.InsertRecord([1, 'Name1']);
AdoQuery2.InsertRecord([2, 'Name2']);
end;
GetTables;
end;

procedure TForm1.GetTables;
begin
AdoConnection1.GetTableNames(ListBox1.Items,True);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
AdoConnection1.Connected := True;
AdoQuery1.Open; // this just selects whatever is on the first worksheet of the spreadsheet
GetTables;
end;

自由度
object ADOConnection1: TADOConnection
ConnectionString =
'Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=D:\aa' +
'ad7\Ado\Excel\Table1.xls;Mode=Share Deny None;Extended Propertie' +
's=Excel 8.0;Persist Security Info=False;Jet OLEDB:System databas' +
'e="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";J' +
'et OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;Jet OL' +
'EDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions' +
'=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Da' +
'tabase=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don''t Co' +
'py Locale on Compact=False;Jet OLEDB:Compact Without Replica Rep' +
'air=False;Jet OLEDB:SFP=False'
LoginPrompt = False
Provider = 'Microsoft.Jet.OLEDB.4.0'
Left = 16
Top = 8
end
object ADOQuery1: TADOQuery
Connection = ADOConnection1
Parameters = <>
SQL.Strings = (
'select * from [sheet1$]')
Left = 48
Top = 16
end
object ADOCommand1: TADOCommand
CommandText = 'create table test (id integer,'#13#10'name char(80)'#13#10')'
Connection = ADOConnection1
Parameters = <>
Left = 152
Top = 16
end
object DataSource2: TDataSource
Left = 184
Top = 16
end
object ADOQuery2: TADOQuery
Connection = ADOConnection1
Parameters = <>
SQL.Strings = (
'select * from [test]')
Left = 40
Top = 288
end

关于excel - 如何在 Delphi 6 运行时向 ADO Recordset 添加字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31641183/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com