FireDACでlibmysql.dllが認識させられない

630 views
Skip to first unread message

太田@Gracix

unread,
Aug 18, 2021, 8:57:30 PM8/18/21
to Japan RAD Studio User Group
お世話になります、太田です。

新しいPCでDelphi 10.4.2(ウェブインストール版)をインストールしています。

Windows 10 Pro(64)
Delphi 10.4.2 Ent(新規)

しかし、旧環境では問題なく動いていたMySQLのDLLが認識させられません。

DLLは「C:\ProgramData\MySQLLib\」に「libmysql5.7.35-x86.dll」「libmysql8.0.26-x64.dll」として、最新版のx86、x64バージョンを入れてあります。

FDDrivers.ini に

[MySQL]
VendorLibWin32=C:\ProgramData\MySQLLib\libmysql5.7.35-x86.dll
VendorLibWin64=C:\ProgramData\MySQLLib\libmysql8.0.26-x64.dll

と書き入れています。


出てくるエラーは下記の通りです。

---------------------------
Fdexplorer
---------------------------
[FireDAC][Phys][MySQL]-314. ベンダ ライブラリ [C:\ProgramData\MySQLLib\libmysql5.7.35-x86.dll] を読み込めません。指定されたモジュールが見つかりません。

ヒント: PATH またはアプリケーションの EXE ディレクトリに含まれているか、x86 ビットであるかを確認してください。.
---------------------------
OK   
---------------------------


やってみたこと

・Delphiのクリーン再インストール
・MySQLサーバー丸ごとのインストール
・VCランタイムの更新(2015、2017、2019)
・MySQL旧バージョン(5.7.29など)のDLLに入れ替え(元の環境では動いていたもの含む)
・Windows/system32やSysWOW64へ入れてみる
・C:のルートへ置いてみる


全てで同じエラーが出ました。

パスは完全に間違いなく、x86とx64を間違っていることもありません。
試しにx86をx64のDLLに入れ替えてみると、エラーは「Library has unsupported architecture [x64]. Required [x86].」と変わります。パスは認識しているようです。


完全にお手上げになっています。

どなたかお助けいただけるでしょうか。


mam

unread,
Aug 19, 2021, 12:09:02 AM8/19/21
to Japan RAD Studio User Group
使用しているのがDelphi10.2Proで申し訳ないですが

TFDConnectionと同じフォーム内に
TFDPhysMySQLDriverLinkをドラッグ&ドロップして
FDPhysMySQLDriverLink1.VendorLib:='DLLへのフルパス';
としてもダメでしょうか。

10.2proでは動作しました。


2021年8月19日木曜日 9:57:30 UTC+9 太田@Gracix:

Kuze

unread,
Aug 19, 2021, 12:12:05 AM8/19/21
to radstu...@googlegroups.com
太田さん

久世です。

MySQLを使用していないので、一般的な意見として記載します。
Win32¥Debug
Win32¥Release
などに、該当のDLLを保存していますでしょうか?

太田@Gracix

unread,
Aug 19, 2021, 6:15:06 AM8/19/21
to Japan RAD Studio User Group
mamさん、アドバイスありがとうございます。
FDPhysMySQLDriverLink1.VendorLib:='DLLへのフルパス'; として、DriverNameを合わせて接続してみましたが、やはり同様のエラーでした。


2021年8月19日木曜日 13:09:02 UTC+9 mam:

太田@Gracix

unread,
Aug 19, 2021, 6:21:37 AM8/19/21
to Japan RAD Studio User Group
久世さん、アドバイスありがとうございます。
こちらを試しましたが、やはり同様のエラーです。

これはもはやWindows自体がおかしい?という状況に陥ってきました。
VirtualBoxで動かしているWindowsなのですが、それにしても謎の動作です。
仮想PCでWindowsが動くのにDLLが動かないなんて聞いたこともありません。

一度Windowsのクリーンインストールから始めてみようと思います。

2021年8月19日木曜日 13:12:05 UTC+9 Kuze:

細川淳

unread,
Aug 19, 2021, 6:49:00 AM8/19/21
to Japan RAD Studio User Group
こんにちは。
細川です。

データベースは全然知識がないので外しているかもしれませんが…
下記の DocWiki にある LIBCRYPTO-1_1-x64.DLL などは使える状態になっているでしょうか?
(IDE から動かす場合は 32bit なので無くても良さそうですが…)

http://docwiki.embarcadero.com/RADStudio/Sydney/ja/MySQL_%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%81%B8%E3%81%AE%E6%8E%A5%E7%B6%9A%EF%BC%88FireDAC%EF%BC%89

太田@Gracix

