XEからXE3への移行について

解決


yTake  2013-08-12 01:45:11  No: 45006

yTakeです。度々お世話になります。

今回は少し抽象的な問い合わせになっています。

あるプロジェクトをXEからXE3へ環境を移行しました。
すると、それまでXE下では一切エラーなく動作していたものが、XE3下では”例外クラスEOutOfMemory(メッセージ'メモリが足りません')を送出しました。となります。

プロジェクトをフォルダー毎コピーしてXE3で開いて実行しただけです。
基本的に、ソースの変更はありません。

XE3の方がメモリー管理が厳格になったと推察されますが、対処方法が分かりません。
プロジェクトは、Firebirdとの組み合わせのデータベースソフトになります。
32bitMSWindows7でメモリーは4GB搭載していますが、ハードはBootcamp利用です。

エラーの発生のタイミングはDBと接続する時です。
SELECT文の応答をOPENで受けるループで発生している様です。
XE用とXE3用とは当然ながらソースは同じです。
どの様に対処して良いか分かりません。

どなたかご教授頂けると幸いです。

また、上述の他何か提供すべき情報があれば、指示下さい。
調べてみます。

よろしくお願い致します。


yTake  2013-08-12 04:20:36  No: 45007

自己レスです。

当該のソース部分です。
XEで実行するとk=15までカウントして抜けます。つまり、15レコード分の応答があった事になります。
しかしながら、XE3の方では、k=9でEOutOfMemoryが発生します。

vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
    if IBQuery1.IsEmpty = True then
//        ShowMessage( 'Empty' )
    else
    begin
        k :=  0;
        value1 := 0;
        value2 := 0;
        cnt :=  IBQuery1.RecordCount;
        while IBQuery1.Eof = False do
        begin
            value1  :=  value1 + IBQuery1.FieldByName( 'Field_1' ).AsFloat;
            value2  :=  value2 + IBQuery1.FieldByName( 'Field_2' ).AsFloat;
            IBQuery1.Next();
            inc( k );
        end;
    end;
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
XEとXE3とで、IBQueryの使い方に違いがあるのでしょうか?

あるいは、プロジェクトをXEからXE3へ移行する際に、何かプロジェクト側で変更すべき点があるのでしょうか?

よろしくお願い致します。


igy  2013-08-12 06:02:37  No: 45008

XE3は持っていないので、わからないのですが、

XE3の新規プロジェクトで、TIBQueryでSELECT文を実行し、同じような方法でデータをループで取得するプログラムで試しても
同じ現象が起きますか?

あと、(関係ない気もしますが)

>while IBQuery1.Eof = False do

の前に

IBQuery1.First;

を追加しても、結果は同じですか?


yTake  2013-08-12 10:11:54  No: 45009

igyさん、
ありがとうございます。

新規にXE3でプロジェクトを作成して、SELECT分の応答をOPENで受けてループで回して受け取るだけのルーチンを作成してみました。接続データベース自体は全く同じデータベースへ接続しています。

結果、問題なくすべての応答結果を受け取る事ができました。
つまり、プロジェクトをコピーして運用した事が原因の様です。何故それがエラーになるのかは不明ですが、、、
もしプロジェクトファイルの仕様がXEとXE3とで違うとしても、自動で変更されても良さそうに思います。勝手な思い込みでしょうか?

因みに、先に”IBQuery1.First”を追加してみたのですが、こちらはご推察の通り結果は同じ(EOutOfMemory)でした。

始めから作り直すのは避けたいところです。一般的にはこの様な場合にはプロジェクトから作り直すのでしょうか?


DEKO  2013-08-12 11:22:01  No: 45010

思い当たるフシがあるとすれば、TIBDatabase の ServerType プロパティです。
ServerType は XE2 で追加されています。

[IBX で Interbase / Firebird に接続するには?]
http://ht-deko.minim.ne.jp/tech045.html#tech091


igy  2013-08-12 16:32:21  No: 45011

>結果、問題なくすべての応答結果を受け取る事ができました。
>つまり、プロジェクトをコピーして運用した事が原因の様です。

もし、DEKOさんが指摘されたServerType プロパティが関係なかったら、
実際に問題なのは、TIBQueryの部分ではなく、もしかしたら、別の箇所にあるかもしれませんね・・・

その場合、まだ「原因がプロジェクトをコピーして運用した事」 と特定は出来ない気もします。
(私自身の経験上では、プロジェクトを作り直したことはありません。)

>XE3下では”例外クラスEOutOfMemory(メッセージ'メモリが足りません')を送出しました。

とありますが、このとき、空きメモリはどのようになっていますか?
(タスクマネージャーのメモリ関連あたりで確認できるかと思います。)


yTake  2013-08-12 17:38:17  No: 45012

DEKOさん
ありがとうございます。

TIBDatabaseのServerTypeはデフォルトで設定してありました。

正しくはEmbedded版のFirebirdと接続しているのですが、デフォルトで"IBServer"となっていました。しかし、この状態でここではエラーにはなっていません。逆に、"IBEmbedded"を指定した方が、"EIBInterBaseError"で"product INTERBASE is not licensed"となってしまいます。
これはDEKOさんが別で言及されている通りと思います。

ご提示のwebページも参照させていただきます。


yTake  2013-08-12 17:48:05  No: 45013

yTakeです。

新規プロジェクトではメモリーエラーとならなかったので、原因は不明ですが、XE3新規プロジェクトに従来のXEプロジェクトを追加すると言う手順を取ってみました。

最初に表示される”メイン”画面のユニットの差し替え方がよく分からなかったので、そこのみコピペにしました。

結果、メモリーエラーが発生しました。

どうも、デバッグのしかたが悪いのか、結果に整合性が取れていません。
原因の把握が間違っているでしょうか?

よろしくお願いします。

以降、少しアクセスが空きますので、ご了解のほどを、、、


yTake  2013-08-14 07:41:18  No: 45014

igyさん、
ありがとうございます。
返答が前後して申し訳ありません。

XE3の新規プロジェクトにXEソースを追加する形を取ってみましたが、メモリーエラーは発生しました。プロジェクトの問題ではない気もしています。

igyさんの経験を踏まえれば開発環境が新しくなっても一般に新しい環境で下位互換性が担保されていれば、プロジェクトはそのまま更新されると考えて良いと思いました。

ただ、本原因の絞込みに苦慮している状況です。

また、エラー発生時の実メモリサイズについてですが、

    (MB)      合計  :キャッシュ済み:利用可能:空きメモリ
起動時      2229  :  901  :  864  :  12
エラー時    2229  :  899  :  870  :  17
非起動時:  2229  :  935  :  905  :  19

