tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルVB6アプリでwin11にすると実行時エラー3078
記事No16692
投稿日: 2024/09/26(Thu) 18:34
投稿者はる
VB6で作ったアプリでアクセス.mdbのデーターをwin11にすると実行時エラー3078(デーブル・クリエが見つかりません)のエラーで停止してしまします。
パスは通っていると思います
win10パソコンは正常に作動しますがwin11のパソコンはエラーになります
VB6・アクセスの問題では無くwin11にするVB6が正常に作動しないような気がします
VB歴は素人です
よろしくお願いします。

[ツリー表示へ]
タイトルRe: VB6アプリでwin11にすると実行時エラー3078
記事No16693
投稿日: 2024/09/27(Fri) 18:02
投稿者魔界の仮面弁士
> VB6で作ったアプリでアクセス.mdbのデーターをwin11にすると
> 実行時エラー3078(デーブル・クリエが見つかりません)のエラーで停止してしまします。
           「テ」  「クエリ」                  「い」
…というツッコミはさておき。


テーブル名、クエリ名、列名、フォーム名などに
「半角カナの濁音または半濁音」が含まれていないでしょうか。

過去に Win10 において、1909 → 2004(20H1)/20H2 のバージョンアップ時に
NLS バージョンが 6.2 から 6.3 に変更されたことで、そうした問題が報告されています。
あるいは「長音記号」もトラブルの原因になりやすいので注意。

https://hatenachips.blog.fc2.com/blog-entry-455.html
https://learn.microsoft.com/ja-jp/troubleshoot/windows/win32/half-width-full-width-katakana-hiragana-characters
https://officesupportjp.github.io/blog/cl0m69xvc002u4cvsgc7a3bfp/
https://qiita.com/ohsawak/items/b6809ef25f74598d2315
https://mitomoha.hatenablog.com/entry/2020/11/17/010334
https://www.pwing.com/windows-10-%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3-2004-20h1-20h2-%E4%B8%8A%E3%81%A7-%E5%8D%8A%E8%A7%92%E3%82%AB%E3%83%8A%E3%81%AE%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%82%92%E5%90%AB/


今のところ、上記が原因かまでは分かりませんんが、
まずは Windows Update 等を行ってランタイム等を最新版にしてみて改善するかどうかを確認し、
それでもだめなら、EXE を互換モードで実行して改善しないかを試してみて、
それでもだめなら HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\Sorting\Versions
の(既定)を変更してみて改善するか試してみて、
それでもだめならば、SQL 中のテーブル名や列名を [ と ] で囲むようにしてみる
…というのはどうでしょう。

あるいは、問題の発生する日本語のアイテムを、ローマ字表記に全面的に改めるなど。(今更無理かな)

参考までに手元の環境では、上記レジストリ値が
 Win7x86    → 00060101.00060101 (NLS 6.1)
 Win10 22H2 → 00060305 (NLS 6.3)
 Win11 23H2 → 00060403 (NLS 6.4)
になっていました。

