【问题标题】:Update cell query for Excel ADO from Delphi从 Delphi 更新 Excel ADO 的单元格查询
【发布时间】:2013-08-22 01:11:04
【问题描述】:

我有以下代码来打开我的 Excel 工作表,使用 TADOConnection 和 TADOQuery:

conExcel.ConnectionString := 'Provider=Microsoft.JET.OLEDB.4.0;Data Source="D:\temp\file.xls";Extended Properties="Excel 8.0;HDR=No"';
conExcel.Connected := true;

当我运行以下代码时:

queryExcel1.SQL.Text := 'SELECT * FROM [Hoja1$]';
queryExcel1.Open;
while not queryExcel1.eof do
begin
  showmessage(queryExcel1.Fields.Fields[0].AsString);
  queryExcel1.Next;
end;

我得到了文件的每一行,所以它工作正常,但我想更新一个单元格。 我正在使用此代码:

queryExcel2.SQL.Text := 'UPDATE [Hoja1$] SET F1 = 555555';
queryExcel2.ExecSQL;

以某种方式将工作表上的每个“A”单元格更新为 555555,但我真正想要的只是将 A1 单元格设置为 555555。有关如何包含查询的 WHERE 部分的任何提示。谢谢。

【问题讨论】:

  • 我试过 queryExcel1.SQL.Text := 'SELECT * FROM [Hoja1$A1:A10]';即使在 select 语句中,它也会失败并出现错误:“参数对象定义不正确”

标签: excel delphi ado


【解决方案1】:

如果您想使用 Adoquery,则必须将 ParamCheck 设置为 false,因为您必须将 : 用于要更新的​​范围。
另一种选择是直接使用连接。
在下面的示例中,范围 B2:B2 与 F1 一起使用,这是第一列的 Jet 的默认名称。 (B2是我们要更新的单元格)

  Q.SQL.Text := 'UPDATE [Hoja1$B2:B2] SET [F1] = 555555';
  Q.ExecSQL;
  // or:
  //AdoConnection1.Execute('UPDATE [Hoja1$B2:B2] SET [F1] = 555555'); 

【讨论】:

  • 将 paramcheck 设置为 false 就成功了!现在完美运行。
猜你喜欢
  • 1970-01-01
  • 2018-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多