firebirdのテーブルを作るには?

解決


いも鉄  2006-11-01 00:51:18  No: 23685

こんにちは、paradoxからfirebirdにデータベースを移行しようと思いプログラムを書き始めたんですが、null許可だからkeyに出来ないとエラーが出てしまいます。
ibtableの項目をnull許可しないにはどうすればいいか、教えてください。
お願いします。
procedure TForm1.Button1Click(Sender: TObject);
begin

IBDatabase1.Params.Clear;
IBDatabase1.Params.Add('USER ''SYSDBA'' PASSWORD ''masterkey'' PAGE_SIZE 4096 DEFAULT CHARACTER SET WIN1252');

IBDatabase1.SQLDialect := 3;
IBDatabase1.CreateDatabase;
IBDatabase1.Open;
IBTransaction1.Active:=true;
IBTable1.CreateTable;
IBTable1.AddIndex('test','コード',[ixPrimary,ixUnique]);
IBTransaction1.Active:=false;
IBDatabase1.Close;

end;
実行するとエラーが返ってきますが、データベースとテーブルの項目はnull許可で出来ています。
ibtableにはstringでコード(10)と個人名(20)を設定してあります。
windows xp delphi6です。


Basser  2006-11-01 02:00:14  No: 23686

試していませんが、FieldDefsプロパティで項目定義されていると推測すると、
該当項目のRequiredプロパティを True にすればいいんじゃないでしょうか?


いも鉄  2006-11-01 04:35:09  No: 23687

Basserさん有難うございます。
FieldDefsでなくibtableのコンポーネントの右クリックで項目の設定、新規作成で定義した項目ですが、Requiredプロパティが有ったので、True にしたらnull不可に出来ました。
ただIBTable1をopenしようと
IBTable1.AddIndex('test','コード',[ixPrimary,ixUnique]);
の次にIBTable1.open;IBTable1.close;と入れたら、ダイナミックSQLエラーでテーブルが無いとエラーが出てしまいました。
でプログラムを終わらせると、テーブルは出来ているので、もうひとつボタンを貼り付けて、IBTable1.open;とIBTable1.close;と書いてボタンを押すと何事も無くオープンクローズできるみたいです。
確かに、エラーが出た時点やIBDatabase1.Close;の後ろにIBTable1.open;とIBTable1.close;を書いて終わらせても、テーブルは出来ないです。
プログラムの書き方が悪いと思いますが、どなたかご指摘お願いします。


Basser  2006-11-01 19:29:37  No: 23688

トランザクションをコミットせずにテーブルオープンしようとしているからです。

  IBTable1.AddIndex('test','コード',[ixPrimary,ixUnique]);
  IBTable1.Transaction.Commit;

として下さい。


いも鉄  2006-11-01 20:26:39  No: 23689

Basserさん有難うございます。
まだSQLデータベースに理解が浅く、不勉強なためとても助かりました。これからデータベースの移行がうまくいく様に、勉強しながら進めたいと思います。
有難うございました。


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

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






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