2012-01-02 18 views
1

ODBC &アクセスデータベースに関する質の高い情報はどこで入手できますか?ODBCおよびアクセスデータベースに関する高品質の情報はどこで入手できますか?

私は、MFC/C++/JavaのODBCを使用して長年にわたり様々なプロジェクトに取り組んできました。

現在、私は、カスタマイズされたMFCレイヤを使用してAccess 2000 dbmファイルに接続されたODBC DSNに動的にインターフェイスするC++/MFCプロジェクトを持っています。

これは一般に機能します。

DBMS:Accessのバージョン:04.00.0000 ODBCドライバマネージャバージョン: 03.80.0000オプション機能の状態が実装されていません:S1C00、ネイティブ:106、原産地:

しかし、私は一般的のような警告を取得します[Microsoft] [ODBC Microsoft Access ドライバ]

警告:ドライバは要求された同時実行性をサポートしていません。 S1C00、ネイティブ:106、原産地:オプション 機能は 州実装されていない今、[Microsoft]の[ODBC Microsoft Accessの ドライバー]

とを当社のソフトウェアは、ビューを作成しようとしたとき、私は次を得る:

一般的な警告レジストリキー 'Temporary(volatile)Jet DSN for prcess 0x18fc Thread 0xc0 DBC 0x8c4cfc Jet'を開くことができません。 状態:01000、ネイティブ:1、原産地:[Microsoft]の[ODBC Microsoft Accessドライバ]

DBMS:Accessのバージョン:04.00.0000 ODBCドライバマネージャバージョン: 03.80.0000実行SQL:作成ビューSPECとして選択CALNAME TESTとして、カード番号、CARTONSTYLEカートンCCALとしてRULRULYとしてFLUTE、CORRDIR、 CUSTOMERID、深さDESCRIPTIO、デザイナー、DESIGNNUM、JOINTSIZE、 JOINTTYPE、PANEL_DとしてDESCRIPTION、長さPANEL_L、WIDTHとしてPANEL_W、DSIZEXとして RULRULX、としてDSIZEY、SHEETUXはSIZEX、SHEETUYは とし、SIZEY、SHEETXはGROSSX、シートはGROSSYから「Designs」に変換します。 DESIGNNUMはNULLではありません。
警告:ODBCの成功情報てSQLSetConnectAttrの状態が失敗しました:IM006、ネイティブ:0、原産地:[Microsoft]の[ODBC ドライバマネージャ]

全般PR ocess 0x18fcスレッド0xc0からDBC 0x8c4cfc Jetのレジストリキー「一時的な(揮発性)ジェット DSNを開くことができません警告' 状態:01000、ネイティブ:1、原産地:[Microsoft]の[ODBC Microsoft Accessドライバ]

最初の部分については、オプション機能実装されていない、と同時実行状態が実装されていない(おそらく、同じ根本的な問題に関する警告について)、私はソフトウェアがどのような並行処理機能を求めているのか分かりません。並行性の状態はどのようなものが適切ですか?どのようにして "正しい"ものを求めるのでしょうか? Windowsのバージョンと適切な並行性の状態のテーブルがありますか?

2番目の部分では、レジストリキーを開くことができなかったためにビューを作成できなかったことについてはどうですか?誰がどのレジストリキーを開くことに失敗していますか?

「Windows NTの一時フォルダ」にIUSRの完全なアクセス許可を与える必要があるという情報があります。これは、デスクトップアプリケーションが懸念する必要がある恐ろしい問題のように思えます。 ODBC DSNを使用しているデスクトップアプリケーションは、ユーザーの読み取り/書き込み可能なパスに存在するデータベースファイルを操作するときに、ユーザーのアクセス許可にどのように関わる必要がありますか?ユーザーがこのSQLを実行するのに必要なアクセス許可は何ですか?また、ユーザーはすでにデータベース内の既存の表の列と行を追加および削除できるため、さらに何を行う必要がありますか?

このコードはXPで動作するために使用されました。だから私は、VistaやWindows 7が今やこの機能をブロックするセキュリティを追加したと仮定しなければならない。

私はに興味があります:

  1. など、実際に彼らの様々なODBCアクセスインターフェイス、オプション、バージョン、ホストの問題を文書化し、マイクロソフトからの正規の基準材料、
  2. 同時性に関する警告に関する特定の情報。
  3. アクセス2000 dbmでビューを作成しようとしたときの明白なアクセス権の失敗に関する特定の情報。
  4. 上記を近代化するための提案は、完全なオーバーホールまたは技術の置き換えを意味するものではありません。つまり、Accessファイルを2003年や2007年などに更新したり、バックエンドをSQL Server Liteに切り替える可能性はありますが、ODBCから一部の置換ミドルウェアに変更することはできません(&のリスクがあります)。

ご協力いただきありがとうございました。

+0

