こんにちは、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です。
試していませんが、FieldDefsプロパティで項目定義されていると推測すると、
該当項目のRequiredプロパティを True にすればいいんじゃないでしょうか?
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;を書いて終わらせても、テーブルは出来ないです。
プログラムの書き方が悪いと思いますが、どなたかご指摘お願いします。
トランザクションをコミットせずにテーブルオープンしようとしているからです。
IBTable1.AddIndex('test','コード',[ixPrimary,ixUnique]);
IBTable1.Transaction.Commit;
として下さい。
Basserさん有難うございます。
まだSQLデータベースに理解が浅く、不勉強なためとても助かりました。これからデータベースの移行がうまくいく様に、勉強しながら進めたいと思います。
有難うございました。
ツイート | ![]() |