0

からテキストファイルにtblDeelnemersデータをコピーしようとしていますdbDeelnemersDeelnemers.txt

テーブルには、ID、Naam、van、kontaknommer の 4 つの列が含まれています。フォームに TADOQuery とdbGrid がありますMicrosoft AccessDelphi 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 は、メッセージ「モジュール 'PAT_p.exe' のアドレス 004A990C でのアクセス違反」で例外クラス EAccessViolation を発生させました。アドレス 8BD88CCB' の読み取り。プロセスが停止しました。Step または Run を使用して続行します。

4

2 に答える 2

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;

常に「fieldbyname」を使用するよりも、永続的なフィールド (qID.asstring など) を使用する方が高速です。また、文字列リストの作成時にエラー チェックを行う必要があります。

于 2013-09-09T13:34:48.957 に答える
1

あなたが探しているのは、とClientDataSetの能力を持つです。これは、既に持っているものと連携して使用する必要があります。つまり、データをこのデータセットに入力してから、そこから保存する必要があります。SaveToFileLoadFromFile

これには を使用する必要があることに注意してくださいMidas.dll。それ以降のバージョンの Delphi には、それを必要とするかどうかのオプションがあることは知っていますが、それが Delphi 7 のオプションであったかどうかはわかりません。

于 2013-09-09T04:38:47.910 に答える