元の質問には答えがありませんが、ポイント4はありません。私はAccessからSQL Serverにいくつかの変換を行ってきました。全体的なデータベース・スキーマの転送はわずかな変更に過ぎないので、移行はかなり簡単です。ほとんどのアプリケーションSQLはストアドプロシージャにも容易に移行されました。 –

+0

ありがとうございます。私はこれがかなりまっすぐ進むはずだと信じています。最大の問題は、SQL Server Liteとインストーラを統合し、法的問題を再確認し、アプリケーションの生成されたSQLで必要な構文上の変更を実装することです。それは自明ではないし、上記の問題のすべてがそのような変化で解決されることを疑いなく知っていれば、正当化する方が簡単だろう。最後に、現在使用されているAccessデータベースを持つ既存の顧客のための移行の仕組みが必要になります。一口。 :P – Mordachai

答えて

1

ええ、リモートクライアントの移行は苦しいことがあります。私が絶対にアクセスを避けようとしている理由の一部。私はこの2つの方法のうちの1つを行った。 1)WebEx(またはその他のオンライン会議プログラム)を使用してリモートマシンの制御を取得し、必要に応じて移行が確実に行われるようにします。 2)新しいコードにデータベースが移行されたかどうかを確認する。新しいDB(SQL Server)が見つからないと表示された場合、アプリは移行ツールを起動します。しかし、これは、マイグレーション・ユーティリティーを構築して完成させることを意味し、数多くのものが間違っている可能性があるため、マイグレーションを自動化するスクリプトを意味します。

もう少し前にやったことの1つは、DBにアプリ互換性テーブルを作成することです。そうすれば、コードはDBスキーマのバージョンが一致するかどうかを確認できます。また、DBを新しいバージョンにアップグレード(移行)するために必要なすべてのSQLを含む別のテーブル(暗号化された)を追加します。そうすれば、アプリケーションはDBを移行する必要があると判断し、スクリプトを実行して実行することができます。

私はこれが本当に役立つことを願っています。

+0

私はフィードバックとアイデアを感謝します。私はまだフェンスにいます。このビルドサイクルの予算内にマイグレーションのために割り当てられたリアルタイムはありません。これは有償オプションでなければならない可能性があります... – Mordachai

1

私たちには、ODBCアクセスデータベースを動的に使用するアプリケーションがあります。あなたが開いたときに

  1. Microsoftはまた、同時実行の問題の場合にCRecordsetとのCDatabaseドキュメント http://msdn.microsoft.com/en-us/library/1hkkwdf0(v=vs.80).aspx
    http://msdn.microsoft.com/en-us/library/2dhc1abk(v=VS.80).aspx

  2. を見てみる必要があります http://msdn.microsoft.com/en-us/library/s9ds2ktb(v=vs.80).aspx
    ODBCの良いドキュメントを持って、それが頻繁に発生します間違ったオプションのCRecordset私は仕事、次のオプションを使用して、我々は通常、オープンレコード

-

RecordsetToUse.Open(CRecordset::dynaset, "SQL Statement or NULL to use the DefaultSQL", CRecordset::skipDeletedRecords); 

高速の読み取り専用アクセスのためのレコードセットを使用している場合、あなたはまた

RecordsetToUse.Open(CRecordset::forwardOnly, "SQL Statement or NULL to use the DefaultSQL", CRecordset::readOnly); 

3を使用することができます。ビューの作成の問題については、ODBCはビューの作成をサポートしていないようです...私は、ADODB(http://www.codeproject.com/KB/database/adoclasses)を使用できると思います。 .aspx)を行うには

+0

私は以前の懸念にもかかわらず、この問題はODBC/Jetとは何の関係もなく、今はMFCの問題だと思っています(おそらく、データベース/レコードセットを開くために使用します)。上記のおかげで、私たちは比較して何をしているかを見ていきます。私たちのコードはかなり古く、おそらくVC++ 6.0の何かか古いMFCジャンクを持っています! – Mordachai

+0

私たちのソフトウェアは正しく動作するように見えるダイナセットを使用しています。 read-onolyルックアップを行うときにforwardOnlyを明示的に使用することは可能かもしれませんが、私たちの目的のために努力する価値はありません。他のすべてのモードは完全に失敗するか、読み取り専用レコードセットで終了します。この警告は、現在のドライバでどのような並行処理を使用するべきかを把握するためのMFCの反復的なアプローチの一部として表示されます。それは1つを試み、それが失敗したことを警告し、別のものを試み、それが成功するか、可能性を使い果たすまで。それは並行性の警告がどこから来るかです。 – Mordachai

+0

レジストリの不具合に関するJetの苦情がどこから来たのかはっきりしていません。おそらくドライバそのものでしょう。おそらくそうだ。しかし、それは干渉するようには見えません...実際にはないときに問題があるように見えるだけです。 このすべての機能は、正常に機能していることを確認するのに多くの時間を費やしており、すべてのメッセージは通常のように見えます。ヤック:( – Mordachai

関連する問題