ODBCを使用してプログラムファイルフォルダーにあるデータベースから読み取り
-
01-10-2019 - |
質問
プログラムファイルディレクトリのサブフォルダーにデータベースファイルを保存するアプリケーションがあります。これらのファイルは、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バージョンを検出する方法は?
幸運を!!