喫茶XRAYトップページ

[スレッド全体
]

[6741] 思いこみ返信 削除
2013/2/26 (火) 17:43:11 Mr.XRAY
ちょっとスレッドが切れていて読みにくいかも知れませんが,

[ADOでdbfファイルを読み込むとエラー]
http://www.freeml.com/delphi-users/3014/latest
http://www.freeml.com/delphi-users/3017/latest
http://www.freeml.com/delphi-users/3020/1
http://www.freeml.com/delphi-users/3020/2
http://www.freeml.com/delphi-users/3020/3

最初の質問で,コードが示されています.
そこで,このコード内でエラーが発生すると勝手に思い込んでしまいました.

違うんですね.
手順が一切書いてないし,どこでエラーが発生するかも書いていませんが,
おそらく,EXE の起動時だと思われます.
(質問された方が提示したコードは,EXE 起動時には実行されていない)

UAC だとか,MDAC だとか,JET 4.0 の関係か,いろいろ想像を巡らせて
しまいました.
最初の思い込みが曲者でした.

ADO 関係のサンプルを掲載している関係上,
「えっ!? そんなことはないだろう」
と思いましたね.冷や汗もんでした.

えっ!? 本人からはまだ,何も反応がないから違うかもって.
そんなこはないと思います.確信です.ハイ.


[6744] 名探偵コナンの推理返信 削除
2013/2/28 (木) 12:58:53 Mr.XRAY
結構サスペンスドラマっていうのが好きなんですが,
サスペンスドラマは,最後に,必ずと言っていいほど,
何故か推理に至った過程を説明しますよね.
実際には,そんなことはないと思いますが,
参考までに,興味がある方のために (えっ!? そんな人いない? )

http://www.freeml.com/delphi-users/3047
のように推理したかを説明しておきます.

まず,以下で,

≪これは実際の文字列を見てみない事には判断できないかもですね。≫

とレスしています.
http://www.freeml.com/delphi-users/3018

質問者からの反応は以下のものでした.
http://www.freeml.com/delphi-users/3020

ところが,ここには,肝心の [Data Source=[DatabasePathの文字列]の
具体的な内容がありません.
パスが存在しないのを調べたいのに,これでは確認できません.
その後も,確認を促すレスをしたのてすが,秘密らしく,教えてくれません.
しかも,質問者の接続文字列の設定は,

   ADOC.ConnectionString :='Provider=Microsoft.Jet.OLEDB.4.0;'+
                            'Data Source='+DatabasePath+
                            ';Extended Properties=dBASE IV';

    ADOQ.ConnectionString := ADOC.ConnectionString;

となっています.どう考えても矛盾しています.


そこで,これではラチがあかないので,テスト用のプロジェクトを
作成しました.
http://mrxray.on.coocan.jp/Others/ADO_ConnectDBF.htm

このサンプルには,テスト用の .dbf ファイルを添付しています.
もし,これで,Delphi, BDE がインストールされていないコンピュータで
動作すれは,動作するということです.
更に,この中の

ShowMessage(ADOC.ConnectionString);

で接続文字列を確認してもらうことにしました.

結果は,Delphi, BDE がインストールしていない PC でも
データベースを開いてデータを表示することができました.
質問者のデータベースファイルも開くことができました.
http://www.freeml.com/delphi-users/3027
http://www.freeml.com/delphi-users/3032

ところが,接続文字列については,

≪不思議なことに?前メールのとおり長くなっていました。≫

というのです.
http://www.freeml.com/delphi-users/3026

そんな馬鹿なことはありません.私の作成したプロジェクトには,そんな
接続文字列なんか設定していません.そんなハズないのです,
質問者のプロジェクトで,私のサンプル内の接続コードを使用しているのかも ?
そこで,
接続の前に,接続文字列を空文字にするコード

    ADOC.ConnectionString := EmptyStr; //これを追加

を提案しました.
この時点で,この質問者は,接続文字列を ShowMessage で表示して取得して
いるのではないらしい,と,やっと気付きました.
つまり,この提案は,無意味でした.
これは,オブジェクト・インスペクタ,つまり設計時の値なんですね.
これ以外は,そんな長い接続文字列の設定がされる状況は考えられせん.

したがって,実行時には,ユニット内に書かれたデータベース接続用のコード
は実行されていないのです.
この実行時の接続用のコードが実行されないのですから,この中の
ShowMessage が実行されることはありません.

EXE の実行開始時には,オブジェクト・インスペクタの設定が実行されます.
これは,フォーム生成時,OnCreate イベントが発生する前です.
だからこそ,ボタン等のサイズが,オブジェクト・インスペクタでの設定値で
表示されるわけです.

さて,では一体,質問者は,長い接続文字列を,どこでどう
調べたのでしょうか? 謎は残りますが,ここでは追究しないことにします.

≪これで接続できれば,これらが「犯人」です.≫

というレスをしましたが,この犯人には,黒幕がいます.
その黒幕というのは,質問者です.ハイ.


重要なことは,「うまくいかないプロジェクト」ではなく,
確実に動作するサンプルで確認後,うまくいかない自分のプロジェクトとは,
どう違うのかを調べることですね.

そのためにも,当サイトのサンプルでは,「設計時画面」とういうのを,
基本的に掲載しています(宣伝と自慢です.ハイ)


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82