です。ただ、毎回値は違います。
エラー発生直後は、空きメモリは7MBだったりもしますが、そのまま放置すると19MB程度にまで回復します。

なお、メモリー値は当該ソフト単独起動時の値ではなく、XE3下で"実行"させた場合の値です。

よろしくお願いします。


DEKO  2013-08-14 08:08:54  No: 45015

関係ないかもしれませんが...

(データモジュールをお使いであれば) ClassGroup 擬似プロパティに値はセットされていますか?
VCL フォームアプリケーションであれば、"Vcl.Controls.TControl" をセットする必要があります。


igy  2013-08-14 08:26:39  No: 45016

利用可能なメモリは充分ありますね・・・

ということで、他で気になった点は

・ハードはBootcamp利用
・正しくはEmbedded版のFirebirdと接続

ですが、

・一般的なPC(Windows Xp以降)
・Firebird(Embedded版じゃないほう)と接続

で正常に動作するか、確認してみるのもよいかもしれません。
(yTake さんが試す環境があれば、ですが・・・)


igy  2013-08-14 08:37:22  No: 45017

あ、新規プロジェクトでのテストプログラムは、正常に動作したとのことでしたね・・・

>・ハードはBootcamp利用
>・正しくはEmbedded版のFirebirdと接続

は、あまり関係ないかもしれません。


yTake  2013-08-14 08:57:01  No: 45018

DEKOさん、igyさん、

ありがとうございます。

データモジュールは使っていません。直接フォームにコンポーネントを貼り付けています。
VCLフォームアプリケーションにて作成していますが、ご指摘の"Vcl.Controls.TControl"の確認方法が分かりません。見える範囲のプロパティ項目で見つけられていません。

一般的なPC環境での試験は時間を掛ければ行なう事はできます。
Embedded版ではないFirebirdとの接続も、試してみます。

とりあえず、以上です。


DEKO  2013-08-14 10:16:44  No: 45019

> VCLフォームアプリケーションにて作成していますが、
> ご指摘の"Vcl.Controls.TControl"の確認方法が分かりません。
> 見える範囲のプロパティ項目で見つけられていません。

データモジュールはお使いでないという事なので参考までに...なのですが、
XE2 以降の場合、データモジュールには ClassGroup という擬似プロパティがあります。
古いプロジェクトを移行するとここが空になってしまいます。


yTake  2013-08-15 02:11:06  No: 45020

yTakeです

逆に”データモジュール”利用に変更すると改善される見込みはあるでしょうか?データモジュールを利用すべき目安みたいな物はあるのでしょうか?

純製Windows7下で、XE3作成のプログラムを実行しました。XE作成のプログラムが正常に動作する環境です。
結果、GDS32.DLLが見つかりませんエラーになりました。
敬意から、XE3下ではServerType指定が追加され、現在IBServerが設定されている為、Superサーバーを探しているものと思われました。そこで、純正Windows7にFirebird2.5.1(Superサーバー)をインストールし、念の為、mbeded用のGDS32.DLLは別名にしました。
この状態で、XE3作成のプログラムは、メモリー不足のエラーになります。(これまでと同じ)
一方、XE作成のプログラムはSuperサーバーとの見合わせでも正常に動作しています。
XE3で、IBDatabaseのServerTypeプロパティでEmbeddedを選べられれば良いと思うのですが、実行ファイルは生成されますが、実行時に"EIBInterBaseError(product INTERBASE is not licensed)"となります。

DEKOさんらがご指摘されているXE2以降でのInterBaseとのI/Fのライセンスの問題ではないでしょうか?

ただ、IBServerを設定するとライセンスエラーは出ませんが、メモリーエラーとなります。これが解消できればうれしいのですが、、、
(Bootcampは問題無さそうに思います)

多少、表現が分かり難かったかもしれませんが、ご不明な点はお問い合わせ下さい。


DEKO  2013-08-15 03:31:12  No: 45021

>逆に”データモジュール”利用に変更すると改善される見込みはあるでしょうか?
状況を見る限り事態は好転しそうにないです。

> データモジュールを利用すべき目安みたいな物はあるのでしょうか?
フォームが多い場合に非ビジュアルコンポーネントを
各フォームに貼ると管理が面倒な事になります。

> 結果、GDS32.DLLが見つかりませんエラーになりました。
Embedde Server の場合、プロジェクトフォルダに
FBClient.dll をリネームした GDS32.DLL が必要です (32bit)。
64bit アプリケーションの場合には同様にリネームしたibclient64.dll が必要です。
Interbase がインストールされているのであればアンインストールしてみてください。

[Firebird (Interbase フォーク)]
http://ht-deko.minim.ne.jp/delphiforum/?vasthtmlaction=viewtopic&t=861

Firebird の Embedded Server を使う場合、ServerType は "IBServer" である必要があります。
"Embedded" は Interbase ToGo 用です。

Firebird Embedded Server については以下も参照してください。

[Firebird Embedded Server]
http://ht-deko.minim.ne.jp/delphiforum/?vasthtmlaction=viewtopic&t=862.0

ちなみに、XE3 の詳細なバージョンは何でしょう?
17.0.4770.56661 が最新だと思いますが、このバージョンになっていますか?


DEKO  2013-08-15 03:38:41  No: 45022

yTake さんの環境では、

・Firebird が Super Server だろうが Embedded Server だろうが、
  XE3 でコンパイルするとエラーになる。
・XE3 の新規プロジェクトではエラーにならない。

という事ですよね。

ちなみに、IBConsole 日本語版+α の Unicode 版は XE3 でコンパイルされていて、
IBX を利用しているのですが、これでもエラーになりますか?

[IBConsole 日本語版+α]
http://ht-deko.minim.ne.jp/junkbox.html#IBCONSOLE


yTake  2013-08-15 06:08:18  No: 45023

DEKOさん、ありがとうございます。

データモジュールの目安ありがとうございます。
なるほど、フォームが多くなった場合にデータベース関連のモジュールを一箇所にまとめて一元管理的な運用ができると言う様に理解しました。

FirebirdをDBエンジンとして利用する場合は、それがEmbedded版でもServerTypeは"IBServer"とし、InterBaseを利用する場合に、"Embedded"なのですね。少々分かり難いですね。
InterBaseは使っていませんが、確認したらXE3のInterBaseがインストールされていました。アンインストールして試してみましたが、これまでと同様でした。(再起動は未だしていませんが)

XE3:17.0.4625.53395
です。アップデートした方が良いでしょうか?

