- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个关于 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;
最佳答案
我认为,如果您使用预先存在的电子表格,该电子表格不包含您要用于保存数据的工作表,那么执行此操作会更容易。然后,您可以构造一个 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/
我刚刚读过“Injecting Custom Logic in ADO.NET Data Services”,我的下一个问题是,如何使[WebGet]方法显示在客户端代理类中?当然,我可以直接使用We
我需要学习 ADO.NET 来构建基于 MS Office 的应用程序。我在 MSDN 库中阅读了大量有关 ADO.NET 的内容,但对我来说,一切都显得相当困惑。 使用 ADO.NET 时必须了解哪
所以这是交易。在我们的数据库中,出于安全性和模块化的目的,我们将大部分读取(即选择语句)包装在表值函数中。所以我有一个定义一个或多个可选参数的 TVF。 我相信具有默认参数的 TVF 要求使用关键字
我需要通过 ADO.NET 创建一个临时表,执行一个 BulkCopy然后是 Merge在临时表和实际表之间的服务器上。 问题是使用纯 ADO.NET 创建动态临时表。 架构应该与现有表相同,但该表是
我开发了一个带有自定义数据库配置的产品。我将 ADO.NET 与 System.Data.Odbc.OdbcConnection 结合使用。为了在数据库之间做出一些区别,有一个简单的解决方案来检测连接
我有一些 friend 是“老派”VB6 数据库开发人员,我向他们介绍了 .NET 及其功能,特别是 ADO.NET。 在我们的谈话中,他们提出了为什么他们宁愿坚持使用 ADO 而不是转向 ADO.N
我有一个有 6 列的数据库表。主键是由 6 列中的 5 列组成的复合键 我正在尝试使用 SqlClient.SqlCommandBuilder.GetDeleteCommand删除该行。 但是我收到以
我已经编写了一个围绕 ADO.NET 的 DbProviderFactory 的包装器,我在我的应用程序中广泛使用它。我还编写了很多将 IDataReader 行映射到 POCO 的代码。然而,由于我
我知道这已经被问过了。 大多数答案都不相关。 谷歌,显示解决方案是在“数据流任务”中配置表达式并设置查询。 然而,在 ADO .NET 源代码中,当我尝试预览输出时,我不断收到 "Must decla
我的代码如下: var statement = "test_oracle.sql"; F = aqFile.OpenTextFile(statement, aqFile.faRead, aqF
可以从 MATLAB 调用 .NET,所以我想我会尝试使用 ADO.NET 连接到数据库。 我似乎遇到了一个阻塞问题 - 无论何时您尝试创建一个 Command 对象,它都会抛出一个错误。 你可以自己
在中发现的物体之间有什么类比? JDBC 以及在 中找到的那些ADO.Net ? 我知道 JDBC 和 ADO.Net 中的对象模型并不完全相同,但我认为可以在它们之间找到一些类比(以及值得说明的关键
我有一个在 DbProviderFactory 的 machine.config 中注册的 ADO.NET 托管数据提供程序 - 它可供 Analysis Services 使用,因此我知道它已正确注
我一直在阅读有关 TransactionScope 的内容,并对它与 ADO.Net 事务的互操作性有疑问。现在我们有一些数据访问方法,每个方法都调用存储过程并开始和提交自己的单独事务。简单明了,样板
是否可以在不借助 DataAdapter 的情况下在 ADO.NET 中实现多个存储过程调用的批处理(执行更新/删除)? 最佳答案 您可以尝试使用 System.Data.SqlClient.SqlC
是否可以获取 OleDbCommand 的文本?用它们的值替换所有参数?例如。在下面的代码中,我正在寻找一种获取查询文本的方法 SELECT * FROM my_table WHERE c1 = 'h
什么更快 - ADO.NET 或 ADO.NET Entity Framework ? 最佳答案 没有什么比 ADO.NET 数据读取器更快了。 Entity Framework 也在“地下室”中使用
我需要 .NET Core 上的 ODP.NET(适用于 .NET 的 Oracle 数据提供程序),但无论如何找不到使其工作。 当我引用 OracleConnection 或 OracleComma
我正在启动一个基于 ASP.NET 和 Windows 服务器的新项目。 该应用程序计划非常大,并且为大量客户端提供高频拉取和更新服务。更改数据。 我之前曾使用 Linq-To-Sql 或 Ado.N
有没有其他快速的方法来在 ADO.Net 中填充数据表而不使用 Data adaptor.Fill 方法? 最佳答案 是的,你可以。这是一个简短的例子: var results = new DataT
我是一名优秀的程序员,十分优秀!