【发布时间】:2018-05-16 08:21:38
【问题描述】:
我目前正在开发一个程序,该程序的功能是从 Excel 电子表格中读取数据,用户应该能够在其中编辑库存数量并生成仅使用的库存的单独报告,我已经这样做了。我的问题发生在尝试更新原始电子表格时,显示随着用户在程序上添加/删除库存变得更少/更多。
我已经能够在 DBGrid 中显示库存的变化,但在实际的电子表格上没有进行任何更改,因此每当重新启动程序时,它都会显示不变的数字。(这是使用 DBEdits 完成的)
**我已经创建了此代码的较小版本,希望使我的问题更清晰,更易于阅读。利用查询来尝试更新 Excel 电子表格,电子表格中的第一行的值为 17程序试图更改为 5。每当我运行此代码时,我都会收到“更新语句中的语法错误”,我很确定情况并非如此。我玩过添加诸如
之类的代码ADOQuery.open ADOQuery.Enabled := 假 ADOQuery.Enabled := true
等等。每个都给我不同的错误。**
代码如下:
procedure TForm1.FormCreate(Sender: TObject);
begin
//Building Connection string as well as recieving filename of excel document
OpenDialog1.Execute;
ADOQuery1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;' + 'Data Source=' + OpenDialog1.FileName + ';' + 'Extended Properties="Excel 8.0;IMEX=2"';
//Working SQL statement to display records in DBGrid
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT * FROM [Sheet1$];');
ADOQuery1.Active := true;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
//Broken code, purpose is to replace the first row value with a new value
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('UPDATE [Sheet1$]');
ADOQuery1.SQL.Add('SET Value = 5');
ADOQuery1.SQL.Add('WHERE Value = 17;');
ADOQuery1.ExecSQL;
end;
end.
示例电子表格: Sample Spreadsheet used in code above
在过去的两天里,我一直在研究这个问题,但不知何故,我似乎一直没有找到答案,询问始终是最后的努力。如果您不知道解决方案,我们将不胜感激任何指导,甚至是对其他编程语言/IDE 的建议,这将给我带来更富有成效的结果。如果您能够将一个可能与我当前程序相关的链接到我,我什至会接受 Excel 脚本教程
P.S 很抱歉这么长的帖子,这个网站还很新。非常感谢所有帮助。
【问题讨论】:
-
有趣的 q,+1,因为从谷歌结果来看,其他人似乎没有使用 Sql 更新工作表来解决这个问题。我想我知道为什么 - 请参阅我的更新答案。
标签: excel delphi ado tadoquery data-controls