2011-07-01 29 views
5

C++プロジェクトでADOをインポートして使用するという2つの質問があります。私はどのような形でADOに経験はありません。C++ ADOをインポートして使用する

まず、私のプログラムのデータベースの側面はWindows上でのみ実行する必要があります。 _WIN32または_WIN64がADO固有のコードを実行する前に定義されているかどうかをテストするだけで十分でしょうか?私はコンパイラとしてVisual C++ 2010 Expressを使用しています。

第2に、私はthis pageを私のガイドに従っています。 msado15.dllに#importステートメントを含めました。 #importディレクティブには赤色の下線が引かれています。 "...ソースファイルパス/ to/msado15.tlhを開くことができません"と表示されたときにエラーが表示され、ソースにコピーしたADOの内容は赤色のままです。私は、エラーメッセージに記載されているディレクトリをチェックし、msado15.tlhはそこにあります。また、プログラムはコンパイルされます(実行後もクラッシュしますが、それは別に診断するものです)。

なぜこれが起こっているのかわかりません。助けやアドバイスをいただければ幸いです。で

#import "msado15.dll" rename_namespace("ADO") rename("EOF", "EndOfFile") no_implementation 

を:

+0

マシンは32ビットまたは64ビットですか? 64ビットの場合は、Program Files(x86) – crashmstr

+0

を指す必要があります。以下を参照してください。https://stackoverflow.com/questions/42036189/msado15-tlh-not-generated-after-importing-msado15-dll/46540869#46540869 – Kamleshwar

+0

以下を参照してください:https://stackoverflow.com/questions/42036189/msado15-tlh-not-generated-after-importing-msado15-dll/46540869#46540869 – Kamleshwar

答えて

9

我々はそれを行う方法、我々はVC++ディレクトリは/ファイルに

$(ProgramFiles)\Common Files\System\ado 

を含めるそして、我々はヘッダにこのよう

をインポートするうちに次を追加しますcppファイルの先頭

#import "msado15.dll" rename_namespace("ADO") rename("EOF", "EndOfFile") implementation_only 

名前空間を保持し、別のEOFリネームを使用する方が好きなので、少し異なります。

C++ Import help on MSDN

C++ Import Attributes on MSDN

+0

私は決して 'no_implementation'と' implementation_only'について知りませんでした。私はそれが含まれているときに、ADOの完全な実装に沿ってドラッグするのではなく、ヘッダーファイルをもっと軽くすることで、これを処理する非常に良い方法だと思います。 –

+0

私は同様の問題を抱えています。私はこれらの修正をすべて試しましたが、うまくいきません。しかし、私はこれらのソリューションが新しいプロジェクトで機能することに同意します。私はVS 2010がmsado15.dllに少し問題があると推測しています。プロジェクトをVS 2003から2010に変換しました。コンパイルしようとするたびに、生成されたtblファイルにEOFシンボルに関するバグがあります。どうやら、コンパイラはリネームマクロ置換を購入していません。私はここにトピックがありますhttp://stackoverflow.com/questions/16715900/converting-application-from-visual-studio-2003-to-visual-studio-2010-ado-c。ありがとう! – zlogdan

+0

これは本当ですか? devenv.exeは32ビットのアプリケーションなので、$(Program Files)環境変数は常に32ビットのフォルダを指します。 – Bathsheba

2

私はADOを始めたとき、私は同じ問題を抱えていました。 (赤い下線付き、見つけられない...) それは私にナットをもたらしたが、単純にコンパイルした後、下線がなくなり、すべて正常に機能した。

私は #import "C:\Program\Delade filer\System\ado\msado15.dll" rename_namespace("USEADO"),rename("EOF","EndOfFile")を使用しています。 CPPの例で

#include "stdafx.h" 

int SQLsetInfo(THING *Thing, GADGET *Gadget) 
{ 

HRESULT hr;               
USEADO::_ConnectionPtr connection;         
USEADO::_RecordsetPtr recordset;          

//Initialize COM 
    if(FAILED(hr = CoInitialize(NULL)))       
    { MessageBox(NULL, L"Initialize COM Failed", L"MyProg!",MB_ICONEXCLAMATION |MB_OK); 
     //Do something, eg shut down DB stuff and continue without or exit program 
     //Insert error handeler below 
     return hr;//TODO Ad error handeling see line 149 
    } 

if(FAILED(hr = connection.CreateInstance(__uuidof(USEADO::Connection)))) 
    { MessageBox(NULL, L"Create connection instance Failed", L"MyProg!",MB_ICONEXCLAMATION |MB_OK); 
     //Do something, eg shut down DB stuff and continue without or exit program 
     return hr; 
    } 

if(FAILED(hr = recordset.CreateInstance(__uuidof(USEADO::Recordset)))) 
    { MessageBox(NULL, L"Create recordset instance Failed", L"MyProg!",MB_ICONEXCLAMATION |MB_OK); 
     //Do something, eg shut down DB stuff and continue without or exit program 
     return hr; 
    } 

    connection->CursorLocation = USEADO::adUseServer; //http://dev.mysql.com/tech-resources/articles/vb-cursors-and-locks.html           

    //Try to connect to SQL server 
    try   { connection->Open(L"YOUR CONNECTION STRING", USEADO::adConnectUnspecified); } 
    catch(...) {std::cout << "!!! connection->Open(ConnectionString FAILED !!!" << std::endl;  } 

私はC++でない専門家だが、これは私のために正常に動作します。それがあなたを助けることを願っています。他の誰かが上記のスニペットに対する提案/評論家を持っているなら、私はそれを楽しみにしています....

関連する問題