[ツリー表示へ]
タイトルRe^2: VB6アプリでwin11にすると実行時エラー3078
記事No16694
投稿日: 2024/09/29(Sun) 17:25
投稿者はる
> > VB6で作ったアプリでアクセス.mdbのデーターをwin11にすると
> > 実行時エラー3078(デーブル・クリエが見つかりません)のエラーで停止してしまします。
>            「テ」  「クエリ」                  「い」
> …というツッコミはさておき。
>
>
> テーブル名、クエリ名、列名、フォーム名などに
> 「半角カナの濁音または半濁音」が含まれていないでしょうか。
>
> 過去に Win10 において、1909 → 2004(20H1)/20H2 のバージョンアップ時に
> NLS バージョンが 6.2 から 6.3 に変更されたことで、そうした問題が報告されています。
> あるいは「長音記号」もトラブルの原因になりやすいので注意。
>
> https://hatenachips.blog.fc2.com/blog-entry-455.html
> https://learn.microsoft.com/ja-jp/troubleshoot/windows/win32/half-width-full-width-katakana-hiragana-characters
> https://officesupportjp.github.io/blog/cl0m69xvc002u4cvsgc7a3bfp/
> https://qiita.com/ohsawak/items/b6809ef25f74598d2315
> https://mitomoha.hatenablog.com/entry/2020/11/17/010334
> https://www.pwing.com/windows-10-%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3-2004-20h1-20h2-%E4%B8%8A%E3%81%A7-%E5%8D%8A%E8%A7%92%E3%82%AB%E3%83%8A%E3%81%AE%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%82%92%E5%90%AB/
>
>
> 今のところ、上記が原因かまでは分かりませんんが、
> まずは Windows Update 等を行ってランタイム等を最新版にしてみて改善するかどうかを確認し、
> それでもだめなら、EXE を互換モードで実行して改善しないかを試してみて、
> それでもだめなら HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\Sorting\Versions
> の(既定)を変更してみて改善するか試してみて、
> それでもだめならば、SQL 中のテーブル名や列名を [ と ] で囲むようにしてみる
> …というのはどうでしょう。
>
> あるいは、問題の発生する日本語のアイテムを、ローマ字表記に全面的に改めるなど。(今更無理かな)
>
> 参考までに手元の環境では、上記レジストリ値が
>  Win7x86    → 00060101.00060101 (NLS 6.1)
>  Win10 22H2 → 00060305 (NLS 6.3)
>  Win11 23H2 → 00060403 (NLS 6.4)
> になっていました。

ご返答、ご指導ありがとうございます。
プログラム初心者ですみません
VB6のテーブル名・クエリは多分漢字表記と思います(確認します)
VB6のランタイムも最新版を探して入れましたが同じです
EXEも互換性の欄にある全てを試しましたがやはり同じです
レジストリ変更もやってみます(新しく導入したPCで何も入っていないのでフリーズも問題無いです)
取り急ぎ確認し状況を連絡します
ありがとうございます。

[ツリー表示へ]
タイトルRe^3: VB6アプリでwin11にすると実行時エラー3078
記事No16695
投稿日: 2024/10/01(Tue) 07:57
投稿者はる
> > > VB6で作ったアプリでアクセス.mdbのデーターをwin11にすると
> > > 実行時エラー3078(デーブル・クリエが見つかりません)のエラーで停止してしまします。
> >            「テ」  「クエリ」                  「い」
> > …というツッコミはさておき。
> >
> >
> > テーブル名、クエリ名、列名、フォーム名などに
> > 「半角カナの濁音または半濁音」が含まれていないでしょうか。
> >
> > 過去に Win10 において、1909 → 2004(20H1)/20H2 のバージョンアップ時に
> > NLS バージョンが 6.2 から 6.3 に変更されたことで、そうした問題が報告されています。
> > あるいは「長音記号」もトラブルの原因になりやすいので注意。
> >
> > https://hatenachips.blog.fc2.com/blog-entry-455.html
> > https://learn.microsoft.com/ja-jp/troubleshoot/windows/win32/half-width-full-width-katakana-hiragana-characters
> > https://officesupportjp.github.io/blog/cl0m69xvc002u4cvsgc7a3bfp/
> > https://qiita.com/ohsawak/items/b6809ef25f74598d2315
> > https://mitomoha.hatenablog.com/entry/2020/11/17/010334
> > https://www.pwing.com/windows-10-%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3-2004-20h1-20h2-%E4%B8%8A%E3%81%A7-%E5%8D%8A%E8%A7%92%E3%82%AB%E3%83%8A%E3%81%AE%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%82%92%E5%90%AB/
> >
> >
> > 今のところ、上記が原因かまでは分かりませんんが、
> > まずは Windows Update 等を行ってランタイム等を最新版にしてみて改善するかどうかを確認し、
> > それでもだめなら、EXE を互換モードで実行して改善しないかを試してみて、
> > それでもだめなら HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\Sorting\Versions
> > の(既定)を変更してみて改善するか試してみて、
> > それでもだめならば、SQL 中のテーブル名や列名を [ と ] で囲むようにしてみる
> > …というのはどうでしょう。
> >
> > あるいは、問題の発生する日本語のアイテムを、ローマ字表記に全面的に改めるなど。(今更無理かな)
> >
> > 参考までに手元の環境では、上記レジストリ値が
> >  Win7x86    → 00060101.00060101 (NLS 6.1)
> >  Win10 22H2 → 00060305 (NLS 6.3)
> >  Win11 23H2 → 00060403 (NLS 6.4)
> > になっていました。
>
> ご返答、ご指導ありがとうございます。
> プログラム初心者ですみません
> VB6のテーブル名・クエリは多分漢字表記と思います(確認します)
> VB6のランタイムも最新版を探して入れましたが同じです
> EXEも互換性の欄にある全てを試しましたがやはり同じです
> レジストリ変更もやってみます(新しく導入したPCで何も入っていないのでフリーズも問題無いです)
> 取り急ぎ確認し状況を連絡します
> ありがとうございます。
魔界の仮面弁士さま お世話になります。
エラー内容は「実行時エラー '3078':
入力テーブルまたはクエリー '納品データ' は見つかりませんでした。
そのテーブルやクエリーが存在しているか、または正しく入力されているかを確認してください。」
で漢字+全角カタカナ濁音で問題がないと思います
レジストリ値も参考を見ながら色々と替えても同じです
プログラムは知人に作ってもらったものでその人には連絡が取れない状態です
ソースはあり簡単な変更(表示文字・数字等)なら出来る程度でほぼ初心者です。
「テーブル名や列名を [ と ] で囲むようにしてみる」
ですがよく解りません。すみません。
なんとなくですがwin10のVB6アプリからは'納品データ'は見れるのにwin11のVB6アプリからは見れないのはwin11にした場合にVB6アプリがアクセスmdb内の'納品データ'を違う認識で見ているのでしょうか?
また、他複数PCにそれぞれVBのEXEがあり単独で起動していますがネットワークから他のPC内のVBEXEを起動すると同様な実行時エラー '3078'が出ます。
win11PCのEXEプロパティを見ると場所はwin11PCのEXEになっており関係性がないと思いますが気になります
他、コミュニティ等に相談しましても専門的で自分の操作できる範囲外になっています
「サポート外なので新しいのに更新を」とのご指摘も多くありますが使い勝手がとても良く簡単に修正できればと思います
よろしくお願いします。

