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

解決


いも鉄  2006-10-31 15:51:18  No: 23685  IP: 192.*.*.*

こんにちは、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-10-31 17:00:14  No: 23686  IP: 192.*.*.*

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

編集 削除
いも鉄  2006-10-31 19:35:09  No: 23687  IP: 192.*.*.*

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 10:29:37  No: 23688  IP: 192.*.*.*

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

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

として下さい。

編集 削除
いも鉄  2006-11-01 11:26:39  No: 23689  IP: 192.*.*.*

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

編集 削除