こちらの環境では、FirebirdのSuper Server, Embedded Serverいずれでも実行時にメモリー不足のエラーになる。その箇所はSELECT文の応答をOPENで受ける所の様です。
但し、コンパイル時点ではエラーになっていません。XE3上でも"実行"してデータベースと接続しデータベース内容を取得する時点で発生しています。
XE3の新規プロジェクトで全て新しく作成した場合には実行時にもエラーになりません。しかしながら、同様に新規プロジェクトでも、モジュールのほぼ全てをXEプロジェクトから追加した場合には、実行時にメモリー不足エラーになります。

最後のご質問の意味がよく分かりませんでした。
IBConsoleというものは使っていないと思います。
XE3に標準のDBコンポーネントしか使っていないつもりです。
質問の意図を正しく認識していない気がします。


igy  2013-08-15 07:36:41  No: 45024

まだ Delphi XE の環境があれば、ですが・・・・

2013/08/12(月) 01:11:54 に yTake  さんが

>新規にXE3でプロジェクトを作成して、SELECT分の応答をOPENで受けてループで回して受け取るだけのルーチンを作成してみました。

とありますが、同様に、Delphi XE で新規に上記と同じコードのプロジェクトを作って、そのプロジェクトをコピーして
Delphi XE3 でコンパイル&実行してエラーが表示するか確認してみるのも、よいかもしれません。

あと、通常、最新のアップデートは当てたほうがよいと思います。


DEKO  2013-08-15 10:07:08  No: 45025

> FirebirdをDBエンジンとして利用する場合は、それがEmbedded版でもServerTypeは"IBServer"とし、
> InterBaseを利用する場合に、"Embedded"なのですね。少々分かり難いですね。

IBX は Firebird をサポートしている訳ではありません。
Firebird Embedded と Interbase To-Go に互換性もありません。
http://ht-deko.minim.ne.jp/tech029.html#IBX

> 最後のご質問の意味がよく分かりませんでした。
> IBConsoleというものは使っていないと思います。
> XE3に標準のDBコンポーネントしか使っていないつもりです。
> 質問の意図を正しく認識していない気がします。

IBConsole は XE3 でコンパイルされていて、IBX を使ったアプリケーションですので、
yTake さんの環境でクエリを実行したりすれば正しく動作しない可能性が高いですよね?

IBConsole が正常動作するかしないかで、多少は原因を絞り込めると思うのです。


yTake  2013-08-15 20:00:50  No: 45026

igyさん、DEKOさん、ありがとうございます。

最新のアップデートを当てる事とさせて頂きます。

IBConsoleの件は、IBConsoleとはSQLサーバーの管理ツールでダウンロードし使ってみてエラーが再現されるかを試すと言う事だったのですね。
XE3コンパイル版をダウンロードし試してみました。結果、エラー
"An InterBase error has occurred while attaching.
Error - cannot attach to password database
InterBase Communication Test Failed!"
となり、ログインも出来ません。
個人的には"FlameRobin"を使っていました。特に問題はありません。ログインしデータを操作可能です。

このエラーは、やはりXE3でコンパイルしてあるプログラムからはIBX経由でFirebirdへは接続できない(IBConsoleの例)。或いは、接続できても、正常に動作しない(私のプログラムの例)。と言う事になる気がします。

仮に、XE2やXE4で試しても同様なのでしょうね。XEが最も互換性チェックが甘かったと言う事でしょうか?


DEKO  2013-08-15 21:30:18  No: 45027

> XE3コンパイル版をダウンロードし試してみました。結果、エラー
> "An InterBase error has occurred while attaching.
> Error - cannot attach to password database
> InterBase Communication Test Failed!"
> となり、ログインも出来ません。

IBConsole を使うには Super Server が必要です。

・開発時: SuperServer
・配布時: Embedded Server

のような使い方になります。

また、接続する際にはサーバの設定を以下のようにしてください。 
・サーバの種類: リモート
・サーバ名: localhost (あるいは 127.0.0.1)
・ネットワークプロトコル: TCP/IP

Super Server をインストールしていてもこのエラーが出る場合には、
GDS32.DLL が Firebired のものではありません。

PC で GDS32.DLL を検索し、ファイルのプロパティを開き、
[詳細] タブで "製品名" を確認してください。
ここは "Firebird SQL Server" になっているハズです。

# 複数の GDS32.DLL が存在する、
# または  Firebird のものではない GDS32.DLL が
# 使われているような印象を受けます。

> XE3でコンパイルしてあるプログラムからはIBX経由でFirebirdへは接続できない(IBConsoleの例)。
私のトコでは XE3 でも XE4 でも問題は発生していません。
(2007 以降、すべてのバージョンでコンパイルしてテストしています)

# 利用者が少ない事もあるかもしれませんが、
# IBConsole で Firebird に接続できないという報告も受けていません


yTake  2013-08-15 21:36:35  No: 45028

yTakeです

igyさんの指摘に倣い、XEでSELECT文の応答をOPENで受けるだけのプロジェクトを作成して、それをXE3へコピーして試すことを実施してみようとしましたが、データベースへのログインが出来なくなりました。
これは先のIBConsoleのエラーと同様で、何か環境が変わってしまったのでしょうか?
但し、FlameRobinでは元々の設定でログイン出来ています。

ここで疑問に思うのが、これまでEmbedded Server版とSuper Server版とを試しましたが、これらの具体的切り替えについてよく分からなくなりました。

データベース本体はFlameRobinと新規プロジェクトとで同じものを参照しています。これは明示的に指定するので間違いありません。
しかしながら、サーバーのタイプの指定が、XEではありません。(XE2以降でプロパティとして追加)、FlameRobinでもサーバータイプ指定の箇所はない様に思います。
ただ、データベースタイプは分かれても、参照先データベースが同じであれば同様にログインできて良いと思います。

何か状況が泥沼化して、どこまでが正しいのか、分からなくなってきています。

ログインパスワードは変えていません。
なぜ、IBConsoleや新規プロジェクトでログインできないのでしょうか?


yTake  2013-08-15 21:44:26  No: 45029

DEKOさん
ありがとうございます。
RESが入れ違いになりました。
IBConsoleでのエラーは接続設定の間違いによるものの様です。
すみません。再度、試験し直します。


DEKO  2013-08-15 23:22:17  No: 45030

> ここで疑問に思うのが、これまでEmbedded Server版とSuper Server版とを試しましたが、これらの具体的切り替えについてよく分からなくなりました。

Super Server と Embedded Server の GDS32.DLL (fbclient.dll) は別物です。

Super Server の DLL:
・Firebird サーバへ接続するためのクライアント DLL。
・サーバの機能を利用できる。
・Firebird サーバが起動していないと利用できない。
  (サーバはローカルにあってもリモートにあってもよい)

