none
CDaoWorkspace::CompactDatabase に他国語や特殊文字を使うと Exceptionがでるのを回避したい。

    質問

  • VS2010 MFCで開発をしています。

    CDaoWorkspace::CompactDatabase で
    第2引数にハングル語や中国語や特殊文字、第3引数には dbLangGeneral入っていると、"ファイル名が正しくありません"とExceptionが出ます。

    そこでご質問です、
    ドキュメントを見るとdbLangGeneralには日本語はないのですが、日本語を使っても Exceptionが出ないで、
    ハングル/中国語/などを使うとExceptionが出ます。

    出来ればファイル名の言語に依存しないでCompactDatabaseを使いたいのですが、

    これを回避する方法がありましたらご指南ください。

    よろしくお願いします。

    2017年12月19日 11:58

回答

  • プロジェクトのプロパティで「Unicode 文字セットを使用する」と設定していても、ご質問のようなエラーが表示されるようですね。

    対象のデータベースファイルを一時フォルダーの半角英数字のファイル名にコピーし(データベースファイルのリネームが可能なら半角英数字ファイルへのリネームでもよいかもしれません)、そこで CompactDatabase を行った後、元の対象のファイル名へ戻すのはいかがでしょうか?

    2017年12月19日 13:13
  • ドキュメントを見るとdbLangGeneralには日本語はないのですが、日本語を使っても Exceptionが出ないで、
    ハングル/中国語/などを使うとExceptionが出ます。

    その手の現象が出るのは、内部で MBCS にしてしまっているケースです。(今回の例で言えば、DAO の中で)
    地域と言語の設定で「Unicode 非対応のプログラムの言語」を「日本語」以外に設定した後、日本語でもエラーが出るなら 100% そうでしょう。

    DAO は開発が終わって 10 年以上経っているので、kenjinote さんが言われているように、運用で回避するしかないかと。
    (英数だけの一時ファイルで処理した後に、リネームするなど)

    https://msdn.microsoft.com/ja-jp/library/ms810810.aspx#mdac%20technologies%20road%20map%20old_topic9

    データ アクセス オブジェクト (DAO): DAO は JET (Access) データベースへのアクセスを提供します。この API は、Microsoft Visual BasicR、Microsoft Visual C++R およびスクリプト言語から使用できます。これは、Microsoft Office 2000 と Office XP に含まれていました。DAO 3.6 が、このテクノロジの最後のバージョンです。これは、64 ビット Windows オペレーティング システムでは提供されない予定です。

    ※OfficeXP は 2001 年発売

    2017年12月19日 13:27
    モデレータ

すべての返信

  • プロジェクトのプロパティで「Unicode 文字セットを使用する」と設定していても、ご質問のようなエラーが表示されるようですね。

    対象のデータベースファイルを一時フォルダーの半角英数字のファイル名にコピーし(データベースファイルのリネームが可能なら半角英数字ファイルへのリネームでもよいかもしれません)、そこで CompactDatabase を行った後、元の対象のファイル名へ戻すのはいかがでしょうか?

    2017年12月19日 13:13
  • ドキュメントを見るとdbLangGeneralには日本語はないのですが、日本語を使っても Exceptionが出ないで、
    ハングル/中国語/などを使うとExceptionが出ます。

    その手の現象が出るのは、内部で MBCS にしてしまっているケースです。(今回の例で言えば、DAO の中で)
    地域と言語の設定で「Unicode 非対応のプログラムの言語」を「日本語」以外に設定した後、日本語でもエラーが出るなら 100% そうでしょう。

    DAO は開発が終わって 10 年以上経っているので、kenjinote さんが言われているように、運用で回避するしかないかと。
    (英数だけの一時ファイルで処理した後に、リネームするなど)

    https://msdn.microsoft.com/ja-jp/library/ms810810.aspx#mdac%20technologies%20road%20map%20old_topic9

    データ アクセス オブジェクト (DAO): DAO は JET (Access) データベースへのアクセスを提供します。この API は、Microsoft Visual BasicR、Microsoft Visual C++R およびスクリプト言語から使用できます。これは、Microsoft Office 2000 と Office XP に含まれていました。DAO 3.6 が、このテクノロジの最後のバージョンです。これは、64 ビット Windows オペレーティング システムでは提供されない予定です。

    ※OfficeXP は 2001 年発売

    2017年12月19日 13:27
    モデレータ
  • kenjinoteさん、Azuleanさん

    ご回答ありがとうございます。

    DAOを使っている限り仕方がない事だと理解しました。

    とりあえず半角英語でこのメソッドを使って、最後にRenameを検討します。

    また、何かありましたら
    ご教授ください

    2017年12月19日 13:43