tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルVB6アプリでwin11にすると実行時エラー3078その後
記事No16721
投稿日: 2025/05/21(Wed) 07:23
投稿者はる
魔界の仮面弁士様
以前は色々とありがとうございました。
自分の出来る範囲を時々やっておりましたが正しいか悪いのかは不明ですが
最近なんとなくわかったところは「VB6アプリからサーバーのWin11のPCから
win10PC内のAccess97データーベース(mdb)を見に行くと実行時エラーが出ます
(テーブル・クエリが見つかりません)」は現状ですが。
VBとの互換性か相性なのかと思っていましたがデーターベース内に「メーカーマスタ」
というテーブルがありまして、win11のVB6からメーカーマスタを起動したら正常にパスが通り
アプリが正常起動して内容の読み書きが通常に出来ました。
他のテーブルは漢字が入っていたり(社員マスタ)カタカナの濁点が入っていたり(メーカーデータ)
原因は漢字・濁点が原因ではないかと思いましてwin11PCのVB6が漢字・濁点が認識しないとのか思いましたが
別のネットワークを作ってサーバーもwin10からwin11にしても同じ症状がでましたので
サーバー側にAccess97アプリをインストールしてmdbを開いたところ同じくテーブル内のメーカーマスタだけ
開くのが確認出来ました(他の漢字・濁点混在のテーブルはすべて開きません)
VB6の問題ではなくwin11PCがのAccess97mdb内の漢字・濁点が認識しないのではないかと思います
マイクロソフトコミュニティにも同じような記載があり解決方法の具体策はなく
(古すぎてどうしようもないような記載)諦めるしかないのでしょか?
ちなみにwin11PCでもAccess2003からはAccess97mdbのテーブルはすべて開きます
そこでAccess97のMDBをAccess2003に変換してみてVB6を起動してみると
「実行エラー3343データーベスの形式○○○.mdbを認識出来ません。」のエラー
素人考えで、同じmdbなので開くと思いましたがデーター形式が違うのでしょか?
VB6からAccess2003mdbを開く方法はあるのでしょうか?
よろしくお願いします。

[ツリー表示へ]
タイトルRe: VB6アプリでwin11にすると実行時エラー3078その後
記事No16722
投稿日: 2025/05/28(Wed) 10:31
投稿者魔界の仮面弁士
> win10PC内のAccess97データーベース(mdb)を見に行くと実行時エラーが出ます
mdb ファイルは、ローカルドライブ上に配置して運用してください。

Access はファイル共有型データベースであることから、
共有ネットワーク ドライブ上にある mdb ファイルを
直接扱うことは推奨されません。


> win11のVB6からメーカーマスタを起動したら正常にパスが通り
> アプリが正常起動して内容の読み書きが通常に出来ました。
作成されたアプリケーション固有の事情なので、それが何を意味するのかは分かりませんが、
内部に設定情報があって、それがメーカーマスタを起動したら、最新値に更新されたことで
正しく動作するようになった…ということですか?

元の作りもよく分からない、ソースコード等も公開できない、という状況では
どうにも答えようがありません。mdb か VB6 のいずれも公開できそうには無いですか?


> サーバーもwin10からwin11にしても
サーバー用途での運用時は、Windows 10/11 のソフトウェアライセンス条項にある
 2. インストールおよび使用権
  c. 制限「お客様は次の行為を行うことはできません」
   (v) 「本ソフトウェアをサーバーソフトウェアとして使用すること、もしくは」
に抵触しないようにご注意ください。
第2条 (d) の (iii) 項で許可された範囲で使う分には OK です。


> そこでAccess97のMDBをAccess2003に変換してみてVB6を起動してみると
> 「実行エラー3343データーベスの形式○○○.mdbを認識出来ません。」のエラー
VB6 のリリースは 1998年。サポートしていたのは Access 97 です。
当時は Access 2000 すらまだ無い時期でした。

その後、VB6 Service Pack 4 で Access 2000 に対応しました(Windows ME が VB6 SP5 世代です)。
なお Vista 以降の Windows であれば、Service Pack 6 相当の VB6 ランタイムが含まれています。

2003 を扱えるかどうかは、「その VB6 が、どの方法で mdb を開いているのか」によるわけです。

最新の Service Pack が適用されていると仮定して、
mdb に VB6 から接続するとなると、下記のような選択肢があります。
元プログラムの接続方法を確認できますか?
(今回は mde ではなく mdb とのことなので、Access Runtime での呼び出しは含めていません)

 (一) ADODB (ActiveX Data Object)
 (二) ADODC (ADO データコントロール)
 (三) Data (データ コントロール)
 (四) DAO (Data Access Object)
 (五) RDO (Remote Data Object)
 (六) RDC (リモート データ コントロール)
 (七) ODBCDirect API

可能性が高いのは一か四であろうとは思います。
五は VB6 Enterprise Edition が必要なのでライセンス面でのハードルが高く、
七に至っては、処理が複雑になりすぎるため、普通はまず使われません。


一の場合は、プログラムで指定されている「OLE DB Provider」の切り替えが必要になることがあります。
 Microsoft.Jet.OLEDB.3.51 ⇒ Access 95, Access 97
 Microsoft.Jet.OLEDB.4.0  ⇒ Access 2000, Access 2003
 Microsoft.ACE.OLEDB.12.0 ⇒ Access 2007, Access 2010
 Microsoft.ACE.OLEDB.15.0 ⇒ Access 2013
 Microsoft.ACE.OLEDB.16.0 ⇒ Access 2016
※上位のプロバイダは、下位バージョンの Access も開けますが、逆はできません。

四の場合は、以前回答したように、参照設定している DAO のライブラリバージョンが
 DAO 3.0     ⇒ Access 95
 DAO 3.5     ⇒ Access 97
 DAO 3.6     ⇒ Access 2000, Access 2003
 ACEDAO 12.0 ⇒ Access 2010
などと変わります。

上位のミドルウェアは、下位バージョンの Access データベースファイルを扱えますが、
下位のミドルウェアで、上位バージョンの Access データベースファイルを扱おうとすると、
ファイル形式を認識できず、実行時エラーになってしまうでしょう。

[ツリー表示へ]