Embedded Server の DLL:
・スタンドアロンで動作する DLL。
・Firebird サーバが起動している必要はない。
・サーバの機能は利用できない。
  (バックアップやリストアはできない)
・Firebird サーバには接続できない。
・リモート接続はできない。

このようになります。

繰り返しますが、開発時には Super Server を使い、
配布時に Embedded Server を組み込んで使うのがセオリーかと思います。
(Firebird サーバが持つ管理機能を Embedded Server では使えないため)

具体的にはデバッグビルドフォルダに何も入れず、Super Server 接続にし、
リリースビルドフォルダには、Embedded Server のファイルを配置します。
こうする事でデバッグ時には IBConsole 等の管理ツールを使う事ができます。

# RapidSQL でもいいですけれど...


DEKO  2013-08-16 01:36:22  No: 45031

図解してみました。
http://ht-deko.minim.ne.jp/delphiforum/?vasthtmlaction=viewtopic&t=1255


yTake  2013-08-16 04:24:18  No: 45032

DEKOさん
ありがとうございます。
だいぶ分かってきた様な気がします。
また、図解をどうもありがとうございます。

igyさんから指摘頂いたXEで単純化した新規プロジェクトをXE3で実行する試験ですが、結果は正常に動作しています。
つまり、疑わしい箇所だけを含むXEプロジェクトをXE3で実行して問題ありませんでした。

プロジェクトの問題ではないという事でしょうね。

かと言って、ソース的にも同じなので、修正のしようがありません。
以下が、そのソースです。
    if IBQuery1.IsEmpty = True then
        ShowMessage( 'Empty' )
    else
    begin
        k :=  0;
        cnt :=  IBQuery1.RecordCount;
        IBQuery1.First();
        while IBQuery1.Eof = False do
        begin
            value1  :=  IBQuery1.FieldByName( 'Field_1' ).AsFloat;
            value2  :=  IBQuery1.FieldByName( 'Field_2' ).AsFloat;
            IBQuery1.Next();
            inc( k );
        end;
    end;
です。
正常であれば、k=15までカウントされるのですが、
BreakPointを設定して追いかけると、k=8まで進んで、"IBQuery.Next"で"EOutOfMemory"が発生します。

開発段階なので、FirebirdはSuper Serverに接続しています。データベース本体は全く同じもの参照しているので、k=8で終わりという事ではないと思います。そうだとしても、メモリー不足になっているのはどういう事なのでしょうか?

ここがクリアされれば、正常になる様な気がします。どうでしょうか?


DEKO  2013-08-16 04:56:51  No: 45033

[TIBSQLからのSELECT文で「メモリ不足です」と表示される場合がある (Delphi-freeml)]
http://www.freeml.com/delphi-users/1021/latest

ここでは 「FastMM で直った」とありますが、逆に FastMM を組み込んでいたりはしていませんよね?

> cnt :=  IBQuery1.RecordCount;
老婆心ながら、IBX で RecordCount はお使いにならない方がよろしいかと思います。

[IBX では RecordCount を使ってはいけない]
http://ht-deko.minim.ne.jp/delphiforum/?vasthtmlaction=viewtopic&t=1251


yTake  2013-08-16 05:53:51  No: 45034

「FastMM」なるものは使ってはいません。ここで"UniDirection"をTrueにしても改善が見込まれそうにありましたので、試してみましたが、改善されませんでした。
「FastMM」が有効な様ですが、文面的にDEKOさんはお奨めしていない様に思いました。(現時点でその利用のし方が分かりませんが)
確かに、本データベースはテーブルを3つ利用していて、かつ、"EOutOfMemory"が発生するテーブルはフィールド数が多いです。現時点でレコードは15個ですが、レコードは相当数増える事が容易に推察されます。
「FastMM」を利用した方が良さそうにも思います。

ただ、これほどの大事なのでしょうか?
XEで正常だったプロジェクトをXE3に移行したいだけなのですが、、、

なお、"RecordCount"の件は了解しています。当初、ループの回数を得ようと思いましたが、DEKOさんはじめ参照させて頂いたサイト情報によりカウンター(k)で数え上げる様に変更しています。(消し忘れで利用はしていません)
ご指摘ありがとうございます。


DEKO  2013-08-16 06:44:40  No: 45035

> ただ、これほどの大事なのでしょうか?
> XEで正常だったプロジェクトをXE3に移行したいだけなのですが、、、

そこが不思議なトコロで、私の環境では問題ないのですよ。
EOutOfMemory も発生した覚えがありませんし...。

そういえば、IBConsole で EOutOfMemory になりましたか?
あれも XE3 製ですので同じようなエラーが出るはずなのですが...。

# 特に CSV 出力ロジックとかは yTake さんが提示された
# コードとほぼ同じ While でグルグル回すロジックとなっています。

> 「FastMM」を利用した方が良さそうにも思います。
Delphi-freeml での質問者の環境は Delphi 7.1 だったので FastMM でもいいのでしょうが、
Delphi 2006 以降、メモリマネージャは既に FastMM 相当のものに置き換わっています。

「FastMM を組み込んでいないか?」と尋ねたのは、
限りなく素に近い状態の XE3 でのテストが行われているかを確認したかったからです。


yTake  2013-08-16 07:47:20  No: 45036

「FastMM」の件、了解致しました。
現状では、標準のメモリーマネージャで相当の機能が実現されているという事ですね。

IBConsoleでの試験は、SELECT文の実行のみ試せました。予定通り15レコードの応答が確認できています。勝手に読み込まれてしまって、ループにして1レコードずつの確認という事は出来ていません。(やり方がわかりませんでした)

XE3でのプロジェクトでも、SELECT文の応答は全て問題なく受け取っていて、そこからあるフィールド値を読み出す場合にEOutOfMemoryが発生していそうです。

実は、XE3でXEプロジェクトを実行した際のエラー発生から、ソースコード上でもエラーが多数出ています。プロジェクト自体は実行できているにも関わらずです。また、その状態で、構文チェックしてもエラーはありません。
エラーは、”標準の型'TObject'が見つかりません”。2箇所。
”式の結果はBoolean型でなければなりません”。18箇所。
です。
この状態で、プログラムは実行可能です。メモリー不足と関連があるのでしょうか?


yTake  2013-08-16 08:55:23  No: 45037

すみません。
ソース上のエラーに関しては、出たり出なかったりで、説明が難しいです。取り敢えず、この件、無関係として質問内容から外したいと思います。


yTake  2013-08-16 09:19:45  No: 45038

直接本件と関係ありませんが、リリースビルドとデバッグビルドについて確認させて頂けるでしょうか?

