DBGridで『作成』『編集』『削除』を
させようと思っているのですが、
書籍関係を読んだら、設定はdefaultで良いと
書いてあるのですが、DataModuleを使わずに
同一フォーム上に、TableとDataSauceを配置すれば
問題ありませんが、DataModuleを使用すると
作成も編集も削除も、Dataを表示させる事も出来ません。
一応、コンパイル前の状態では、
Dataが表示されているんですが・・・。
初歩的・基本的な部分で申し訳ないです。
いろいろ、サイトを歩いて解決策を探してみましたが
内容が、ショボすぎるのか、どこにも解決策がありませんでした。
申し訳御座いませんが、ご指摘・ご教授ください。
お願いします。
「設定」と言われているところがどこかわかりませんので推測です。
DBGridが貼ってあるユニットには、DataModuleのユニットをusesしていますか。
uses節に追加しないと、DBGridがあるユニットから参照できません。
ユニットは、してあります。
設定は、PropertyのOptionです。
書籍関係だと、触る部分はここしかないという感じです。
このPropertyの設定のどこかを、Trueにしなければならない。
とか、ありますでしょうか?
DBGridのOptionsですよね。
Optionsはデータ操作には関係ありません。このプロパティはDBGridの表示・入力に関係します。
DBGridのDataSourceには、DataModuleのDataSourceオブジェクトが入っていますか?
オブジェクトインスペクタで表示されていない場合は、interfaceのusesにDataModule名を追加してください。
それでもデータが表示されない場合は、TableオブジェクトのActiveプロパティをTrueにしてください。
これで表示されるはずです。
コンパイル前の、DBGridには項目名も表示されていて
データの内容も表示されている状態です。
ところが、
コンパイルすると、項目名は表示されているんですが
行は、書込みが出来ない状態で、なおかつ、
コンパイル前には、表示されていたデータも
表示されていない状態です。
コンパイル前は、データ内容まできちんと
認識しています。
>interfaceのusesにDataModule名を追加
>TableオブジェクトのActiveプロパティをTrue
は、確認しましたが大丈夫です。
ただ、interfaceではなく、implementationのusersに
DataModule名がある状態です。
一応、interfaceに書いてみましたが、結果は同じでした。
ユニットを使う場合は、
『ファイル』⇒『ユニットを使う』
で、行っています。
ご迷惑をお掛けしてすいません。
宜しく、ご指導お願いします。
「ユニットを使う」だと、implementationのusesに入りますね。
これだと、デザイン時のほうに反映されないので、interfaceに入れる必要があります。
DataSource, Active, Optionsを、FormCreateやFormSHow時に変更したりしていませんか?
こちらでは、Delphi5Pro付属のデモから、fishfactをコピーし、これのDataSource,TableをDataModuleに移動し確認しています。
何らかの変更を行っているのであれば、そこが問題点です。
新規に(何も処理が書かれていない状態で)作成しても編集できませんか?
どこか、設定をいじっておかしくなっているのか?と
思って、新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が表示されず、
作成・編集・削除も出来ず・・・。
です。
さっきの書込みをしている間に、
返事を頂いてたみたいで。
なにやら、トンチンカンな発言になってしまって
申し訳御座いません。
上記のSauceを確認すると、
InterfaceのusersにDataModule名が入ってます。
が、結果は何も出来ません。
Dataの内容も反映されていません。
何度もお返事頂いて申し訳御座いません。
宜しくお願いします。
同じ方法で、
Table1のDataBaseNameを、'DBDEMOS'に設定。
TableNameを、'biolife.db'に設定。
で編集できます。
あとは環境でしょうかね。
これ以上はわかりませんでした。
少なくとも、その方法で、こちらの環境では動いています。
新規フォームはこういう状態ですよね。
# よけいな空行は省いています。
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という名前をつけました)が入ります。
これでもオブジェクトインスペクタで選択できました。
# 混乱させてすみません
すいませんでした!
解決しました!
えっと、灯台下暗し・・・。と言いましょうか・・・。
本当に、お騒がせして申し訳御座いませんでした。
『Project』⇒『Option』
で、Foam欄で自動作成の対象から
DataModuleを外していました・・・。
うぅ・・・。
本当に、本当に、申し訳御座いませんでした。
本当に、お騒がせして申し訳御座いませんでした。
即レスありがとう御座いました。
ほんとに、なんて言えば良いのか・・・。
ほんとうに、申し訳ありませんでした。
ツイート | ![]() |