[ツリー表示へ]
タイトルRe^4: VB6アプリでwin11にすると実行時エラー3078
記事No16696
投稿日: 2024/10/01(Tue) 15:30
投稿者魔界の仮面弁士
> > > テーブル名、クエリ名、列名、フォーム名などに
> > > 「半角カナの濁音または半濁音」が含まれていないでしょうか。
> > > あるいは「長音記号」もトラブルの原因になりやすいので注意。

と書きましたが
> エラー内容は「実行時エラー '3078':
> 入力テーブルまたはクエリー '納品データ' は見つかりませんでした。
まさに、「濁点」を含むオブジェクトではありますね。

前回紹介した URL にもあるように、NLS の更新によって半角カナ/全角カナの
判断ルールが変更されたため、それが原因で引き起こされている可能性があります。
https://qiita.com/ohsawak/items/b6809ef25f74598d2315



> 「テーブル名や列名を [ と ] で囲むようにしてみる」
選択クエリを
 SELECT * FROM 納品データ
ではなく
 SELECT * FROM [納品データ]
のようにする、ということです。
元のテーブル名や列名が、半角カナなのか全角カナなのかも確認を。


また、上記 URL においては、Recordset や QueryDefs のコレクション メンバーにアクセスする際は、
 rs!フィールド名1.Value
ではなく、
 rs![フィールド名1].Value
のように、角括弧で囲むという方法が示されていますが、
この方法だとオートコレクトの影響を受ける可能性があります。
(先の URL でも、オートコレクトの影響を受けるようになってしまったとの記載がありますね)

そのため、そもそも "!" によるコレクション メンバー アクセス演算子を使うのではなく、
 rs("フィールド名1").Value
 rs.Fields("フィールド名1").Value
 rs.Fields.Item("フィールド名1").Value
のような、引数付きプロパティによる表記を用いた方が安全です。