XEで開発していた頃ですが、ビルドは使い分けておらず、常にデバッグビルドを常用していました。XEではEmbedded版しか接続していません。
Embedded版は、GDS32.DLL等をアプリケーションと同じフォルダーに配置する必要があると思いますが、その為、Embedded版関連ファイルを"C:\Program Files\app\"等のインストール予定先には配置していますが、デバッグビルドの出力フォルダーには配置していませんでした。
この環境でデバッグしていましたが、特に問題はありませんでした。デバッグビルドの出力先にも、Embedded版関連ファイルを配置する必要があるのでしょうか?
最終的に生成される実行モジュールは、”C:\Program Files\”以下のアプリケーションホルダーに配置されるので、そこに関連ファイルを置いておけば良いと思っていました。
XE3からはこの辺が厳格になったという解釈で良いのでしょうか?


DEKO  2013-08-16 11:34:52  No: 45039

> IBConsoleでの試験は、SELECT文の実行のみ試せました。予定通り15レコードの応答が確認できています。
そのまま、[クエリ | クエリの結果を保存] すると結果を CSV で吐きますが、
この処理は While でグルグル回しています。一件づつ読み取る処理です。

> Embedded版関連ファイルを"C:\Program Files\app\"等のインストール予定先には配置していますが
トラブルの元になるので UAC を完全にオフにしていないのでもない限り、
手動で %ProgramFiles% 以下にファイルを配置するのは避けたほうがいいかと思います。

> ソース上のエラー
プロジェクトマネージャでプロジェクトを右クリックし、
[クリーンナップ] を行った後で [プロジェクト | 再構築] を行ってみてください。

XE のプロジェクトが XE2 以降でエラーになる原因の多くは、
ユニットスコープ絡みのものです。
(IBX はユニットスコープが変更されていませんが)

ユニットスコープ絡みのエラーに関しては、以下を参照してみてください。

[17.雑多な情報]
http://ht-deko.minim.ne.jp/delphiforum/?vasthtmlaction=viewtopic&t=1222.1#postid-1630

少なくともエラーが出たり出なかったりというのは通常では起こり得ないと思いますし、
コンパイルエラーが出ているのであれば、プロジェクトを実行する事もできないハズです。

ライブラリパスが 1024文字制限に引っかかっていたりはしないですよね?
64bit OS だと Delphi が "Program Files (x86)" 以下にインストールされるので、
この制限に引っ掛かりやすくなります。

[RAD Studio (Delphi / C++Builder) の入れすぎで何かがおかしくなった場合には?]
http://ht-deko.minim.ne.jp/ft1212.html#121211

> デバッグビルドの出力先にも、Embedded版関連ファイルを配置する必要があるのでしょうか?
繰り返しになりますが、Firebird Embedded Server はその名の通り
アプリケーション毎に組み込んで使うのが一般的だと思われます。

どこかへインストールしてパスを通して使うというのはあまりやりませんし、
その場合だと Super Server との共存が難しくなるので開発が面倒な事になると思うのです。
(どの GDS32.DLL が使われるのか判らなくなってしまう)

"リリースビルドの出力先" に Embedded Server を配置しておけば
デバッグビルド時にはステップ実行も可能 (Super Server 動作) ですし、
IBConsole 等の管理ツールでリアルタイムに中身を確認できます。
リリースビルド時にはデバッグはできませんが、配布環境と同じ条件で実行するコトができます。

# Super Server 経由で DB を開いている場合には、
# Embedded Server でその DB を開けませんからね。


yTake  2013-08-16 18:58:52  No: 45040

IBConsoleの件、[クエリ | クエリの結果を保存]を実行しました。
結果、エラー無くCSVへ保存されました。
私のソースの移植に問題ありという事でしょうか?

ライブラリパスの1024文字数制限の件、確認の方法はパスの文字列の文字数を数える他にないでしょうか?
パスが存在しなくて灰色文字になっているパスの定義もカウントに入れるのでしょうか?
全部で、150文字程度でした。
パスの文字数関連では、ブラウザ検索パスと言うのが、約1000文字くらいありそうです。詳しく見た方が良いでしょうか?

リリースビルドとデバッグビルドの使い分けがようやく理解できてきました。
関連ファイルの配置に関しましては、リリースビルドにEmbedded関連ファイルを配置すると言う事で理解しましたが、TIBDatabaseプロパティに設定しているサーバータイプのパラメータは各ビルドのアクティブ化の切り替えで、自動では変更されません。この辺の作業は手作業でリリースとデバッグの設定切り替え(ローカル(参照)/リモート(TCP))をすると言う事でしょうか?

XEとXE2以降とで、スコープの問題があるとは知りませんでしたが、EOutOfMemoryもどこかでその影響があるのかも、と
プロジェクトをクリーンアップしてみましたが、改善されません。

今回、色々と本題以外で非常に勉強になっています。ありがとうございます。
肝心の、EOutOfMemoryの原因と対処が分かりかねているのが残念です。
現象を説明できているのか、心配になってきます。


DEKO  2013-08-16 20:12:26  No: 45041

> ライブラリパスの1024文字数制限の件
すみません...ライブラリパスって書いてしまいましたが、
あの記事中の話は "システム環境変数 Path" の話ですね。
# もちろん、ライブラリパスも長くなりすぎると後ろが認識されなくなります。

> この辺の作業は手作業でリリースとデバッグの設定切り替え(ローカル(参照)/リモート(TCP))をすると言う事でしょうか?

ですね。例えば...

var
  Database: string;
begin

  ...

  Database := IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0))) + 'DATA.FDB';
  {$IFDEF DEBUG}
  Database := 'localhost:' + Database; // デバッグビルド時 = Super Server 実行時
  {$ENDIF}

  ...

end;

のようにして切り替えるといいと思います。

> XEとXE2以降とで、スコープの問題があるとは知りませんでしたが、
ユニットスコープに問題がある場合にはコンパイルエラーになり、バイナリを吐く事ができません。
以前に書かれていた "ソース上のエラー" とはワーニングの事だったのですかね?


yTake  2013-08-16 20:21:53  No: 45042

方向性の確認をさせて頂きます。
これにより、環境用件が決まってくると思います。
環境用件が正しくなければ、動作も保障されないと思いました。

開発アプリケーションは、Embedded版と共に配布します。
インストーラで、ユーザーPC上の”C:\Program Files\アプリケーション\”に開発アプリケーションと共に、GDS32.dll, ib_util.dll, icudt30.dll, icuin30.dll, icuuc.dll, intl\fbintl.conf, intl\fbintl.dll, udf\fbudf.dll
をコピーします。

