DBGridとDataModule

解決


Luci  2002-11-07 19:13:14  No: 1978

DBGridで『作成』『編集』『削除』を
させようと思っているのですが、
書籍関係を読んだら、設定はdefaultで良いと
書いてあるのですが、DataModuleを使わずに
同一フォーム上に、TableとDataSauceを配置すれば
問題ありませんが、DataModuleを使用すると
作成も編集も削除も、Dataを表示させる事も出来ません。

一応、コンパイル前の状態では、
Dataが表示されているんですが・・・。

初歩的・基本的な部分で申し訳ないです。
いろいろ、サイトを歩いて解決策を探してみましたが
内容が、ショボすぎるのか、どこにも解決策がありませんでした。

申し訳御座いませんが、ご指摘・ご教授ください。
お願いします。


にしの  2002-11-07 19:16:01  No: 1979

「設定」と言われているところがどこかわかりませんので推測です。

DBGridが貼ってあるユニットには、DataModuleのユニットをusesしていますか。
uses節に追加しないと、DBGridがあるユニットから参照できません。


Luci  2002-11-07 19:21:29  No: 1980

ユニットは、してあります。
設定は、PropertyのOptionです。
書籍関係だと、触る部分はここしかないという感じです。
このPropertyの設定のどこかを、Trueにしなければならない。
とか、ありますでしょうか?


にしの  2002-11-07 19:48:59  No: 1981

DBGridのOptionsですよね。
Optionsはデータ操作には関係ありません。このプロパティはDBGridの表示・入力に関係します。

DBGridのDataSourceには、DataModuleのDataSourceオブジェクトが入っていますか?
オブジェクトインスペクタで表示されていない場合は、interfaceのusesにDataModule名を追加してください。

それでもデータが表示されない場合は、TableオブジェクトのActiveプロパティをTrueにしてください。
これで表示されるはずです。


Luci  2002-11-07 20:10:41  No: 1982

コンパイル前の、DBGridには項目名も表示されていて
データの内容も表示されている状態です。
ところが、
コンパイルすると、項目名は表示されているんですが
行は、書込みが出来ない状態で、なおかつ、
コンパイル前には、表示されていたデータも
表示されていない状態です。

コンパイル前は、データ内容まできちんと
認識しています。

>interfaceのusesにDataModule名を追加
>TableオブジェクトのActiveプロパティをTrue
は、確認しましたが大丈夫です。
ただ、interfaceではなく、implementationのusersに
DataModule名がある状態です。
一応、interfaceに書いてみましたが、結果は同じでした。

ユニットを使う場合は、
『ファイル』⇒『ユニットを使う』
で、行っています。

ご迷惑をお掛けしてすいません。
宜しく、ご指導お願いします。


にしの  2002-11-07 20:36:08  No: 1983

「ユニットを使う」だと、implementationのusesに入りますね。
これだと、デザイン時のほうに反映されないので、interfaceに入れる必要があります。

DataSource, Active, Optionsを、FormCreateやFormSHow時に変更したりしていませんか?
こちらでは、Delphi5Pro付属のデモから、fishfactをコピーし、これのDataSource,TableをDataModuleに移動し確認しています。
何らかの変更を行っているのであれば、そこが問題点です。

新規に(何も処理が書かれていない状態で)作成しても編集できませんか?


Luci  2002-11-07 20:42:02  No: 1984

どこか、設定をいじっておかしくなっているのか?と
思って、新Projectを立ち上げて、
DataModuleに、Table1とDataSauce1を配置。
『DataSauce1』の『DataSet』を『Table1』に設定。

Foam1に、DataModuleを『ユニットを使う』で設定。
DBGridを配置。
『DBGrid』の『DataSauce』を上記DataSauceに設定。

DataModuleに移動して
『Table1』の『DataBaseName』をエイリアスに設定。
『TableName』を、DataBaseに設定。
『Active』を、Trueに設定。

この段階で、Foam1のDBGridには、DataがSetされます。

これを、コンパイル。

項目だけは表示されますが、Dataが表示されず、
作成・編集・削除も出来ず・・・。
です。


Luci  2002-11-07 21:00:01  No: 1985

さっきの書込みをしている間に、
返事を頂いてたみたいで。
なにやら、トンチンカンな発言になってしまって
申し訳御座いません。

上記のSauceを確認すると、
InterfaceのusersにDataModule名が入ってます。
が、結果は何も出来ません。
Dataの内容も反映されていません。

何度もお返事頂いて申し訳御座いません。
宜しくお願いします。


にしの  2002-11-07 21:05:14  No: 1986

同じ方法で、
Table1のDataBaseNameを、'DBDEMOS'に設定。
  TableNameを、'biolife.db'に設定。
で編集できます。

あとは環境でしょうかね。
これ以上はわかりませんでした。
少なくとも、その方法で、こちらの環境では動いています。


にしの  2002-11-07 21:08:36  No: 1987

新規フォームはこういう状態ですよね。
# よけいな空行は省いています。

unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Grids, DBGrids;
type
  TForm1 = class(TForm)
    DBGrid1: TDBGrid;
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;
var
  Form1: TForm1;
implementation
uses DataMod1;
{$R *.DFM}
end.

ユニットを使用するで、implementationに、作成したDataModule(DataMod1という名前をつけました)が入ります。
これでもオブジェクトインスペクタで選択できました。
# 混乱させてすみません


Luci  2002-11-07 21:18:12  No: 1988

すいませんでした!
解決しました!

えっと、灯台下暗し・・・。と言いましょうか・・・。
本当に、お騒がせして申し訳御座いませんでした。
『Project』⇒『Option』
で、Foam欄で自動作成の対象から
DataModuleを外していました・・・。

うぅ・・・。
本当に、本当に、申し訳御座いませんでした。
本当に、お騒がせして申し訳御座いませんでした。

即レスありがとう御座いました。
ほんとに、なんて言えば良いのか・・・。
ほんとうに、申し訳ありませんでした。


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








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