DataModuleの使い方

解決


マキ  2002-11-15 21:00:32  No: 2142

Delphi初心者のマキと申します。

環境
Delphi6.0 Professional
データベース Pradox
にて開発しています。

本等を使って勉強していて、テーブルはDataModulに作ると書いてあったので、
そのとおり作っています。

そこで質問です。
dataModulにTTableとTDataBaseを作っています。
DataModuleCreateでテーブルをオープンしています。
テーブルは、IDとNameを作っています。

Form1のコンボボックスに、全Nameを一覧で選択できるようにするには
どうすればいいのですか?

宜しくお願いいたします。


にしの  2002-11-16 01:13:44  No: 2143

DataModuleを使わない場合で、Nameの取得の仕方はわかりますか?
基本的に、TTable、TDataBaseをDataModuleに移動し、これらのコンポーネントを使用するユニットでusesしておけば同じように動くはずです。
その場合、TTable1で指定したものは、DataModule1.TTable1という具合に、DataModuleの名前を指定する必要があります。
usesに入れるのは、メニューから「ユニットを使用する」で入れることができるようです。


マキ  2002-11-16 02:12:47  No: 2144

にしのさんいつもありがとうございます。

>DataModuleを使わない場合で、Nameの取得の仕方はわかりますか?
これは、できました。

とりあえず今は、
implementationのusesにUnit2を追加して、

procedure TForm1.FormCreate(Sender: TObject);
var
    RecCnt: LongInt;
    StrList: string;
begin

    with DataModule2.Table1 do
       begin
         for RecCnt := 0 to RecordCount -1 do
         begin
           StrList := FieldByname('Name').AsString;
                   ComboBox1.Items.Add( StrList );
           next;
          end;
       end;
     ComboBox1.ItemIndex := 0;

end;

こうしてます。

すると、
プロジェクト Project1.exeが EAccessViolation クラスの例外を作成しました。
'モジュール 'Project1.exe'のアドレス0049984Bでアドレス 0000005C  に対応する読み込み違反がおきました。'
プロセスは停止しています。再開するにはステップ実行または実行を選択してください。

というメッセージが出てきます。

これは、コンパイルは通るんですけど、実行すると出ます。
Unit2をinterfaceに入れても出ます。

どうすればいいのでしょうか?

初心者なので、何を言っているか解りますか?

宜しくお願いいたします。


にしの  2002-11-16 02:22:59  No: 2145

プロジェクトのオプションで、DataModuleは自動作成されるようになっていますか?


マキ  2002-11-16 02:27:32  No: 2146

>プロジェクトのオプションで、DataModuleは自動作成されるようになっていますか?

プロジェクトオプションのフォームタブの自動作成の対象(A)には
Form1
DataModule2

になっています。


マキ  2002-11-16 02:46:28  No: 2147

解りました。
FormCreateじゃ無くて
FormShowにしたらできました。

これは、FormCreate時には、まだ、作られてないってことですよね?

もしよかったら、そこいらへんを教えてください。


にしの  2002-11-16 04:18:29  No: 2148

そのへんの動きはあまり詳しくないですが、たぶんそういうことだと思います。
DataModule2
Form1
の順序なら、FormCreateでも問題ないと思います。


aiko  2002-11-18 18:46:18  No: 2149

プロジェクトファイル(.dpr)を見てみればわかりますが、
作成される順番が決められています。
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TDataModule2, DataModule2);
  Application.Run;
新規作成してDataModuleを追加した時の状態です。
先にForm1を作成してからDataModuleを作成します。
なのでCreateの時点ではDataModuleは作成されていません。
順番を入れ替えればCreateイベントからでも出来ますよ。


マキ  2002-11-18 20:32:57  No: 2150

にしのさん・aikoさんありがとうございました。

無事解決しました。\(^o^)/

今後とも宜しくお願いいたしますm(_ _)m


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








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