使用環境 VC6.00Pro MFCにて作成
既存のプログラムにSQLServerに接続する必要が出できました。
テストプログラムを作成し(プロジェクト生成時にデータベースのヘッダーをチェック)テスト正常に行えました。
既存のプログラムに反映させようと思ったらデータベースのヘッダーを追加する方法が見当たりません。
手動で行おうと思い、追加されたresource.hとか*.rcに組み込まれていて壊れそうで良くわかりません
宜しくお願いします
ダイアログベースで作成しています。
データベースのヘッダーではなくオートメーションのサポートの追加でした。
オートメーションの追加方法です
CHogeApp.cppの中の
BOOL CHogeApp::InitInstance()
{
> if (!AfxOleInit()) {
> AfxMessageBox("Cannot initialize COM services.");
> return FALSE;
> }
を追加でいいはず。
また、CDatabase使うならStdAfx.hに
#include <afxdb.h>
CDaoDatabaseなら
#include <afxdao.h>
を追加です。
たぬ さん 有難うございます。
両方やってみましたが結果は同じでした。
接続はADOです。
ソースは
if(!AdoDatabase.Open(_T("Iynluavtzjn9ifg"),_T("sa"),_T("sasasasa"),_T("SQLOLEDB"))){
AfxMessageBox("SQL-Serverへ接続できませんでした");
return FALSE;
}
if(!rs.Open(strSQL)){
AfxMessageBox("データが読み出せませんでした");
}else{
int item=-1;
LIST_SAGYO_REC sagyo;
while(!rs.IsEOF()) //レコードが存在する間
{
rs.GetFieldValue(0,sagyo.StartTime); //開始日付
m_ListViewSagyoRec.SetItem(item,1,LVIF_TEXT,sagyo.StartTime,0,0,0,0); //開始日付
rs.MoveNext(); //次のレコードへ
}
rs.Close(); //レコードを閉じる
}
です。
AfxOleInit()) を追加して接続しできました。
エラーはrs.GetFieldValue(0,sagyo.StartTime); で発生しています。
Module
File:i386\chkesp.c
Line 42
This value of ESP was not poperty saved across a functioncall.
This is usually a result of calling a function declared whith one calling comvention
whith a function pointer declaer whith a defferent calling converter.
(Press Retry or debug the applicatuon.)
です。
何が悪いのですかね?
ADOのことはあまりよく分かりませんが
>rs.GetFieldValue(0,sagyo.StartTime);
int nIndex = 0;
rs.GetFieldValue(nIndex ,sagyo.StartTime);
または
rs.GetFieldValue("FieldName",sagyo.StartTime);
みたいな方法で回避できませんか?
#自身は全然ありません
たぬ さん 駄目でした
プロジェクトの生成時にダイアログにてオートメーションをサポートするに
してヘッダーのみにしたらこのソースは旨く動作します。
まだ何か足らないのではないかと思います。
このオートメーションはあとから追加はできないのですかね
何度も適当な事書いてすみません。
http://www.alpha-net.ne.jp/users2/uk413/vc/VCT_ADO.html
ちょっと試してみました。
このページの通りに実行してみましたがうまく動きました。
ただし相手はAccessです。AfxOleInit()は必要ありませんでした。
何となく比べてみると
// COMの初期化処理
::CoInitialize(NULL);
これ・・・がないかな?
#あまり振り回してしまっても申し訳ないので
#私も調べてみます。
追記です。フィールドのデータを取得する部分は上のページに加えて
COleVariant var1;
var1.vt = VT_I2;
var1.iVal = 0;
COleVariant value= m_pRecordset->GetFields()->GetItem(var1)->GetValue();
TRACE("%s\n",value.bstrVal);
こんな感じで書いてみました。
#情報がなかなか見つからなくて難しいですね。
#CDatabaseじゃだめですか?
たぬ さん 有難う御座います。
COMを使用していない為、やりましたがやはり駄目でした。
フィールドのデータを取得方法についてもアクセス方法が異なるので
使えませんでした。
ODBCへの登録を使えればいいのですが処理が遅いので使うなとのユーザーから
の要求です。
もう一度プロジェクトの生成からやり直してコピーしていきます。
本当に有難う御座いました
了解しました。お役に立てなくて申し訳ありません。
可能であれば、参考にされたHPなど紹介して
頂けないでしょうか?
#今までの情報だと同様の環境が構築できなかったので。
http://www.oracle.com/technology/tech/windows/ole_db/htdocs/Image9.gif
ADOの方が早いと言うのは微妙かと。
ツイート | ![]() |