DL6Pro,BDE,XPProです。Paradoxでテーブルを作成しています。
DBEを使って、2ジインデックスNameを作成しています。
ここで、フォームに、ComboBox、Editをおき、ComboBoxにはdropdownイベント時にテーブルのName項目の項目が入りようにしてあります。
テーブルの項目にない値が、editに入ったら、新しくテーブル(DM009.TbCarCorp)にこの値を追加したいと思い、以下のコードを書きました。1回目は通るのですが、2回目以降はインデックスが古くなっていますとエラーが発生します。
やりたいことは、テーブルになかった項目を追加し、新たにComboBoxにその項目も表示したいと考えています。
動的にインデックスは作成しないといけないのでしょうか?
どなたか、ご教示下さい。
procedure TFormEnt.Button1Click(Sender: TObject);
Var S : String;
begin
S := Edit1.Text;
DM009.TbCarCorp.Open;
begin
if not DM009.TbCarCorp.FindKey([S]) then
DM009.TbCarCorp.IndexName :='';
DM009.TbCarCorp.Insert;
DM009.TbCarCorp.Edit;
DM009.TbCarCorp.FieldByName('Name').Text := S;
DM009.TbCarCorp.Post;
ShowMessage(S + 'を新たに登録しました');
end;
DM009.TbCarCorp.Close;
end;
IndexNameを外してInsertしていますが、これをそのままにするとどうでしょうか?ComboBoxに再表示するのは、再度読み直さないとだめです。
begin
S := Edit1.Text;
DM009.TbCarCorp.Open;
begin
if not DM009.TbCarCorp.FindKey([S]) then
begin
DM009.TbCarCorp.Insert;
DM009.TbCarCorp.FieldByName('Name').AsString := S;
DM009.TbCarCorp.Post;
ShowMessage(S + 'を新たに登録しました');
end
else
ShowMessage(S + 'は既に存在します');
end;
DM009.TbCarCorp.Close;
end;
と変更すると、下記のエラーメッセージが出てきます。
プロジェクト Onine09.exe が EDBEngineError クラスの例外を生成しました。'インデックスは書き込み禁止です.'
どうも、postのところで、エラーが発生しているようです
レコードを追加した後に、キー項目に値を設定していますか?
キー項目はNot Nullになっていると思います。
データーベースのプログラムをするのに、TTableはTQueryなどに変えましょう。
特に、RDBMSを使う場合は。
HOtaさん、いつもご丁寧なご指導ありがとうございます。早速、TTableをTQueryに変えて変更してみます。
ツイート | ![]() |