> ネットワークから他のPC内のVBEXEを起動すると同様な実行時エラー '3078'が出ます。
以下、本題からは外れますが:

Jet/ACEDAO エンジンの特性上、mdb ファイルはネットワーク共有で使うべきではありません。
ただし、ネットワーク上に置いた EXE をローカル PC から実行し、
その EXE が、実行したローカル上にある mdb ファイルを読み取る分には一応 OK 。

[ツリー表示へ]
タイトルRe^5: VB6アプリでwin11にすると実行時エラー3078
記事No16697
投稿日: 2024/10/02(Wed) 18:25
投稿者はる
> > > > テーブル名、クエリ名、列名、フォーム名などに
> > > > 「半角カナの濁音または半濁音」が含まれていないでしょうか。
> > > > あるいは「長音記号」もトラブルの原因になりやすいので注意。
>
> と書きましたが
> > エラー内容は「実行時エラー '3078':
> > 入力テーブルまたはクエリー '納品データ' は見つかりませんでした。
> まさに、「濁点」を含むオブジェクトではありますね。
>
> 前回紹介した URL にもあるように、NLS の更新によって半角カナ/全角カナの
> 判断ルールが変更されたため、それが原因で引き起こされている可能性があります。
> https://qiita.com/ohsawak/items/b6809ef25f74598d2315
>
>
>
> > 「テーブル名や列名を [ と ] で囲むようにしてみる」
> 選択クエリを
>  SELECT * FROM 納品データ
> ではなく
>  SELECT * FROM [納品データ]
> のようにする、ということです。
> 元のテーブル名や列名が、半角カナなのか全角カナなのかも確認を。
>
>
> また、上記 URL においては、Recordset や QueryDefs のコレクション メンバーにアクセスする際は、
>  rs!フィールド名1.Value
> ではなく、
>  rs![フィールド名1].Value
> のように、角括弧で囲むという方法が示されていますが、
> この方法だとオートコレクトの影響を受ける可能性があります。
> (先の URL でも、オートコレクトの影響を受けるようになってしまったとの記載がありますね)
>
> そのため、そもそも "!" によるコレクション メンバー アクセス演算子を使うのではなく、
>  rs("フィールド名1").Value
>  rs.Fields("フィールド名1").Value
>  rs.Fields.Item("フィールド名1").Value
> のような、引数付きプロパティによる表記を用いた方が安全です。
>
>
> > ネットワークから他のPC内のVBEXEを起動すると同様な実行時エラー '3078'が出ます。
> 以下、本題からは外れますが:
>
> Jet/ACEDAO エンジンの特性上、mdb ファイルはネットワーク共有で使うべきではありません。
> ただし、ネットワーク上に置いた EXE をローカル PC から実行し、
> その EXE が、実行したローカル上にある mdb ファイルを読み取る分には一応 OK 。

早々ありがとうございます。
ソース内の変更は自信がありませんがこのへんがmdbを見ているのかなとおもいます
「 Case PROG_NOHIN:
            form1.Caption = "納品書入力"
            Set RS_D = DB.OpenRecordset("納品データ", dbOpenDynaset)
            Set RS_MD = DB.OpenRecordset("納品明細データ", dbOpenDynaset)
            lblLabels(1).Visible = False
            lblLabels(2).Visible = False
            lblLabels(7).Visible = False
            txtUdate.Visible = False
            cboJyoken.Visible = False
            cboKigen.Visible = False
            cmdNohin.Visible = False
このところでしょうか?
よろしくお願いします。

[ツリー表示へ]
タイトルRe^6: VB6アプリでwin11にすると実行時エラー3078
記事No16698
投稿日: 2024/10/02(Wed) 20:16
投稿者魔界の仮面弁士
> ソース内の変更は自信がありませんがこのへんがmdbを見ているのかなとおもいます

まずは、プログラムから読み取っている「mdb ファイル」を
Microsoft Access で開いてみてください。

そのファイルは、Access 2002-2003 形式でしょうか。それとも Access 2000 形式でしょうか。
Access のバージョンにもよりますが、タイトルバーに形式が表示されると思います。
(Access 97 以下の形式の mdb の場合、最近のバージョンの Access だと開けない可能性があります)


