データベース(interbase)を更新しようと
DataModule1.tblMASTER.Active := True;
DataModule1.tblMASTER.Edit;
とすると「更新用問い合わせが用意されていないため更新できません」
と例外エラーになります。
データベースコンポーネントは、
「TIBDatabase」「TIBTransaction」「TIBDataset」「TDataSource」を
データモジュールに貼り付けています。
データベースコンポーネントのプロパティはどうなっていますか?
できればソースも提示してください。
IBDatabaseのプロパティは、特にさわっておらずデフォルト通りです。
ソースは下記の通りです。
wSQL := 'Select * from tblREGI ' + ' Where REGI_ID = ''' + gStrId + '''';
DataModule1.tblREGI.Active := false;
DataModule1.tblREGI.SelectSQL.Text := wSQL;
DataModule1.tblREGI.Active := True;
DataModule1.tblREGI.Edit;
DataModule1.tblREGIREGI_OPEN.AsString := '1';
DataModule1.tblREGIREGI_SETTLE.AsString := '0';
DataModule1.tblREGIREGI_CHANGE.AsInteger := StrToInt(StrDeFormat(PRP0020D.TURI.Text));
DataModule1.tblREGI.ApplyUpdates;
EDITとしたところでエラーになります。
ソースの通り、データベースの照会はSQLでできるのですが、
更新モードにできないようです。
「TIBDataset」のかわりに「TIBQuery」に替えて実行したのですが
結果は同じでした。
ご指摘の通り、「IBDatabase」や「IBTransaction」のプロパティを
チェックしましたが、特にReadonlyのような設定にはなっていない
ようです。
ちなみにデータモジュールは自動作成にしていますが、プロジェクトの記述で
メインフォームのApplication.CreateFormの前にCreateするように変更して
います。
コンポーネントを「IBTable」に変更して下記のコーディングに変更して
実行すると更新できました。
DataModule1.tblREGI.Active := true;
DataModule1.tblREGI.Filtered := false;
wSQL := 'REGI_ID = ''' + gStrId + '''';
DataModule1.tblREGI.Filter := wSQL;
DataModule1.tblREGI.FindFirst;
DataModule1.tblREGI.Edit;
DataModule1.tblREGIREGI_OPEN.AsString := '1';
DataModule1.tblREGIREGI_SETTLE.AsString := '0';
DataModule1.tblREGIREGI_CHANGE.AsInteger := StrToInt(StrDeFormat(PRP0020D.TURI.Text));
DataModule1.tblREGI.ApplyUpdates;
もともとデータモジュールを使用せずにユニットのフォームに「IBDataset」
を置いていた時には更新できていたのですが、データモジュールを介した
ようにしたら、更新モードにできなくなりました。
なぜ???
TIBDatasetのModifySQLが無いとEditはできません。
ちなみに、追加の場合はInsertSQL、削除の場合はDeleteSQL
が必要です。
ほんとにフォームにIBDatasetの時はOKだったのですか?
HOtaさま。
ご指摘の通りでした。
全くトンチンカンな質問で申し訳ありませんです。
大変助かりました。
ありがとうございます。
ツイート | ![]() |