FireBirdでクライアントからサーバーのDBに接続するには?

解決


まじっかぁ  URL  2008-02-29 02:50:35  No: 29945

お世話になっております。
いつも拝見させていただいております。

早速ですが、
客先にWinXPのPCを2台納入いたしました。
1台をサーバーに見立て、もう一台をクライアントとしています。
サーバーを立ち上げて、クライアント側でDelphi5+BDEで作成したアプリケーションを
起動すると接続エラーが発生いたします。
エラーを終了させて、サーバーのほうで同じアプリを起動して、
クライアントの方で再度アプリケーションを起動すると正常に起動します。
別の開発用のPCでは特に問題は無かったのですが、
客先で今までに無いような変な不具合にあってしまいましたのでビックリしています。
何かこの件に関しましてエラーを回避出来る情報がございましたら教えていただけないでしょうか?

追記:
現状ではエラーを回避するため、必ずサーバーに見立てたPCのアプリを起動するように設定しております。

OS:WinXP
Delphi:Delphi5  エンタープライズ
DBへの接続方法:BDE
DB:FireBird  1.5


pekesuke  2008-02-29 03:12:23  No: 29946

まじっかさんこんにちは。

サーバーにしているPCのFirebirdの起動がServiceでなくApplicationになっていませんか。
コントロールパネルのFirebird Server Managerを起動して「Run」がas Applicationにチェックが入っていたらas Serviceに変更してみてください。


まじっかぁ  2008-02-29 03:17:24  No: 29947

pekesuke  様

回答ありがとうございます。
現在、サーバーのPCはサービスで起動しております。
最初にインストールしたときに動作しなかったので、サービスで起動したり、
アプリケーションで起動したりしておりましたが、
最終的には質問したような状況で動作した?ので、
サービスで運用しております。
FireBirdのバグとかではないですよね?

ちなみに、同様のようなアプリを他社様で納品していて、
同じWinXPでも正常に動いているのですが…。
その他、Win2000とかでも動いていたので、
正直どこに不具合があるのか解らない状況です。


pekesuke  2008-02-29 04:21:55  No: 29948

まじっかぁさんこんばんわ。

あと考えられるのはクライアントからサーバーが見えないか、
見つけるのに時間が掛かることが考えられます。
クライアントで起動できない状態でコマンドプロンプトで
pingをサーバー名で通してみてください。pingが通らない、また
は時間が掛かるときはクライアントのHOSTSにサーバー名とIP
アドレスを登録してみてください。


DEKO  2008-02-29 10:14:11  No: 29949

ファイアーウォールが3050ポートを塞いでいるとか?


HOta  2008-02-29 16:14:35  No: 29950

WindowsXPのファイアーウォールが悪さをすることもあります。


まじっかぁ  2008-02-29 18:23:34  No: 29951

回答ありがとうございます。

pukesuke様

クライアントからかもサーバーからも双方のPCで相手のPCが見えることは確認しております。
接続時にサーバー及びクライアントのIPアドレスを固定にして、
サーバーのIPアドレスで接続するようにしています。
例)
\\192.168.XX.1\C:\Progra~1\App\App.gdb

Pingに関しましても現在では普通に通るようになっております。
最初はファイル共有を有効にしていなかったため、Pingが通りませんでしたが、
ファイル共有を有効にして、Pingがとおるようになりました。

DEKO様
ファイアーウォールで3050ポートを開いたときと、
その開いた設定を削除した状態でも質問したときの状態と同じです。

HOta様
最初に疑ったのがファイヤーウォールだったのですが、
ファイアーウォールを無効にした場合及び有効にした場合でも現象は同じでした。


??  2008-02-29 18:51:27  No: 29952

クライアントPCでもFirebirdを起動していない?


pekesuke  2008-02-29 20:35:10  No: 29953

まじっかぁさんこんにちわ。

共有ですか・・・
FirebirdはTCP接続ですから、共有を張る必要はありません。
接続のデータベース指定は「サーバー名:データベースファイル名」
ですから、サーバー名=Server1、データベース名=D:\DB\DataBase.fdb
としたらServer1:D:\DB\DataBase.fdbのはずです。
それから、クライアントの
C:\Windows\System32\Drivers\etc\Hosts
をメモ帳で開いてLocalHostの下にサーバー名とIPアドレスを追加して
みてください。


DEKO  2008-02-29 22:49:49  No: 29954

別件ですが、
> 例)
> \\192.168.XX.1\C:\Progra~1\App\App.gdb
XPでFirebird/InterbaseのDBの拡張子に"GDB"を使うと接続に時間が掛かります。
pekesukeさんの例のように、"FDB"或いは"IDB"を用いて下さい。

ちなみに、接続エラーには詳細なメッセージは出ていませんか?
エラー内容を貼って頂けると、何らかの原因が見えてくるかも知れません。


DEKO  2008-02-29 22:59:12  No: 29955

>FDB/IDB
"Firebird Wiki"に詳細が記載されています。

[色々な拡張子が使われているのはなぜ?(Firebird Wiki)] 
http://firebird.skr.jp/wiki/FAQ#xb38abd9


まじっかぁ  2008-03-03 18:59:02  No: 29956

??様
クライアントPCでもFireBird起動しております。
それが何か悪さをしているのでしょうか?
一度起動せずにチェックをしてみます。

pukesuke様
共有は張らなくてもOKなのですか…。
知らなかったです。
外してみて接続してみます。

DEKO様
拡張子の件了解しました。
GDBだと遅くなる場合があるのですね。

追記:
環境が客先なので、返信遅れると思います。
今日か明日には再度訪問予定なのでその時に不具合の原因を追究してみます。


まじっかぁ  2008-03-04 23:29:00  No: 29957

IPアドレスの指定方法を変更することで解決しました。

192.168.XX.1:C:\Progra~1\App\App.gdb

と指定することでエラーを回避できました。

又、サーバー側でもクライアントと同じ指定をすればOKになりました。

※注意
サーバー側で
C:\Progra~1\App\App.gdb
と指定するとエラーが発生するのでサーバー自身のIPアドレスを指定するとOKです。

回答をいただいた皆様色々とご協力ありがとうございました。


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

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






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