また、そのファイルの照合順序(並び順序)が何になっているかも確認してみてください。
プログラムからであれば、『MsgBox DB.CollatingOrder』で確認できると思います。
戻り値は数字で表示されると思いますが、その値から
  1041 なら「日本語 - レガシー」dbSortJapanese
 66577 なら「日本語 Unicode - レガシー」
  1033 なら「一般 - レガシー」dbSortGeneral
などといったことが分かります。
https://learn.microsoft.com/ja-jp/office/client-developer/access/desktop-database-reference/database-collatingorder-property-dao


照合順序に関する話題は過去にもありましたが、既にすべてリンク切れのようです。無念。
https://hanatyan.sakura.ne.jp/logbbs1/wforum.cgi?mode=allread&no=7611&page=0
https://hanatyan.sakura.ne.jp/logbbs/wforum.cgi?mode=allread&no=9899&page=0



Access から開くことができるのであれば、そもそも「納品データ」というテーブル(もしくは選択クエリー)が
存在しているかを確認してみてください。カタカナの全角半角の違いを区別する環境と
区別しない環境があるようなので、本当に全角カナであるのかも注意が必要です。

もしも Access を使わずに、プログラムから名前を列挙する場合には
 Dim t As TableDef
 For Each t In DB.TableDefs
  Debug.Print "[" & t.Name & "]"
 Next
とか
 Dim q As QueryDef
 For Each q In DB.QueryDefs
  Debug.Print "[" & q.Name & "]Type=" & q.Type
 Next
などのコードで確認できるかと思います。

[ツリー表示へ]
タイトルRe^7: VB6アプリでwin11にすると実行時エラー3078
記事No16699
投稿日: 2024/10/04(Fri) 18:19
投稿者はる
> > ソース内の変更は自信がありませんがこのへんがmdbを見ているのかなとおもいます
>
> まずは、プログラムから読み取っている「mdb ファイル」を
> Microsoft Access で開いてみてください。
>
> そのファイルは、Access 2002-2003 形式でしょうか。それとも Access 2000 形式でしょうか。
> 『MsgBox DB.CollatingOrder』にもよりますが、タイトルバーに形式が表示されると思います。
> (Access 97 以下の形式の mdb の場合、最近のバージョンの Access だと開けない可能性があります)
>
>
> また、そのファイルの照合順序(並び順序)が何になっているかも確認してみてください。
> プログラムからであれば、『MsgBox DB.CollatingOrder』で確認できると思います。
> 戻り値は数字で表示されると思いますが、その値から
>   1041 なら「日本語 - レガシー」dbSortJapanese
>  66577 なら「日本語 Unicode - レガシー」
>   1033 なら「一般 - レガシー」dbSortGeneral
> などといったことが分かります。
> https://learn.microsoft.com/ja-jp/office/client-developer/access/desktop-database-reference/database-collatingorder-property-dao
>
>
> 照合順序に関する話題は過去にもありましたが、既にすべてリンク切れのようです。無念。
> https://hanatyan.sakura.ne.jp/logbbs1/wforum.cgi?mode=allread&no=7611&page=0
> https://hanatyan.sakura.ne.jp/logbbs/wforum.cgi?mode=allread&no=9899&page=0
>
>
>
> Access から開くことができるのであれば、そもそも「納品データ」というテーブル(もしくは選択クエリー)が
> 存在しているかを確認してみてください。カタカナの全角半角の違いを区別する環境と
> 区別しない環境があるようなので、本当に全角カナであるのかも注意が必要です。
>
> もしも Access を使わずに、プログラムから名前を列挙する場合には
>  Dim t As TableDef
>  For Each t In DB.TableDefs
>   Debug.Print "[" & t.Name & "]"
>  Next
> とか
>  Dim q As QueryDef
>  For Each q In DB.QueryDefs
>   Debug.Print "[" & q.Name & "]Type=" & q.Type
>  Next
> などのコードで確認できるかと思います。

