開発用PCを移行して、TIBSecurityServiceでFBのユーザー追加コードを走らせたところ、
unexpected item in service parameter block, expected isc_spb_sec_username
というメッセージが出て、追加できない状態になりました。
以前は、1.5を使用して今回2.0を使ったのが悪かったのかと思い、1.5に戻したのですが、メッセージは変わりませんでした。
fbembed.dllのファイル名をgds32.dllに変更してアプリフォルダに入れたし、何かやり忘れがあるんでしょうか?
Firebirdは、以前も今回もローカル接続です。
Delphi7ent
間違った
×fbembed.dll → ○fbclient.dll
でした。
古いPCのDelphiでコンパイルして、新しいPCのFBサーバーにユーザー追加を試してみたところ、エラーが出ずに追加されていました。
なので、新しいPCのDelphiに問題があるようです。
7.1updateも試しましたがだめでした。
IBX のバージョンは Delphi 7 に付属の 6 ですか?
それとも Delphi 2007 IBX (11.11) 相当の 7.11 ですか?
[IBX 7.11]
http://cc.embarcadero.com/Item/24267
"IBConsole 日本語版+α ANSI Edition" でエラーは出ますか?
http://ht-deko.minim.ne.jp/junkbox.html#IBCONSOLE
# Delphi 2007 でコンパイルされていますので IBX は 11.11 です。
IBConsole をアプリフォルダで実行して
エラーになるかならないかで原因を切り分けられると思います。
> 新しいPCのFBサーバーにユーザー追加を試してみたところ
古い PC は XP で、新しい PC は Windows 7 とかですか?
...でしたら、ループバック接続を試してみてください。
[Vistaでの動作 - IBConsoleについての考察]
http://ht-deko.minim.ne.jp/tech029.html#Vista
新旧両方ともXPです。
IBConsoleは加藤大受さんの書籍「FBオープンソースデータベースの導入と運用の実際」についてたのを使っています。
IBConsoleからのユーザーの追加はできます。
IBXはDelphi7の分で11相当のバージョンは入れてないはずです。
最近変わったことをしたのは、FBのODBCドライバを入れてみたことぐらいなんですが。
>IBConsoleからのユーザーの追加はできます。
そうなるとアプリケーションから見えるパスに複数の
GDS32.DLL が存在するというセンは無さそうですね。
「動かない」と仰っている、
"現象を再現できる最低限のコード" を晒して頂けると話は早いと思うのですが。
uses
..., IBServices;
var
IBSecurityService: TIBSecurityService;
begin
IBSecurityService := TIBSecurityService.Create(nil);
try
with IBSecurityService do
begin
ServerName := '127.0.0.1'; // or 'localhost'
Protocol := TCP;
LoginPrompt := False;
with Params do
begin
Clear;
Values['user_name'] := 'SYSDBA';
Values['password' ] := 'masterke';
end;
Active := True;
UserName := 'TESTUSER';
Password := 'TESTUSER';
Firstname := '';
MiddleName := '';
LastName := '';
AddUser;
Active := False;
end;
finally
IBSecurityService.Free;
end;
end;
このコードでユーザが追加できないのであれば、環境を疑ってみて下さい。
(アプリの 3050 ポート通信がファイアーウォール等でブロックされていないか?等)
上記と同等のソースでコンポーネントのプロパティ設定を設定し、ActiveプロパティがTrueでエラーにならないことを確認して、
IBSecurityService.AddUser;
だけコーディングしています。
もちろん、UserNameプロパティとパスワードもユニークなのを入力しています。
ファイアウォールで3050を例外設定しましたが、同じでした。
Delphi再インストールしましたが、だめでした。
それと、古いPCでシンプルなやつをコンパイルして、新しいPCで動かしたらきちんとユーザーが追加できました。
var
IBSS:TIBSecurityService;
procedure TForm1.Button1Click(Sender:TObject);
begin
IBSS.ServerName := 'localhost';
IBSS.UserName := Edit1.Text;
IBSS.Password := Edit2.Text;
IBSS.Active := True;
IBSS.AddUser;
end;
>それと、古いPCでシンプルなやつをコンパイルして、新しいPCで動かしたらきちんとユーザーが追加できました。
このソースを新しいPCに再インストールしたDelphiでコンパイルしたら、エラーがでますか?
エラーがでなくなりました。
それと、同じソースを新PCで新規プロジェクトを起こして、コンパイルしたところ、これも通りました。
再インストール前のテストプロジェクトだと、インストール後でコンパイルしてもエラーが出ているということは…。
DelphiのIBAdminコンポーネントが壊れていたということでしょうか…。
DEKOさん、igyさんありがとうございました。
ツイート | ![]() |