お世話になります
Delphi2007、FireBied1.5を使用しています。
TIBDatabase
TIBQuery
TDataSetProvider
TClientDataSet
を使用して、画面で入力したSQLでSELECTしたデータをDBGridに
表示するような汎用的なプログラムを作ろうとしています。
DBGridで編集した内容を更新させたいために、TClientDataSetの
ApplyUpdateを使用したいと思っています。
ボタンを押したらApplyUpdateを実行したいと思っているのですが
問い合わせのSQLが更新不可(複数のテーブルの連結など)であった場合は
更新処理を出来ない(ボタンを使用不可)ようにしたいと思っています。
SQLを発行時に、更新不可能な問い合わせかどうか確認する方法はあるのでしょうか?
宜しくお願いいたします。
こんにちは。
単純にやるのなら、
・SQL 文の先頭が "SELECT" で始まる (空白行/コメントを除いて)。
・"JOIN" や "GROUP BY" が含まれない。
を判定して、True なら更新可能な SQL という事になると思います。
# 構文チェックには IBScript 内のクラスが使えると思います。
DEKO様
ありがとうございます。
if (Pos(' GROUP ',UpperCase(sSql)) <> 0 ) or
(Pos(' JOIN ', UpperCase(sSql)) <> 0) then
begin
btnUpdate.enabele := False;
end;
といったやり方で、GROUP化と結合された問い合わせは回避出来るようになりました。
プロシージャを使った問い合わせとかまだ問題はありますが、解決とさせて頂きます。
もし、よろしければIBScriptのクラスを使った例等をご教授頂けないでしょうか?
> もし、よろしければIBScriptのクラスを使った例等をご教授頂けないでしょうか?
自分で使う分には構文チェックを行う事もない (エラーの出ない SQL しか用意しない) ため、
正直マトモに使ったことはないのですが、
IBConsole のソース内部で IBExtract 等が使われていますので、
そちらを参照してみてはいかがでしょうか?
[IBConsole ソースコード]
http://ibconsole.cvs.sourceforge.net/ibconsole/ibconsole/#dirlist
[IBScript examples (D5, D6, BCB5)]
http://cc.embarcadero.com/Item/17110
DEKO様
ありがとうございます。
お返事が遅くなってすいません。
参考にさせて頂きます。
ツイート | ![]() |