お世話になります。
ご回答ありがとうございます。
Access 97 と思います 「データベース (Access 97 ファイル形式)」記載があります
オブジェクト内のテーブル内の名前は「納品データ」になっております(テーブル内文字をコピーてみましたので全角カナになっていると思います)
クエリ内には「納品データ」はありません
ファイルの照合順序は難しくてわかりません(すみません)
違うかもしれませんがAccessファイルのオプション内で「新規データベースの並び順序(N):」のセレクトで「日本語」
になっています。
よろしくお願いします。

[ツリー表示へ]
タイトルRe^8: VB6アプリでwin11にすると実行時エラー3078
記事No16700
投稿日: 2024/10/07(Mon) 14:18
投稿者魔界の仮面弁士
どこに問題があるのか、まだ何とも言えませんが、元のソースが
相当古い環境で作られているようなので、現行環境での動作を保証するのが
だんだんと難しくなってきていますね。


> Access 97 と思います 「データベース (Access 97 ファイル形式)」記載があります
Access 97 というと、世代的には VB5 時代ですね。
(VB6 は、Service Pack 4 以降で Access 2000 形式に対応しました)

97 形式を開けるということは、Access 2013 未満のバージョンをお使いのようですが、
手元にある Microsoft Access は、どのバージョンですか?

2003 以下の場合は[ヘルプ]-[バージョン情報]から、
2007 以降ではファイルメニューの[アカウント]から確認できます。
https://tasukete-access.com/2023/06/21/accessintro_version/

また、実行環境の Windows 11 のバージョンも教えてください。
([Win]+[R] 後に "winver" と書いて OK を押すと、バージョンが表示されます)

※VB6 アプリの実行環境と、Access のインストールしてある PC が異なる場合は、
 両方の OS バージョンを確認させてください。


> オブジェクト内のテーブル内の名前は「納品データ」になっております
> (テーブル内文字をコピーてみましたので全角カナになっていると思います)
Access で確認した mdb 内には、テーブル(もしくはクエリ)がある状態で、
フォーム / レポート / モジュール は存在しない状態になっているでしょうか。


> ファイルの照合順序は難しくてわかりません(すみません)
> 違うかもしれませんがAccessファイルのオプション内で「新規データベースの並び順序(N):」のセレクトで「日本語」
> になっています。
たしかにそれも照合順序なのですが、そこで確認できるのは、
「新しく mdb ファイルを作成したときの設定」なのです。

現在の mdb ファイルの設定内容を確認するための画面は存在しませんので、
前回の回答のとおり、プログラムから確認する必要があります。


mdb の照合順序を VB6 側で確認する場合は、既存の
 Set RS_D = DB.OpenRecordset("納品データ", dbOpenDynaset)
の直前に
 MsgBox DB.CollatingOrder
を挿入して実行してみてください。


照合順序を Access 側で確認する場合は、[Alt]+[F11]などで VBA 開発画面に切り替えて
[Ctrl]+[G] で表示される「イミディエイト」ペイン上に
 Debug.Print CodeDb.CollatingOrder
と書いて Enter で実行してみてください。


他にも確認しておきたい点があります。

Access VBA の開発画面で [ツール]-[参照設定]
VB6 のメニューで [プロジェクト]-[参照設定]
をそれぞれ選択してみてください。

幾つかのチェックボックスが並んでいると思いますが、
選択された項目の中に「参照不可」と表示されているライブラリはありませんか?
(参照不可となっている項目が無いなら OK です)


両方ともに参照不可が無いことを確認したら、
さらに VB6 側の参照設定画面を見てください。チェックされた項目のなかに
 ・Microsoft DAO {バージョン番号} Object Library
もしくは
 ・Microsoft Office {バージョン番号} Access database engine Object
のいずれか(もしくは両方)があると思います。その項目に書かれているバージョン番号を教えてください。


--- 以下蛇足 ---

話を聞く限り、相当古いシステムのようなので、現行環境で動かすとなると、
色々とバージョン依存性に気を配らないといけなさそうです。

