Firebird embeded オープンがキャンセルされる。

解決


ヤマダ  2008-10-28 17:16:13  No: 32381  IP: 192.*.*.*

実現したいこと
  組み込み系のDBを使用し(free lisence)アプリケーションを
  作りたいです。


質問内容
  firebird embededに添付されたとおりに.dllなどを配置し
  testアプリケーションを作成しています。
  
  self.OBDatabase.DatabaseName 
  := ChangeFileExt(Application.name,'.FDB')
  
  self.IBDatabase.params.add('USER "test"');
  self.IBDatabase.params.add('PASSWORD "masterkey"');
  self.IBDatabase.params.add('PAGE_SIZE',4096);
  
  self.IBDatabase.CreateDatabase; //.FDBファイルが作成される。

  その後
  
  self.OBDatabase.DatabaseName 
  := ChangeFileExt(Application.name,'.FDB');
  
  self.IBDatabase.params.values['USER']:='test';
  self.IBDatabase.params.values['PASSWORD']:='masterkey';        
  self.IBDatabase.open; 

  とするとOpenしたときに"ユーザの要求によりキャンセルされました。"
  と出力されています。

  何がダメなのでしょうか?
  良い関連Webペーじなどございましたらご教示ください?

開発環境
  windows 2000
  D7
  Firebird embeded v1.5

以上  宜しくお願い致します

編集 削除
igy  2008-10-28 17:30:27  No: 32382  IP: 192.*.*.*

>  self.IBDatabase.params.values['USER']:='test';
>  self.IBDatabase.params.values['PASSWORD']:='masterkey';

  self.IBDatabase.params.values['user_name']:='test';
  self.IBDatabase.params.values['password']:='masterkey';
にしたら、どうなりますか?

編集 削除
ヤマダ  2008-10-28 17:44:38  No: 32383  IP: 192.*.*.*

igyさん

ご返信ありがとうございます。

変更してやってみましたが

"ユーザの要求によりキャンセルされました"

とダイアログボックスで出力されてしまいました。

編集 削除
igy  2008-10-28 21:35:09  No: 32384  IP: 192.*.*.*

> self.IBDatabase.CreateDatabase; //.FDBファイルが作成される。

で、実際にデータベースのファイルは生成されていますか?

>  self.OBDatabase.DatabaseName 
>  := ChangeFileExt(Application.name,'.FDB')

で、“OBDatabase”の部分は、“IBDatabase”でなくてもよいのですか?
また、“Application.name” の部分は、“Application.ExeName”でなくてもよいのですか?

編集 削除
ヤマダ  2008-10-30 09:59:17  No: 32385  IP: 192.*.*.*

>igyさん
返信送れまして申し訳ないです。

、“OBDatabase”の部分は、“IBDatabase”でなくてもよいのですか?
また、“Application.name” の部分は、“Application.ExeName”

ご指摘のとおり間違っていました。
ただご指摘のとおりにやっても
"ユーザの要求によりキャンセルされました。"とでてしまいました。

FDBは作成されているのですが・・・・

ちなみにdelphi7を使っているのですがFireBirdはInterBase6がないと
動かないのでしょうか?

編集 削除
igy  2008-10-30 21:15:19  No: 32386  IP: 192.*.*.*

>ちなみにdelphi7を使っているのですがFireBirdはInterBase6がないと
>動かないのでしょうか?

Interbase6がなくても動くと思います。
# ただdelphi7付属のIBXは、Firebirdに正式に対応しているわけでは
# ないと思います。

あと、
 fbembed.dll は gds32.dll にリネームしていますか?

あと、

> self.IBDatabase.params.add('PAGE_SIZE',4096);

↑コンパイル時にエラーがでませんか?


>  self.IBDatabase.params.values['USER']:='test';
>  self.IBDatabase.params.values['PASSWORD']:='masterkey';

  self.IBDatabase.params.values['user_name']:='SYSDBA';
  self.IBDatabase.params.values['password']:='masterkey';
にしたら、どうなりますか?

編集 削除
TS  2008-10-30 22:56:33  No: 32387  IP: 192.*.*.*

参考に
http://dn.codegear.com/article/33775
ZeosLibを使ってみませんか。

編集 削除
ヤマダ  2008-10-31 01:27:15  No: 32388  IP: 192.*.*.*

Igyさん,TSさん

  ありがとうございます。

> fbembed.dll は gds32.dll にリネームしていますか?
  
  これはOKです。


> self.IBDatabase.params.add('PAGE_SIZE',4096);

↑コンパイル時にエラーがでませんか?

  失礼しました。
  self.IBDatabase.params.add('PAGE_SIZE 4096');
  が正でした。
  
>  self.IBDatabase.params.values['USER']:='test';
>  self.IBDatabase.params.values['PASSWORD']:='masterkey';
  


  self.IBDatabase.params.values['user_name']:='SYSDBA';
  self.IBDatabase.params.values['password']:='masterkey';
  にしたら、どうなりますか?
  
    同くダメでしたが英語版のdelphiを使用したら以下のようなメッセージ
    がでました。

  EIBClientError 
  Operation cancelled at user's request  

  EIBClientErrorをHelpでみると

  an EIBClientError is raised when a component can't access the       database because it does not have an IBDatabase component
  specified, attempts to edit a read-only dataset, tries to execute 
  an empty query, and so on.

  設定不足なのかもしれません。無知ですね。私。
  もう少しぐぐってみます。:-(

  TSさん

  ご教授ありがとうございます。
  使用してみます!:-)

編集 削除
ヤマダ  2008-10-31 01:57:17  No: 32389  IP: 192.*.*.*

Igyさん解決しました!

TIBDatabaseだけしか設定していなかったのが悪かったみたいです。
TIBTransaction、TIBSQLを設定しましたらうまくいきました!
本当に感謝です。:-)

  object IBDatabase1: TIBDatabase
    DatabaseName = 'C:\test\TEST.GDS'
    LoginPrompt = False
    DefaultTransaction = IBTransaction1
    IdleTimer = 0
    SQLDialect = 3
    TraceFlags = []
    Left = 128
    Top = 88
  end
  object IBTransaction1: TIBTransaction
    Active = False
    DefaultDatabase = IBDatabase1
    AutoStopAction = saNone
    Left = 216
    Top = 64
  end
  object IBSQL1: TIBSQL
    Database = IBDatabase1
    ParamCheck = True
    Transaction = IBTransaction1
    Left = 176
    Top = 152
  end

編集 削除