IBDatabaseのserver設定はローカルで、別途ユーザーフォルダー等に配置するデータベース本体へアクセスします。

開発PCでは、"Super Server版"Firebirdをインストールしています。
リリースビルドの出力先フォルダーに、GDS32.dll, ib_util.dll, icudt30.dll, icuin30.dll, icuuc.dll, intl\fbintl.conf, intl\fbintl.dll, udf\fbudf.dll
これらは、ユーザーPCにコピーする物と同じです。ここにはリリース構成の実行ファイルも出力されます。サーバーは同一ホルダー内のEmbedded Serverとなりますが、デバッグはできない。
IBDatabaseのサーバー設定はローカルでデータベース本体の保存場所を指定。

デバッグビルドの出力先フォルダーには何も配置しません。ここにはデバッグ構成の実行ファイルが出力されるだけで、サーバーはSuper Serverへ接続してユーザーフォルダー等のデータベース本体へアクセスします。
IBDatabaseのサーバー設定はリモートでTCPを設定します。

なお、GDS32.dllはそれが"Super Server"付属のものか、"Embedded Server"付属のものかの区別はないと言う事で良いでしょうか?

この様に開発環境、ユーザー環境を考えています。これで誤りが無ければ、あとはプロジェクトのソースが問題と言うことになるでしょうか?


DEKO  2013-08-16 20:33:32  No: 45043

> なお、GDS32.dllはそれが"Super Server"付属のものか、
> "Embedded Server"付属のものかの区別はないと言う事で良いでしょうか?

いえいえ、"混ぜるな危険" です。

Super Server のクライアント:
fbclient.dll -> GDS32.DLL

Embedded Server のクライアント:
ebembed.dll -> GDS32.DLL

です (32bit アプリケーションの場合)。

> これで誤りが無ければ、あとはプロジェクトのソースが問題と言うことになるでしょうか?
残念ながらそうなってしまいます。"何か" が違うのでしょうね。
その "何か" が判らないのが非常にもどかしいのですが。

他に関連しそうな外的要因となるとウィルス対策ソフトくらいのものでしょうか?


DEKO  2013-08-16 20:34:23  No: 45044

誤: ebembed.dll -> GDS32.DLL
正: fbembed.dll -> GDS32.DLL


yTake  2013-08-16 20:56:32  No: 45045

DEKOさん、ありがとうございます。

すみません。「混ぜるな危険」のところ確かに読んで要注意と確認したのですが、身に着いていませんでした。
そうすると、リネーム後はいずれ由来のGDS32.DLLかは分からなくなってしまいますね。

「$IFDEF]の構文はこれから使って行こうと思います。

ただ、私が意図していたのはデータベース本体へのパスではなく、その接続がローカルかリモートかと言う選択とリモートの場合のプロトコルの選択(と、そのポート番号)を、手動で切り替える必要と言う事でした。
データベース本体へのパスは、絶対パス/相対パスいずれでも常に同じであれば切り替える必要はないと思います。
問題は、サーバータイプが"SuperServer"つまりリモート接続か、"Embedded Server"つまりローカル接続かをコンポーネント上で選択し直すと言う事です。これらパラメータ名が分かれば、ソース上で[$IFDEF]で切り替えも可能と思います。ただし、プロジェクト・インスペクタ上では見当たりませんでしたので、目下のところパラメータ名が分かっていません。

つまり、データベース本体の格納場所が、絶対パスで"C:\Users\yTake\app\DB\"として、開発PCでもユーザーPCでも同様にログインユーザーを作成してデータベースを配置すれば、パスの切り替えは不要と思います。実際、今現在、データベースへのパスは設定し直していませんが、マニュアルでローカル/リモートの切り替えています。


yTake  2013-08-16 21:06:47  No: 45046

ソース上のエラーの件ですが、ワーニングではなくエラーでした。
しかも、当初は、一切エラーは無かったのですが、(事実、実行可能です)
例の"EOutOfMemory"以後、別のユニットでエラーが発生しています。
奇妙なことに、このエラーがある状態で、プロジェクトは実行可能で、続けていくとまた"EOutOfMemory"になります。この状態で、構文チェックやコンパイルを掛けても、下部のメッセージウィンドウでエラーの表示はありません。”成功”になっています。構造ウィンドウにエラーがあるにもかかわらずです。

今現在は、出なくなりました。特に対処していないのですが。


DEKO  2013-08-16 21:12:59  No: 45047

以下の資料を軽く読んでください。

[IBX で Interbase / Firebird に接続するには?]
http://ht-deko.minim.ne.jp/tech045.html#tech091

DatabaseName に設定する文字列は、
"サーバ名:サーバから見たデータベースのパス"
...例えば、C:\TEST に DATA.FDB が存在するのであれば、

Super Server の DatabaseName (ローカル接続、但し TCP/IP 経由):
localhost:C:\TEST\DATA.FDB

Embedded Server の DataBaseName (ローカル接続):
C:\TEST\DATA.FDB

という事になります。

サーバ名が指定されていなければローカルサーバ、指定されていればリモートサーバです。

・ローカルサーバ&ローカル接続 (C:\TEST\DATA.FDB)
・リモートサーバ&ローカル接続 (localhost:C:\TEST\DATA.FDB)

という "二種類のローカル接続" がある事に注意してください。

パラメータに関しては TIBDatabase をフォームデザイナでダブルクリックすると
設定ダイアログが出ますのでそこで確認する事ができます。


DEKO  2013-08-16 21:14:28  No: 45048

> 構造ウィンドウにエラーがあるにもかかわらずです。

[QC 入れたよ!より]
http://ht-deko.minim.ne.jp/delphiforum/?vasthtmlaction=viewtopic&t=1257

こういう話でしょうか?


yTake  2013-08-16 22:34:17  No: 45049

[IBX で Interbase / Firebird に接続するには?]
拝見しました。
なるほど、データベース指定の際に、リモートかローカルかも含めて指定していたのですね。納得です。
二種類のローカル接続がある事、理解できます。localhostはプロトコルはTCPですが、自分自身への接続になりますので事実上のローカル接続ですね。
localhostのところが、サーバーPCのアドレスになっている場合が、
リモートサーバー&リモート接続(remote_server_IP:データベースへのパス\DATA.FDB)
と言う事ですね。