Access 95 形式の .mdb は、DAO 3.0 が使われます。 (Jet Database Engine 3.0)
Access 97 形式の .mdb は、DAO 3.5 が使われます。 (Jet Database Engine 3.5 / 3.51 / 3.52)
Access 2000 と 2003 では、DAO 3.6 が使われます。 (Jet Database Engine 4.0 / 4.0 Service Pack 1〜8)
Access 2007 以降では .mdb の代わりに ACEDAO が使われます。(Access Database Engine 12.0 / 14.0 / 15.0 / 16.0 )

・Access 2010 のデータベースエンジン(12.0)は、Access 1.0 / 2.0 の .mdb をサポートしません。
・Access 2013 のデータベースエンジン(14.0)は、Access 95 / 97 の .mdb をサポートしません。

[ツリー表示へ]
タイトルRe^9: VB6アプリでwin11にすると実行時エラー3078
記事No16703
投稿日: 2024/10/08(Tue) 13:36
投稿者魔界の仮面弁士
追記:

> どこに問題があるのか、まだ何とも言えませんが、元のソースが
> 相当古い環境で作られているようなので、現行環境での動作を保証するのが
> だんだんと難しくなってきていますね。

まずは問題点を切り分けないと対策も打てないので、とにかく調査が先決ですね。
リンクテーブルなどを使っている場合は、それに関する情報も提供してみてください。


(1) 依存コンポーネントの不足の可能性
 → No.16700 の手順に従い、参照設定に問題が無いか確認してください。(※VB6 開発環境が必要)

(2) 照合順序の問題
 → No.16700 の手順に従い、DAO で CollatingOrder プロパティを参照して確認してください。
   VB6 または Access が必要ですが、それらが無ければ VBScript 等で試すこともできます。

(3) mdb 破損の可能性
 → これは実物を見てみないと分からないかも。ファイルを共有することは可能でしょうか?
   あるいは新規 mdb を作成して、そこに元のmdbのテーブル等をインポートしてみると回復するかも?

(4) 環境依存性
 → 別のWin11でも動かなかったのでしょうか?
   別のWin11で動いた場合は、OS や Access の修復セットアップ等で回復しませんか?

(5) VB6 ソースを修正してリコンパイルしてみるとどうなるか?
 → VB6の開発環境が必要ですが、たとえば
    Set RS_D = DB.OpenRecordset("納品データ", dbOpenDynaset)
   のかわりに
    Set RS_D = DB.TableDefs("納品データ").OpenRecordset(dbOpenDynaset)
   あるいは
    Set RS_D = DB.TableDefs( 該当テーブルを表す整数値 ).OpenRecordset(dbOpenDynaset)
   だとどうなるのか。(※これで該当する場合、mdb の破損か、NLS バージョン差異が疑われます)

(6) 実際、VB6 や Access VBA からは、そのテーブルはどう見えているのか?
 → No.16698 の For Each のソースを試してみましょう。
  少なくとも Access はお持ちのようなので、Access VBA でその mdb を開いて
  先のソースの変数「DB」の部分を、「CodeDb」に書き換えれば実行できるはずです。
  イミディエイトに "[納品データ]" という文字列が現れるか否かが肝となります。

