2012-01-05 3 views
3

"number_field"フィールドのレコード値が一意であるかどうかを確認したいので、number_fieldに同じ値のレコードを配置しています。もちろんレコードフィールドが一意であるかどうかを確認する(DBTables.TBDEDataSet.Lookupメソッド)

id := SomeTable.Lookup('DOCUMENT_NUMBER', CurrentDocNumber, 'ID'); 

それは私の現在のレコードIDを与えるいくつかのケースでは:私は、レコードを編集していますので、私は、ルックアップメソッドを使用します。編集記録をスキップするにはどうしたらいいですか?

編集:私は、データベースに同じ番号で文書を保存無効にしたくない - 私はちょうど彼が書いた数は、システムにすでにあることをユーザーに通知し、彼は

をどうするかを決めるようにしたいです

EDIT2:私はロードされたデータでのみ動作していない - 何のDB

答えて

4

あなたはのTQueryを使用して、DB内のレコードを持っているかどうかを確認できます。

select count(*) from my_table where DOCUMENT_NUMBER=CurrentDocNumber

EDIT: 同じことがTDataSetにして行うことができます。あなたは、どちらかの可能性select countまたはselect *は、テストする場合RecordCount > 0

EDIT2: はただ公平であるために:これがあればケースI operate only in loaded data - no DBは(あなたが私の答えを受け入れた後、この更新した)その後、私のソリューションは文句を言わないので、動作することを ノートレコードはライブDBにまだ転記されていません。 は、1つ以上のクライアントが接続されてDBに書き込まれている場合にこのクエリーを使用する必要があります。

+0

確かに 'どこのdoc_nb = current_doc_nrとid <> cur_id'ですが、メモリデータセット – JustMe

+0

を使用して、メモリデータセットを使用します。 – kobik

+0

でも同じですが、現在編集しているデータセットのレコードポインタを移動します。 – JustMe

1

をそれがレコードを掲示禁止しますこれは、例外は投稿時に自動的に引き上げるされ、データベースレベルでのようにユニークなDOCUMENT_NUMBERフィールドを設定することをお勧めします。例外をキャッチして、「ドキュメント番号は既に存在します」などの独自のエラーで再表示することもできます。

これができない場合は、別のテーブルコンポーネントを作成して、セカンダリ・テーブルにレコードを配置し、存在する場合は例外を発生させます。

+0

私は同じ番号の文書を保存しないようにしたくないということです。私は彼が書いた番号が既にシステムに書かれていることを彼に伝えたいと思っています。 – JustMe

+0

その後、最高: –

+0

削除/フィルタリングされたレコードIDを持つセカンダリテーブル?しかし、テーブルは大きくなる可能性があります – JustMe