ODBCを使用してプログラムファイルフォルダーにあるデータベースから読み取り

StackOverflow https://stackoverflow.com/questions/2707696

質問

プログラムファイルディレクトリのサブフォルダーにデータベースファイルを保存するアプリケーションがあります。これらのファイルは、VistaおよびWindows 7のVirtualStoreにリダイレクトされます。MicrosoftDatarePorts(VB6)を使用してデータベースからのデータを表します。ここまでは順調ですね。

ただし、Crystal Reports XIを使用してデータベースからのデータを表すようになりました。私たちのアイデアは、このデータをプログラムからCRに渡すのではなく、ODBCを介してAAシステムDSNを使用してデータベースからCRを再調整することです。このようにして、ユーザーに独自のレポートを設計する柔軟性をより柔軟に提示したいと考えています。私たちが確実にしたいのは、ユーザーがプログラムをインストールするとき、またはプログラムがCrystalレポートを呼び出すときに、これらのシステムDSNが正しく構成されていることです。

たとえば、システム変数を使用してこれを行うスマートな方法はありますか、OSバージョンをチェックするルーチンを書き込む代わりに、UACがOSで有効になっているかどうか、プログラムファイルフォルダーの書き込み制限が解除されているかどうかなど次に、彼のシステムDSNを適応させて、C: Program Files OurApp Data Folder、またはC: Users Users AppData VirtualStore Program Files OurApp Dataフォルダーのいずれかを指しますか?

まったく異なるアプローチの提案も大歓迎です!

役に立ちましたか?

解決 3

Virtual Storeはすべてを処理しているようです。そのため、データベースが仮想ストアに移動されている場合でも、C: Program Files MyApp Data Mydb.mdbでDSNを露骨に指すことができます。

他のヒント

新しいアプリケーションには、RequestedExecutionLevelを指定するアプリケーションマニフェストが必要です。これにより、プログラムは「Vista Aware」を宣言し、仮想化の試みをバイパスします。

インストール中に、[CommonAppData] Company App Full Fullのようなフォルダーを作成し、このフォルダーにセキュリティを設定して、すべての人(またはユーザー)がフルアクセスできるようにする必要があります。このフォルダーにデータベースを入れます。

MDBの場合、ここでデータベースをドロップできます。クライアント/サーバーデータベースの場合 UDLファイル ここ。また、参照してください ユニバーサルデータリンク(.udl)ファイルを使用します.

ODBCとDSNSは、かなり時代遅れのテクノロジーです。

提案されたアプローチを使用すると、最も古いWin95コンピューター以外のほとんどすべてのもので機能するはずです。

これはアクセスデータベースですか?指定していません。

アクセスデータベースの場合、インストールするときにDSNを特定のデータベースに向ける必要はありません。接続文字列を変更して、実行時に異なるデータベースを指すことができます(詳細)。例えば

Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\mydatabase.mdb;Uid=Admin;Pwd=;

実行時にインストールパスを単に読むことができますか(VB6では App.Path)そして、クリスタルレポートに別の接続文字列を送信しますか?

現行版


あなたはそれを検出したいかもしれません Windowsの電流バージョン システムは実行されています。

これは、あなたが決定するのに役立ちます 正しいパス.

Windowsバージョンを見つける方法、ビルドおよびリビジョン番号?

レジストリキーを読む -

hkey_local_machine software microsoft windows nt currentversion currentBuildnumber
hkey_local_machine software microsoft windows nt currentversion currentversion
hkey_local_machine software microsoft windows nt currentversion editionId
hkey_local_machine software microsoft windows nt currentversion productid hkey_local_machine software microsoft windows nt currentversion buildlabex

CurrentBuildNumberはWindowsビルド番号です。次に、CurrentVersion値はWindowsバージョン、つまりWindows 7、Windows Vista、Windows XPなどのバージョンです。Windows-EditionとProduct-IDを知るためのEditionID、ProductID。

キービルドラベックスには、ビルド番号とリビジョン番号が含まれています。

たとえば、値6001.17387.x86fre.vistasp1_gdr.070927-1921、
最初の4桁はビルド番号、つまり6001と
次の5桁は、Windowsリビジョン番号、つまり17387の略です。
X86は、32ビットオペレーティングシステムを実行していることを示しています。

あなたもこれに興味があるかもしれません:
True Windowsバージョンを検出する方法は?

幸運を!!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top