[ツリー表示へ]
タイトルRe^10: VB6アプリでwin11にすると実行時エラー3078
記事No16713
投稿日: 2024/10/20(Sun) 13:19
投稿者はる
> 追記:
>
> > どこに問題があるのか、まだ何とも言えませんが、元のソースが
> > 相当古い環境で作られているようなので、現行環境での動作を保証するのが
> > だんだんと難しくなってきていますね。
>
> まずは問題点を切り分けないと対策も打てないので、とにかく調査が先決ですね。
> リンクテーブルなどを使っている場合は、それに関する情報も提供してみてください。
>
>
> (1) 依存コンポーネントの不足の可能性
>  → No.16700 の手順に従い、参照設定に問題が無いか確認してください。(※VB6 開発環境が必要)
>
> (2) 照合順序の問題
>  → No.16700 の手順に従い、DAO で CollatingOrder プロパティを参照して確認してください。
>    VB6 または Access が必要ですが、それらが無ければ VBScript 等で試すこともできます。
>
> (3) mdb 破損の可能性
>  → これは実物を見てみないと分からないかも。ファイルを共有することは可能でしょうか?
>    あるいは新規 mdb を作成して、そこに元のmdbのテーブル等をインポートしてみると回復するかも?
>
> (4) 環境依存性
>  → 別のWin11でも動かなかったのでしょうか?
>    別のWin11で動いた場合は、OS や Access の修復セットアップ等で回復しませんか?
>
> (5) VB6 ソースを修正してリコンパイルしてみるとどうなるか?
>  → VB6の開発環境が必要ですが、たとえば
>     Set RS_D = DB.OpenRecordset("納品データ", dbOpenDynaset)
>    のかわりに
>     Set RS_D = DB.TableDefs("納品データ").OpenRecordset(dbOpenDynaset)
>    あるいは
>     Set RS_D = DB.TableDefs( 該当テーブルを表す整数値 ).OpenRecordset(dbOpenDynaset)
>    だとどうなるのか。(※これで該当する場合、mdb の破損か、NLS バージョン差異が疑われます)
>
> (6) 実際、VB6 や Access VBA からは、そのテーブルはどう見えているのか?
>  → No.16698 の For Each のソースを試してみましょう。
>   少なくとも Access はお持ちのようなので、Access VBA でその mdb を開いて
>   先のソースの変数「DB」の部分を、「CodeDb」に書き換えれば実行できるはずです。
>   イミディエイトに "[納品データ]" という文字列が現れるか否かが肝となります。
魔界の仮面弁士さま
お世話になります。
色々とご指南ありがとうございます。
最初から一つずつ再確認しながらやってみましたが素人が出来る範囲内では変わりませんでした
ソースコードの変更はやはり自身が無いためやっておりません
ご指摘の通りVB や Access がかなり古いと思いますので解析は大変と思います
素人ながら簡単に作動できればと安易に思っていましたが一連の流れからかなりやっかいと理解しました
セキュリティー、今後同様な問題等でVBに執着しなくても良いのかなと思います
とりあえず現状他win10PCで作業出来ているいますので困っていませんので少し時間をかけてご指示頂いた所をやってみたいと思います
よろしくお願いいたします。

[ツリー表示へ]
タイトルRe^4: VB6アプリでwin11にすると実行時エラー3078
記事No16701
投稿日: 2024/10/07(Mon) 18:54
投稿者魔界の仮面弁士
> > > それでもだめなら、EXE を互換モードで実行して改善しないかを試してみて、
> なんとなくですがwin10のVB6アプリからは'納品データ'は見れるのにwin11のVB6アプリからは見れないのはwin11にした場合にVB6アプリがアクセスmdb内の'納品データ'を違う認識で見ているのでしょうか?


そういえば、先の回答で述べた『互換モード』は試してみましたか?

EXE ファイルのショートカットのプロパティを開いて、
[互換性]タブで、互換モードを Windows 8 や Windows XP などといった
下位の OS に合わせてみるということです。

[ツリー表示へ]
タイトルRe^5: VB6アプリでwin11にすると実行時エラー3078
記事No16702
投稿日: 2024/10/08(Tue) 07:38
投稿者はる
> > > > それでもだめなら、EXE を互換モードで実行して改善しないかを試してみて、
> > なんとなくですがwin10のVB6アプリからは'納品データ'は見れるのにwin11のVB6アプリからは見れないのはwin11にした場合にVB6アプリがアクセスmdb内の'納品データ'を違う認識で見ているのでしょうか?
>
>
> そういえば、先の回答で述べた『互換モード』は試してみましたか?
>
> EXE ファイルのショートカットのプロパティを開いて、
> [互換性]タブで、互換モードを Windows 8 や Windows XP などといった
> 下位の OS に合わせてみるということです。
魔界の仮面弁士さま
お世話になります。
互換モードは不具合が出てすぐにやりました。
他のパソコン(win10)は全て互換モードWindows XP (Service Pack 3)にしてあるので
最初に設定しましたが変わりないのでスクロールにある全てのOSを互換モードで試しましたが
やはり同じでした。
「互換性のトラブルシューティング ツールの実行」も試しましたがだめでした
まえに教えて頂いた全角カナ濁点が気になります

よろしくお願いします。

[ツリー表示へ]