さんしょうの資料中で、ボタンがクリックされた時にアクションとして定義に、TIBDatabase, TIBTransaction, TIBQueryのCreateがなされています。
このボタンアクションの終わりで各コンポーネントを開放している為、毎回作成する必要はあるでしょうが、私の方では、明示的にCreateしていません。
たぶんフォームに貼り付けた際にCreateが一度実行される様になっているのだと思います。従って、私の方ではコンポーネントを開放はしていません。
メモリー管理に影響しているでしょうか?
また、私の方で問題となっている、SELECT文の応答をOPENで受け取るコードが示されていますが、資料中ではwhileループにはなっていません。これで、複数レコード分の応答があった場合、全て、受け取れているのでしょうか?

[QC 入れたよ!より]
減少は、ちょっと違う様です。
もう少し、具体的に把握できたら改めて問い合わせさせて頂きます。


DEKO  2013-08-17 00:08:32  No: 45050

> ボタンがクリックされた時にアクションとして定義に、TIBDatabase, TIBTransaction, TIBQueryのCreateがなされています。
> このボタンアクションの終わりで各コンポーネントを開放している為、毎回作成する必要はあるでしょうが、私の方では、明示的にCreateしていません。

毎回作成/破棄する必要はありません。

ただ、"フォームを開きっぱなしにして昼ゴハンを食べに行った" とかで、
タイムアウトする可能性があるのであれば、多少の細工は必要かと思います。

スタンドアロンではなく C/S であれば
接続時間は可能な限り短くすべきだと思うので、
都度コネクションを行ったり、毎回作成/破棄するのも手かと思います。

今はテストをしていないので状況が変わっているかもしれませんが、
(少なくとも) 以前の IBX だと接続中に LAN ケーブルを抜いた場合、
どうやっても再接続できずアプリケーションの再起動を行うしかありませんでした。

これは回線品質が悪い古い無線 LAN 環境を想定したテストだったのですが、
これを回避するには IBX コンポーネントを動的作成/破棄できるように
するしか手がなかったと思います。

> SELECT文の応答をOPENで受け取るコードが示されていますが、
> 資料中ではwhileループにはなっていません。
ShowMessage() の部分にお好きなコードを入れてテストしてください。
コードはあくまで接続サンプルでしかありません。

> 減少は、ちょっと違う様です。
エラーインサイトのエラーは "コンパイルエラー" ではありません。

エラーがないハズなのにコードに赤下線が引かれる事があるかと思いますが、
そのままコンパイルしても "コンパイルエラー" にはならないですよね?

私が "エラー" とか "ワーニング" と言っていたのは
コンパイラが出すものを指していました。


yTake  2013-08-17 02:42:07  No: 45051

ループ処理に関しまして資料中のコードについては了解致しました。

確かに、接続中の不可抗力による断など想定していませんでした。確かに、重要な観点です。ただ、本データベースはローカルサーバー&ローカル接続(Embedded版なので)になりますので、ほぼ接続断になる可能性は低いのかなと思っています。

すみません。用語を正確に把握していないので、”エラーインサイト”とは何を(どこを)意味するのか分かりません。
私の言うコンパイル時に無視されるエラーとは、画面右上(たぶん初期条件から変更していないので)オブジェクト・インスペクタの上のウィンドウに表示されるフォルダーツリーの一つで、”エラー”と言うフォルダーに多数エラーが出現していました。

相変わらず、EOutOfMemoryのエラーは解消出来ていません。例えば、EOutOfMemoryが出現するループ回数と言うのは何かのヒントにならないでしょうか?10回目でEOutOfMemoryが発生しています。
以前は、8回目だった気もしますので、あまり当てにはならないのかもしれません。


DEKO  2013-08-17 03:10:00  No: 45052

> エラーインサイト
コレです。

[エラーインサイト - 支援機能(IDE チュートリアル)(DocWiki)]
http://docwiki.embarcadero.com/RADStudio/ja/%E6%94%AF%E6%8F%B4%E6%A9%9F%E8%83%BD%EF%BC%88IDE_%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB%EF%BC%89#.E3.82.A8.E3.83.A9.E3.83.BC_.E3.82.A4.E3.83.B3.E3.82.B5.E3.82.A4.E3.83.88

> 相変わらず、EOutOfMemoryのエラーは解消出来ていません。
...そうですね。

例えばなのですが、問題の出るテーブルと全く同じテーブルレイアウトの別テーブルに
ダミーデータを書き込んで (それを読み込んで) エラーが出るかどうかをテストしてみてはいかがでしょう?

もしも CHAR / VACHAR で 256 以上のサイズになっているものがあれば
BLOB SUB_TYPE TEXT に置換してテーブルを作ってみてください。
(つまり最大は CHAR / VACHAR は 255 まで。これは Interbase 6.x の最大値です)

# 上記の変更を行ってもコードの修正はありません。
# .AsString でアクセスできます。

これと UniDirectional の設定が EOutOfMemory のエラーに関与している事が多いようなのですが、
XE では正しく動作する以上、どちらも原因とは考えにくいのですよね...。
Delphi 2005 以前ではないので FastMM で直るとも思えませんし。


DEKO  2013-08-17 03:19:30  No: 45053

> これは Interbase 6.x の最大値です
Interbase 6 のドキュメントをあたってみましたがウソでした。
# 何と勘違いしたのだろう?

あ、でも大きめの CHAR / VARCHAR を 
BLOB SUB_TYPE TEXT にしてみるのは本当にアリかもしれません。


yTake  2013-08-17 06:46:35  No: 45054

以前、XE3で新規プロジェクトから作り直したケースがありましたが、この時はプロジェクト自体新規ですが、ユニット・フォームはXE版から追加しました。
今回、XE3で新規プロジェクトに新規追加で、フォームやユニットを追加して、XEからソースコードをコピペしてみましたが、改善されませんでした。

DEKOさんから、
もしも CHAR / VACHAR で 256 以上のサイズになっているものがあれば
BLOB SUB_TYPE TEXT に置換してテーブルを作ってみてください。
とのご指摘ですが、VARCHAR(1024)やVARCHAR(512)と言うのもあります。これをBLOB SUB_TYPE TEXTに置換してみるのですね。

XEではそのままで問題なかったのですが、、、


yTake  2013-08-17 16:59:33  No: 45055

大き目の"CHAR/VARCHAR"を"BLOB SUB_TYPE TEXT"に置換してみました。UniDirectionalをTrueに設定してあります。
結果は、同様でした。

"CHAR/VARCHAR"を"BLOB SUB_TYPE TEXT"に置換後、改めてデータを登録し直す時にも現在開発中のソフトを使用したのですが、XE版の頃と同様に問題ありません。データベースへの登録にはSELECT文やOPENを用いていないので、当然ではあります。
データベースへの接続自体は問題ないとみて良いのでは?と思います。
たはり、SELECT文の応答をOPENで受けてループで回すところが問題でしょうね。
本ソフトは経緯から分かる通り全くのゼロかの開発ではありません。古いルーチンを流用し続けています。この辺りが、悪さしているのでしょうか?
ただし、古いルーチンではデータベース操作は一切ありません。今回改めて、データベース機能を追加する為に、修正を施したのが始めてです。

