我正在尝试将tblDeelnemers
dbDeelnemers
的数据复制到文本文件Deelnemers.txt
该表包含4列,即:ID,Naam,van,kontaknommer。 我的表单上有 TADOQuery 以及 dbGrid 。我正在使用 Microsoft Access 和 Delphi 7 。
我已经找到了可能的方法,但我能得到的唯一帮助就是C#。
我希望稍后在单击按钮时调用此文本文件。保存数据的格式无关紧要我只需将其加载回数据集即可。我这样做是因为在这个“导入”之后,表中的数据被删除,从头开始
我尝试了以下但是完全错误:
var
sDeelnemers : string;//string to copy data in before adding to textfile
Begin // sIDkies is global string
frmData.qryVGKompetisieDB.Active := false;
frmData.qryVGKompetisieDB.SQL.Text := 'copy ID, Naam, Van, Kontaknommer from tblDeelnemers into sDeelnemers WHERE ID = "'+sIDkies+'"; // copying data into string
frmData.qryVGKompetisieDB.ExecSQL;
frmData.qryVGKompetisieDB.SQL.Text := 'Select * from tblDeelnemers'; // to show table on dgGrid like originally
frmData.qryVGKompetisieDB.Active := true;
end; // then assigning textfile and copying sDeelnemers(string) into textfile
感谢@ No'am Newman,现在的代码如下:
procedure TfrmData.Button1Click(Sender: TObject);
var
f: tstrings;
q: TADOQuery;
begin
redInfo.Visible := false;
dbgInfo.Visible := true;
qryVGKompetisieDB.Active := false;
qryVGKompetisieDB.SQL.Text := 'select id, naam, van, Kontaknommer from tblDeelnemers';
qryVGKompetisieDB.ExecSQL;
qryVGKompetisieDB.Active := true;
f:= tstringlist.create;
with q do
begin
open; //Error occurs here
while not eof do
begin
f.add (fieldbyname ('id').asstring + ',' +
fieldbyname ('naam').asstring + ',' +
fieldbyname ('Van').asstring + ',' +
fieldbyname ('Kontaknommer').asstring);
next
end;
close
end;
f.savetofile ('Deelnemers.txt');
f.free
end;
但是现在我在打开TADOQuery时遇到以下错误(如代码中所示):
项目PAT_p.exe引发异常类EAccessViolation,并在模块'PAT_p.exe'中显示消息'访问冲突地址004A990C'。读取地址8BD88CCB'。流程停止了。使用步骤或运行继续。
答案 0 :(得分:1)
您要找的是ClientDataSet
,可以SaveToFile
和LoadFromFile
。您需要与您可能已经拥有的内容协调使用它 - 这意味着您需要将数据填充到此数据集中,然后从那里保存它。
请注意,这需要使用Midas.dll
。我知道Delphi的后续版本可以选择是否需要它,但不确定这是否是Delphi 7中的一个选项。
答案 1 :(得分:1)
您可以迭代返回的集合并将每一行写入文本文件。您的查询似乎是
select id, naam, van, Kontaknommer
from tblDeelnemers
以下是一些基本代码,用于从表中的所有行中提取值并将其写入文本文件(实际上,csv文件 - 您可以选择分隔符)。
var
f: tstrings;
q: tquery; // whichever type you use
begin
f:= tstringlist.create;
with q do
begin
open;
while not eof do
begin
f.add (fieldbyname ('id').asstring + ',' +
fieldbyname ('naam').asstring + ',' +
fieldbyname ('Van').asstring + ',' +
fieldbyname ('Kontaknommer').asstring);
next
end;
close
end;
f.savetofile ('Deelnemers.txt');
f.free
end;
使用永久字段(即qID.asstring等)而不是一直使用'fieldbyname'会更快。此外,您应该在创建stringlist时进行一些错误检查。