動的に1次インデックスを作成するには?


サンプー  2006-02-24 10:31:25  No: 20200

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;


HOta  2006-02-24 16:55:17  No: 20201

IndexNameを外してInsertしていますが、これをそのままにするとどうでしょうか?ComboBoxに再表示するのは、再度読み直さないとだめです。


サンプー  2006-02-25 00:34:49  No: 20202

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 クラスの例外を生成しました。'インデックスは書き込み禁止です.'


サンプー  2006-02-25 01:41:57  No: 20203

どうも、postのところで、エラーが発生しているようです


HOta  2006-02-25 17:48:53  No: 20204

レコードを追加した後に、キー項目に値を設定していますか?
キー項目はNot Nullになっていると思います。

データーベースのプログラムをするのに、TTableはTQueryなどに変えましょう。
特に、RDBMSを使う場合は。


サンプ  2006-02-25 18:10:06  No: 20205

HOtaさん、いつもご丁寧なご指導ありがとうございます。早速、TTableをTQueryに変えて変更してみます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加