ちなみに、検索で以下のような情報がありました。
(Delphiは関係無く、純粋にODBCでCSVファイルをどうするかという観点ですが)
前者のドライバーは、32bitでは動くが64bitではエラーになるような事が書かれています。
■ VBS ADO CSV のText Driver の64 bit Windows と32 Bit Windowsの違いと対応策
https://qiita.com/Q11Q/items/4220631d095599b4f127■ 接続文字列一覧|OLEDB ODBC 32bit 64bitによって違います
https://access-skill.com/ado-connectionstring-list/#google_vignetteただ、福士さんの提示された 1.~10. は動的設定は使わずにプロパティエディタ等で値を設定して
動かしたんですよね?
8.でエラーというのはDBGridへの接続、あるいはDBGridでの表示の時ということですよね。
うーん、なんでしょうね。
(動的に設定した時だけでなく、設計時に各種設定してもダメということですよね?)
※ 私はEntエディションではなく、Proエディションなので、FireDACのODBCプロバイダーがなくて
近い環境で試せませんでした。
ほとんど参考にはなりませんが、devart社のUniDACというコンポ、Delphi 10.4を使っていて一応、テストして
みました。その環境では、問題なく32bit/64bitともに動きました。
コンポが違うのであまり意味はありませんが、一応、ざっくりの設定を書いておきます。
<ODBCデータソース アドミニストレータ (64 ビット)>
※ 以下のものは64bit側で作成するだけで、32bit側でも作成される。
・Microsoft Access Text Driver (*.txt, *.csv)を追加。名前をCSVTest2 とした。
・CSVTest2を[構成]ボタンを押して、[フォルダーの選択]で、CSVファイルの存在するフォルダを指示。
※ CSVファイルのファイル名はTEST.CSVとする
<Delphi 10.4 (VCLアプリ)>
1) 新規アプリを指示。とりあえず、ターゲットプラットフォームは32bitだけにしておく。
2) フォームにTUniCounnectionをドロップ
3) TUniConnectionのプロパティをオブジェクトインスペクタで設定
ProviderName: ODBC
Server: CSVTest2
4) Connected プロパティをTrueに変えてみる → 問題なし。
Falseに戻しておく
5) フォームにTODBCUniProviderをドロップ
6) フォームにTUniTableをドロップ
7) TUniTable のConnectionプロパティが TUniConnection1であることを確認
8) TUniTable のプロパティをオブジェクトインスペクタで設定
TableName: TEST.CSV
9) UniTable1.ActiveプロパティをTrueに変えてみる → 問題なし。
10) フォームにTDataSourceをドロップ
11) DataSource1.のプロパティを オブジェクトインスペクタで設定
DataSet: UniTable1
12) フォームにTDBGridをドロップ
13) DBGrid1の プロパティを オブジェクトインスペクタで設定
DataSource: DataSource1 → DBGrid内にCSVの内容が表示される。
14) ビルド
15) IDE内での実行 → 問題なし(この時点では32bit版)
16) IDEでターゲットプラットフォームにWindows64bitを追加。64bitがカレントになっていることを確認
17) ビルド
18) IDE内での実行 → 問題なし(この時点では64bit版。タスクマネージャでみても64bit版として動いている)
以降、CSVファイル名を動的に設定するテスト(フォルダは、ODBCデータソースで設定したもの固定)
19) オブジェクトインスペクタ で以下を設定
UniConnection1.ConnectedをFalseにする → DBGridが空になる
UniTabel1.TableNameを空にする
20) フォームにTButtonをドロップ
21) Button1のクリックイベントとして以下を設定。
22) ビルド、実行→ DBGridにCSVの内容が表示される。
procedure TForm1.Button1Click(Sender: TObject);
begin
UniTable1.TableName := 'TEST.CSV';
UniConnection1.Connected := True;
UniTable1.Active := True;
end;
以上です。