フィールドデータを保存しておきたい


コンダ  2007-11-29 00:14:48  No: 28718

こんにちは。
TQueryなど使って、Select文を発行してデータを取得したあと、TQueryを使いまわしております。
最初に取得したデータ(フィールド名・フィールドデータ)を、別に保存しておきたいのですが、簡単な方法が判りません。
(フォームには新たに貼り付けたくない)
よろしくお願いいたします。


KHE00221  2007-11-29 01:01:24  No: 28719

TQuery ではなく TTable での例ですが

    //最初のDB
    Table1.DatabaseName := ExtractFilePath(ParamStr(0));
    Table1.TableName    := 'Music1.db';
    Table1.Active := True;

    //FieldDefsを保存
    FieldDefsCopy := TFieldDefs.Create(Table1);
    FieldDefsCopy.Assign(Table1.FieldDefs);

    Table1.Active := False;

    //次のDB
    Table1.DatabaseName := ExtractFilePath(ParamStr(0));
    Table1.TableName    := 'Music2.db';
    Table1.Active := True;

のように取得後 Create した FieldDefs に Assign して保存してはどうでしょうか?


コンダ  2007-11-29 03:14:13  No: 28720

KHE00221さん、ありがとうございます。
TFieldDefsを使った事がないため、データの引き出し方が
見つからなかったんですが、教えていただけますでしょうか?
よろしくお願いいたします。


KHE00221  2007-11-29 03:31:40  No: 28721

FieldDefs の数は FieldDefs.Count で求められます
 
  Table1.FieldDefs.Add(Name,ftString,20,True);

  //動的に設定する方法の内容を取得する場合
  Table1.FieldDefs.Items[0].Name;
  Table1.FieldDefs.Items[0].DataType;
  Table1.FieldDefs.Items[0].Size;
  Table1.FieldDefs.Items[0].Required;
  
  //またこの4個のほかオブジェクトインスペクタで設定できる内容を取得する場合
  Table1.FieldDefs.Items[0].Attributes;
  Table1.FieldDefs.Items[0].Precision;


HOta  2007-11-29 07:27:24  No: 28722

TDataSetを使えばプログラムの動作中なら、保持できます。


コンダ  2007-11-29 21:39:13  No: 28723

KHE00221さん、ありがとうございます。
食い違いの原因がやっとわかりました。
Selectで取得したデータとフィールド名が取得したいということでした。
すみません。
フィールド名はうまく取得できました。

HOtaさん、ありがとうございます。
TDataSetにそのままTQueryを入れてしまうと、TQueryを使いまわした際に、
TDataSetもかわってしまいます。
うまくデータを受け渡せるでしょうか?


Ru  2007-11-29 21:59:48  No: 28724

ClientDataSetに読み込んで保持させてしまうとかはどうですか?
やりたい動作でなければごめんなさい。
保持したい数だけClientDataSetは必要です。
設計時に用意しておくか,実行時にTClientDataSet.Createをしてください。

DataSetProvider.DataSet := Query1;
ClientDataSet1.SetProvider(DataSetProvider1);
ClientDataSet1.Open;

Query1.Close;
Query1.SQL.Text := 'SELECT ・・・';


KHE00221  2007-12-04 07:33:18  No: 28725

ウソを書いていました

FieldDef ではなく FieldList でした

Table での例ですが

フィールド名、長さ、データの取得は

Talbe1.Open;

for I:=0 to Table1.FieldList.Count -1 do
begin
  S1 := Table1.FieldList.Strings[I];          //フィールド名
  J1 := Table1.FieldList.Fields[I].Size;      //フィールドの長さ
  S2 := Table1.FieldList.Fields[I].asString;  //テキストデータ
end;

Table1.Close;

で可能です

Query にも FieldList はあるので多分可能でしょう


コンダ  2007-12-05 01:36:49  No: 28726

Ruさん、ありがとうございます。
ClientDataSetがみつかりませんでした。
Delphi4を使ってますが、バージョンの問題かも知れないですね。

KHE00221さん、ありがとうございます。
TFieldListに保存してみましたが、Query1.Close;で
データが失われてしまいました。
なかなか難しいですね・・・

とりあえず今回は配列を用意して、解決することにしました。
スマートに解決できたらいいなと思ったんですが残念。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加