unread,
Aug 19, 2021, 7:57:58 PM8/19/21
to Japan RAD Studio User Group
細川さん、ありがとうございます。

こちらもexeと同ディレクトリ、system32、sysWOW64、FDDrivers.iniなどいろいろ入れてみたのですが、状況変わらずです・・・

エンバカデロのページで動作実績のある5.7.29-win32も入れてみましたが、状況変わらず。

完全に手詰まりです。


2021年8月19日木曜日 19:49:00 UTC+9 j...@serialgames.co.jp:

上村

unread,
Aug 19, 2021, 8:28:45 PM8/19/21
to Japan RAD Studio User Group
上村です。

Dependencies使ってdllが必要とするライブラリが揃ってるか確認してみたらどうでしょう?
2021年8月20日金曜日 8:57:58 UTC+9 太田@Gracix:

あだち@シンクソフト ML

unread,
Aug 19, 2021, 9:04:52 PM8/19/21
to radstu...@googlegroups.com
あだちです。


PostgreSQLで設定したときに、Vendor DLLが読めなかったときの対応ですので、
参考になるかわかりませんが、この時の設定方法についてです。
ついでに、通常 FDDrivers.ini も使っていません。

Vendor DLLの場所は、FDPhysPgDriverLinkコンポーネントに設定しました。

VendorHome に、DLLのあるフォルダ
VendorLib に、DLLのファイルを設定
で行っています。設定値は、プログラム独自のiniから読み込むようにしてあり
ます


MySQLの場合だと、FDPhysMySQLDriverLinkへの設定になると思います
今回の設定だと
VendorHome = C:\ProgramData\MySQLLib\
32Bitだと
VendorLib = libmysql5.7.35-x86.dll
64Bitだと
VendorLib = libmysql8.0.26-x64.dll
となると思います



On Wed, 18 Aug 2021 17:57:29 -0700 (PDT)
太田@Gracix <taketa...@gmail.com> さんは書きました。:
~~~~
--
https://www.thinksoft.co.jp
ML用 <adac...@thinksoft.co.jp>

太田@Gracix

unread,
Aug 19, 2021, 9:42:21 PM8/19/21
to Japan RAD Studio User Group
上村さん、ありがとうございます。

こちらさっそく試してみました。
ですが、MySQLに関する依存は表示されておりません。またエラー等は表示されていません。
試しにBDS.exeに対してもやってみたのですが、こちらもMySQL関連の項目は出てきませんでした。

動的読み込みのものは表示されないのでしょうか?


2021-08-20_10h41_43.png
2021年8月20日金曜日 9:28:45 UTC+9 上村:

太田@Gracix

unread,
Aug 19, 2021, 9:53:19 PM8/19/21
to Japan RAD Studio User Group
あだちさん、ありがとうございます。

この方法も試しましたが、状況変わらずです。


ただ、もともと動いているマシン(以下 旧マシン)ではFDConnectionはDriverName = MySQL と指定するだけで動いていました。
DLLはSystem32とSysWOW64に入れてあるだけです。

試しに旧マシンでFDPhysMySQLDriverLinkを使いDLLを指定したところ、なぜか「Pathが見つからない」エラーとなりました。
もちろんDLLは新しいものではなく、もともと動いているマシンのDLLをexeディレクトリにコピーしただけです。

---------------------------
エラー
---------------------------
[FireDAC][Phys][MySQL]-314. ベンダ ライブラリ [C:\Users\user\Desktop\aaa\libmysql-x86.dll] を読み込めません。指定されたモジュールが見つかりません。
ヒント: PATH またはアプリケーションの EXE ディレクトリに含まれているか、x86 ビットであるかを確認してください。.
---------------------------
OK   
---------------------------


なにかこの変化で気づかれることはありますでしょうか?



2021年8月20日金曜日 10:04:52 UTC+9 あだち@シンクソフト ML:

太田@Gracix

unread,
Aug 19, 2021, 10:01:19 PM8/19/21
to Japan RAD Studio User Group
PATHが  C:\ProgramData\MySQLLib\ ではなく C:\Users\user\Desktop\aaa\ になっていますが、テストのためです。
DLLは確実に C:\Users\user\Desktop\aaa\libmysql-x86.dll に存在しています。

2021年8月20日金曜日 10:53:19 UTC+9 太田@Gracix:

上村

unread,
Aug 19, 2021, 10:24:08 PM8/19/21
to Japan RAD Studio User Group
上村です。

動的にロードされる物は、表示されないですね。
MySQLのDLLを開いてみたらどうでしょう?
エラーメッセージを見る限りは、MySQLのDLLで何か必要なDLLが無いとかでエラーが出ているように見えるので。

