2016-08-24 4 views
0

Firebirdの構文/動作には錆びていますので、これは間違った質問かもしれません。Firebirdトリガーはアプリケーションから起動しませんが、DBツールでは動作します

私が遭遇したのは、3つのFirebird(バージョン2.5.4)トリガのうち2つがDelphi 6アプリケーションから起動しないということです。 TIBOQueryにリンクされたDevExグリッドからレコードが追加または削除されると、チェックするとレコードがデータベースで削除されますが、挿入後および削除後のトリガーはテーブルに対して実行されません。作業を行うトリガーは、挿入後または更新後のトリガーであり、別の表とは異なりますが、基本的に同じことです。この表の値が更新された場合は、別の表の列の値を更新します。

SQLマネージャLiteまたはEMS for Firebirdのテーブルからレコードを手動で追加または削除しようとすると、挿入後/削除後のトリガーが正常に動作し、必要に応じて動作します。だから彼らはデータベースツールではなく、アプリケーションで動作します。私はトリガーとテーブルのパーミッションをチェックして、それだけであるかどうかを確認しましたが、まだ運がありません。

トリガがアプリの外ではうまく動作するが、その内部ではうまくいかないことがあります。レコードが追加/削除されるのを見ることができるので、アプリケーションが正しいDBを使用していることがわかりますが、トリガーは発生しません(エラーはありませんが、他のテーブルへの更新は期待されません)。

+0

データベースをチェックインしましたか?おそらく、あなたのアプリのクエリは自動的に自動的にリフレッシュされません。 –

+0

あなたのDelphiアプリケーションはどのFirebirdドライバを使用していますか?また、Firebirdデータベースと同じマシンでInterbaseサーバサービスを実行していますか? – MartynA

答えて

1

ほとんどの奇妙な問題と同様に、これはアプリケーションの仕組みの考え方のプロセスのために見落とされやすい簡単な答えでした。学習の疲れはもちろん、新しいプロジェクトやクレイジー通勤をすることはもちろんです。とにかく;-)。

トリガーは実際にはアプリケーションから機能していましたが、保存されていないデータ認識コントロールは、[保存]ボタンをクリックしたときに値を戻していました。

複数のタブを持つフォームです。表A(トリガによって更新されるテーブル)は、最初のタブに表示され、そのフィールドのデータ認識コントロールが表示されます。表B(表Aのフィールドを更新する2つのトリガーを持つ表)は、データ認識グリッドの2番目のタブに表示されます。グリッド内で行が追加/削除されると、DB内で削除されましたが、テーブルAは決してアプリケーションでリフレッシュされなかったため、保存ボタンをクリックすると、テーブルAの古い値がトリガーの値。

このレッスンが他の人を助けてくれることを願っています。

0

トリガーが期待通りに機能するため、100%確実ではありません。データ認識接続オブジェクトで自動コミットを使用するように設定していますか?それ以外の場合は、トリガーの結果を確認する前に変更をコミット(挿入/更新または削除など)する必要があります。

データ認識コンポーネントにリンクされているオブジェクトの設定を確認します。コミット・リード・コミット・ライト・オート・コミッティングに関するいくつかの設定があります。

私は適切な領域にヒットしたいと思います。

+0

これは素晴らしい提案です。私はどこでそれらを見つけることができたのかを確認しました。これはそうではなかったことが分かります。すぐに回答を掲載します。 – janice2705170

関連する問題