全てゼロから作り直したいところですが、この流用部分がある為、それも難しいところです。


DEKO  URL  2013-08-17 17:23:54  No: 45056

> 結果は、同様でした。
...そうですか。

実際のコードをすべて開示する訳にもいかないでしょうから、
原因究明は難しそうです。私も可能性の話しかできませんしね...。

# もし、原因を突き止めるために "仕事として" 出しても構わないのであれば、
# メールでご連絡下さい。何かお手伝いできる事があるかもしれません。


igy  2013-08-17 17:38:39  No: 45057

原因の特定に結びつくかは、わかりませんが、私だったら・・・

・一般的なPC(Windows Xp以降)
・Firebird(Embedded版じゃないほう)と接続

で試してもエラーが表示したことから、環境やFirebirdの種類の問題ではなく、

・新規にXE3でプロジェクトを作成して、SELECT分の応答をOPENで受けてループで回して受け取るだけのルーチン
・XEで同様のプロジェクトを作成し、XE3でコンパイル

は、正常に取得できたことから、TIBQuery部分の記述の問題でもないと判断し、

その問題のプロジェクトを、テスト用にコピーし、
そのコピーしたプロジェクトで、
・少しずつ関係ない部分の機能を削っては、コンパイル&実行して、TQueryでのデータ取得部分でエラーが表示するか確認。
関係ない部分の機能を削のを繰り返して、どの部分を削ったら、エラーが出なくなるか、試してみるかもしれません。

# ただ、この方法で、最終的に解決するかは、わからないのですが・・・


igy  2013-08-17 17:42:59  No: 45058

ちなみに、最新のアップデートをあてても、結果は同じでした?


yTake  2013-08-17 18:47:11  No: 45059

DEKOさん、igyさん
ありがとうございます。

思いの他、重症な問題で困ってしまいます。

igyさんの言われる通り、地道に一つずつ当たってみるほか無さそうです。

最新のアップデートは未だ当てていません。手順が少し分からなくて、、、ID29294:update2なるダウンロードをみつけたのですが、アクセスできませんでした。一般にダウンロード出来そうな"binaries"ではID29294が見つかりませんでした。

ライセンス登録はしているのですが、登録は別のユーザーだからなのでしょう。ログイン画面などはなかったのですが、、、


DEKO  2013-08-17 19:28:45  No: 45060

> 最新のアップデートは未だ当てていません。
う。まだあててらっしゃいませんでしたか。

1.https://members.embarcadero.com/login.aspx?returnurl=http://cc.embarcadero.com/item/29294 へ行く

2.ライセンス登録したユーザでログインする。
  (ログインすれば 29294 のページに飛びます)

3.Update 2 for Delphi, C++Builder and RAD Studio XE3 を DL

なお、Update2 は実質インストーラですので、一旦 XE3 をアンインストールしてから
  インストールしてください。


DEKO  2013-08-17 19:31:09  No: 45061

こちらは ISO イメージの DL です (Update2 適用済)。
https://members.embarcadero.com/login.aspx?returnurl=http://cc.embarcadero.com/item/29291


yTake  2013-08-17 19:56:13  No: 45062

DEKOさん、igyさん

すみません。当てた方が良いとは思っていますが、すぐにダウンロードできなかったもので。
ログインの確認に時間を要するかもしれません。

アップデータしたら、結果を報告させて頂きます。


Mr.XRAY  2013-08-18 04:03:45  No: 45063

横から失礼します.
Update の話が出ていたので...
yTake さんに限らず,この掲示板をご覧の方への参考として.

[Delphi の製品情報]   
http://ht-deko.minim.ne.jp/Delphi/

というようなページを抑えておくと (ブックマーク等に登録しておくと) 便利です.
一番左のペインで Delphi のバージョンをクリックすると,該当バージョンの内容を表示します.
真ん中のペインの [アップデータ] をクリックすると,各種アップデートのリンクが,
右のペインに表示されます.


yTake  2013-08-18 08:18:11  No: 45064

Mr.XRAYさん

便利な表があるものですね。知りませんでした。検索不足なのが否めませんね。
アップデータはもちろん追加ダウンロードと言うのもあるのですね。

ありがとうございました。


yTake  2013-08-18 08:48:41  No: 45065

DEKOさん、igyさん

update2を無事当てられました。バージョンは"17.0.4770.56661"になりました。

早速、テストしたのですが、接続ができなくなってしまっています。

アップデートの際誤ってInterBaseまでインストールしてしまったので、直ぐにInterBaseのみアンインストールしました。
念のため、FirebirdVer2.5.1(Win32)を一旦アンインストールしてから再度インストールしました。
タスクマネージャーの"サービス"タグで、"FirebirdGuardianDefaultInstance", "FirebirdServerDefaultInstance"が稼動しているのが確認できます。

エラーは、"EIBInterBaseError"で"connection rejected by remote interface"となっています。

IBComsoleからも接続できなくなっています。エラーは上記と同じで、
接続診断の結果は"An InterBase error has occurred while attaching.
Error - connection rejected by remote interface
InterBase Communication Test Failed!"
でした。

アップデート前はいずれでも問題なく接続(ログイン)できていたのですが、、、


igy  2013-08-18 09:07:12  No: 45066

(System32フォルダなどに)InterBaseの gds32.dll が残っているとかは、ないですか?


yTake  2013-08-18 10:10:56  No: 45067

igyさん

ご明察です。ありがとうございます。

前のバージョンでも、インストール済みのInterBaseのみアンインストールしてからFirebirdをインストールする事で特に手作業でファイルを操作する事なしに正常に入れ替える事ができていました。
今回も同様の対処をしたのですが、InterBase版のGDS32.DLLが残っていました。

入れ代わっているものと言う思い込みがよくありませんね。


yTake  2013-08-18 10:19:47  No: 45068

DEKOさん、igyさん
yTakeです

アップデート後、XE−>XE3とした例のプロジェクトを実行してみました。

結果、問題なく動作しました。

最新版へアップデートされていなかった事が良くなかった様です。
始めに、ご指摘があったにも関わらず、お手数をお掛けしてしまいました。

おかげさまで、個人的には大変勉強になりました。


yTake  2013-08-18 18:15:37  No: 45069

お蔭様で解決いたしましたので、閉じさせて頂きます。

大変ありがとうございました。


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

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






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