2021年8月20日金曜日 10:42:21 UTC+9 太田@Gracix:

Hiroaki Kitahata

unread,
Aug 19, 2021, 10:28:22 PM8/19/21
to radstu...@googlegroups.com
こんにちは。
北畑と申します。
横から失礼します。

例えば、Firebird を IBX で使う場合、gds32.dll が必要です。
それ以外に、msvcp100.dll msvcr100.dll が必要なのですが、
これらが無いと、gds32.dll が見つからないという趣旨のエラーが出ます。

過去お客様の100台以上のPCに、Firebird を使ったアプリを
インストールしました。
gds32.dll があるのにもかかわらず、無いと言ってくるPCが
2台有りました。原因は上記の dll が無かったことでした。
Firebird のドキュメントにも、これらの dll が必要であるとの記載が
有りました。

今回の MySQL の問題も同様な問題ではないか、と上村さんは仰って
いるのだと思います。
MySQL に必要な dll は公開されているはずですので、それも合わせて
調査されてはいかがでしょう。

以上です。

On Thu, 19 Aug 2021 18:42:21 -0700 (PDT)
Subject: Re: [radstudio-jp:241] FireDACでlibmysql.dllが認識させられない
> --
> このメールは Google グループのグループ「Japan RAD Studio User Group」の登録者に送られています。
> このグループから退会し、グループからのメールの配信を停止するには radstudio-jp...@googlegroups.com にメールを送信してください。
> このディスカッションをウェブ上で閲覧するには、https://groups.google.com/d/msgid/radstudio-jp/1c9c734f-e5f1-4008-8e90-1ee16dac53den%40googlegroups.com にアクセスしてください。

--
Hiroaki Kitahata <kita...@wingcomputer.com>

Hikaru Fukushi

unread,
Aug 19, 2021, 10:50:48 PM8/19/21
to radstu...@googlegroups.com
太田さん、みなさん、こんにちは。福士です。さらに横から失礼します。

> 今回の MySQL の問題も同様な問題ではないか、と上村さんは仰って
> いるのだと思います。

Dependencies
https://github.com/lucasg/Dependencies

というツールでMySQL 8.0.26に含まれるlibmysql.dllを調べてみたところ、
VCRUNTIME140.dll、VCRUNTIME140_1.dll、MSVCP140.dllに依存している
ようで、Microsoft Visual C++ 2015再頒布可能パッケージをインストール
する必要があると思われます。

---
東洋テクニカルシステム株式会社 システム開発部 福士 光
Hikaru Fukushi (Toyo Technical System Inc.)
mailto:fuk...@tts-inc.co.jp

太田@Gracix

unread,
Aug 19, 2021, 10:56:21 PM8/19/21
to Japan RAD Studio User Group
北畑さん、ありがとうございます!

ビンゴでした!!!
上村さんのアドバイスを完全に読み違えておりました。
さっそくMySQLのlibmysql.dllをDependenciesにかけてみたところ、見事にVCランタイムの依存エラーが出ました!


MySQL 64bitの方はMSVCP140.DLLで、インストール済のVC2015で問題ありませんでしたが、
MySQL 32bitの方は最新版でもMSVCP120.DLLで、VC2013を要求していました。

つまりMySQL 32bit DLLを駆動するためにはVC2013が必要だったというオチでした。

ランタイムをインストールし、SysWOW64にlibmysql.dllを入れたところ、
Delphi 10.4.2 でFDConnection.DriverName := MySQL だけで見事に接続できました!!


旧環境は長年使っている環境なので、どこかでVC2013を入れていたので問題がなかったのでしょう。


アドバイスいただけた皆さん、お忙しい中ありがとうございました!



2021-08-20_11h41_22.png


2021年8月20日金曜日 11:28:22 UTC+9 Hiroaki Kitahata:

太田@Gracix

unread,
Aug 19, 2021, 10:59:50 PM8/19/21
to Japan RAD Studio User Group
福士さん、いつもありがとうございます。

ご想像通り、ランタイムエラーでした。
一つ前のメールで内容を送りましたが、32bit版は今でもVC2013を要求するようです。

VC2015-2019のランタイムをインストールしていたので、この問題は完全に想像外でした・・・

2021年8月20日金曜日 11:50:48 UTC+9 Hikaru Fukushi:

太田@Gracix

unread,
Aug 19, 2021, 11:03:20 PM8/19/21
to Japan RAD Studio User Group
上村さん、ありがとうございます。

アドバイスを読み違えておりました。
二つ前のメールで詳細を送りましたが、完全にVCランタイムエラーでした。
解決できました!

2021年8月20日金曜日 11:24:08 UTC+9 上村:
Reply all
Reply to author
Forward
0 new messages