はじめまして
タイトルの件ですが、説明しにくいのでソースを添付します。
フォームにボタンをいくつか配置し、ボタンのインデックスで
DataBase、ユーザ、パスワードを変更し接続を確認するPGですが、
起動して、1回目のボタン押下では正常に接続・切断ができますが、
2回目以降※1の部分でCPU画面が表示されイベントログに
Invalid Address specified to RtFreeHap(01170000,01178E60)
が、表示され困っております。
どこかでアドレス違反があるのでしょうが、さっぱりわかりません。
どなたかご教授下さい。
よろしくお願いいたします。m(_ _)m
<!--- 以下 ソース ---!>
const
G_SERV : array [0..5] of String
= ('db1','db1','db1','wdb1','wdb1','wdb1');
G_USER : array [0..5] of String
= ('AAA','BBB','CCC','DDD', 'EEE', 'FFF');
G_PASS : array [0..5] of String
= ('AAA','BBB','CCC','DDD', 'EEE', 'FFF');
procedure TForm1.sConnected(idx : Integer);
var
SQLC : TSQLConnection;
begin
SQLC := TSQLConnection.Create(Self);
SQLC.GetDriverFunc := 'getSQLDriverORACLE';
SQLC.LibraryName := 'dbxora30.dll';
SQLC.VendorLib := 'oci.dll';
SQLC.ConnectionName := 'OracleConnection';
SQLC.DriverName := 'Oracle';
SQLC.LoginPrompt := False;
SQLC.KeepConnection := True;
with SQLC do
begin
Params.Values['DataBase'] := G_SERV[idx];
Params.Values['User_Name'] := G_USER[idx];
Params.Values['Password'] := G_PASS[idx];
try
SQLC.Connected := True;
except
ShowMessage('接続エラー');
Exit;
end;
end;
if SQLC.Connected then
SQLC.Connected := False; ←※1
SQLC.Free;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
sConnected(0);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
sConnected(1);
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
sConnected(2);
end;
<!--- ---!>
環境は
Borland Developer Studio 2006
Windows XP
Oracle
です。
Oracleは使ったことがないのですが、
Borland Developer Studio 2006
は、Update 2 や Hotfix は適用してますか?
igy様
>Update 2 や Hotfix は適用してますか?
とは、WindowsUpdateのことでしょうか?
これならば、メッセージが表示される都度適用しています。
>>Update 2 や Hotfix は適用してますか?
>とは、WindowsUpdateのことでしょうか?
Delphi Registered User Downloads
http://cc.embarcadero.com/reg/delphi
にある
Update 2 for Borland Developer Studio 2006
とか、
Hotfix ??? for Borland Developer Studio 2006
です。
igy様
おはようございます。
朝早くからの返信ありがとうございます。
これは、まったくしたことが無いです。
これは、必ず行わなければならないのでしょうか?
>これは、必ず行わなければならないのでしょうか?
“必ず” ではありませんが、できれば適用したほうがよいかと思います。
igy様
教えていただいたURLよりダウンロードしようと試みたのですが、
「Certificate No」を入力しないとダウンロードできないみたなのですが
「Certificate No」とは何のことでしょうか?
>教えていただいたURLよりダウンロードしようと試みたのですが、
Update 2 for Borland Developer Studio 2006 (Pro, Japanese)
で試したところ、
途中、Developer Networkにログインする画面など出て、
ログイン後、ファイルをダウンロードする画面まで表示出来ましたが、
>「Certificate No」を入力しないとダウンロードできない
この画面は、どのタイミングで表示しましたか?
DataBase接続、切断の部分を
SQLC.Connected := true; → SQLC.Open;
SQLC.Connected := False; → SQLC.Close;
の様に変更してみてもだめでしょうか?
igy様
>この画面は、どのタイミングで表示しましたか?
ダウンロードボタンと押下した後に表示されます。
GTR様
変更して試みましたがだめでした。
ダウンロード
http://www.codegear.com/jp/downloads
の下のダウンロードヘルプに、トラブルシューティング情報がありますが、
それでも解決できない場合には、
お問い合わせ
http://www.codegear.com/jp/about/contact
に問い合わせたほうがよいかもしれません。
igy様
Update2を適用しましたが、改善されませんでした。
どうしようかなぁ
だいぶ時間が過ぎていますので、ご覧になって居ないかもしれませんが...
Oracleの経験も全く有りませんがお許しを。
初歩的な事だけを書きます。
先ず、
const
G_SERV : array [0..5] of String
= ('db1','db1','db1','wdb1','wdb1','wdb1');
G_USER : array [0..5] of String
= ('AAA','BBB','CCC','DDD', 'EEE', 'FFF');
G_PASS : array [0..5] of String
= ('AAA','BBB','CCC','DDD', 'EEE', 'FFF');
ですが、予め必要事項はサーバーに登録されて居ると解釈して良いのでしょうか?。
私は、IBX+FireBirdでデータベースを運用しておりますが、上記項目は予め
設定された場合のみアクセス可能です。Oracleについては把握して居りません。
またTSQLConnection、ですが
動的生成ではなく、標準のコンポーネントのプロパティに必要事項を設定してみたらどうでしょうか?。
最後に、接続と切断を別個のイベントに記述してそれぞれの結果を見ては如何でしょうか。
「KeepConnection := True」のプロパティもちょっと気になります。
>予め必要事項はサーバーに登録されて居ると解釈して良いのでしょうか?。
はい、サンプルなのでこのような書き方になってます。
>標準のコンポーネントのプロパティに必要事項を設定してみたらどうでしょうか?。
これも試しましたがだめでした。
調査?と言うか、試しに
SQLC.LibraryName := 'dbxora30.dll';
↑この部分を
SQLC.LibraryName := 'dbexpora.dll';//(Delphi7のDLLを使用)
に、変えたところ正常に動くんです。
Oracleは10gですし、'dbxora30.dll'を推奨してるのになぜ動かない!!!
初心者様
レスありがとうございます。
お名前、挨拶を記入するの忘れてましたm(_ _)m
思いつきで申し訳ありませんが、ドライバー('dbxora30.dll')の代わりに
uses節に、「DbxOracle」を追加して見たらいかがですか?。
これは、Delphi2007でも使っています。
物は試しで。...
>Update2を適用しましたが、改善されませんでした。
ちなみに、Hotfix は適用しましたか?
# 改善されるかどうかわかりませんが・・・・
ツイート | ![]() |