在C++中使用ADO编的连接access数据库的程序,在数据库初始化一直有问题,连接不上数据库,那位高人给看一
#include<iostream>#include<string>usingnamespacestd;#import"c:\programfiles\commonfil...
#include <iostream>
#include <string>
using namespace std;
#import "c:\program files\common files\system\ado\msado15.dll"\
no_namespace\
rename("EOF","adoEOF")
void main()
{
CoInitialize(NULL);
_ConnectionPtr m_pConnection;
m_pConnection.CreateInstance(__uuidof(Connection));
try
{
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Date Source=C:\\Documents and Settings\\zhaolin\\My Documents\\asd\\student.mdb","","",adModeUnknown);
}
catch(_com_error e)
{
cout<<"数据库初始化错误!"<<endl;
return;
}
cout<<"连接成功!"<<endl;
_RecordsetPtr pRst;
pRst.CreateInstance(__uuidof(Recordset));
pRst->Open("SELECT * FROM student1",m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
if(!pRst->adoEOF)
pRst->MoveFirst();
else
{
cout<<"表内数据为空"<<endl;
return;
}
_variant_t var;
string strName;
while(!pRst->adoEOF)
{
var=pRst->GetCollect("Name");
if(var.vt!=VT_NULL)
strName=(LPCSTR)_bstr_t(var);
pRst->MoveNext();
}
pRst->Close();
pRst=NULL;
if(m_pConnection->State)
m_pConnection->Close();
m_pConnection=NULL;
CoUninitialize();
} 展开
#include <string>
using namespace std;
#import "c:\program files\common files\system\ado\msado15.dll"\
no_namespace\
rename("EOF","adoEOF")
void main()
{
CoInitialize(NULL);
_ConnectionPtr m_pConnection;
m_pConnection.CreateInstance(__uuidof(Connection));
try
{
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Date Source=C:\\Documents and Settings\\zhaolin\\My Documents\\asd\\student.mdb","","",adModeUnknown);
}
catch(_com_error e)
{
cout<<"数据库初始化错误!"<<endl;
return;
}
cout<<"连接成功!"<<endl;
_RecordsetPtr pRst;
pRst.CreateInstance(__uuidof(Recordset));
pRst->Open("SELECT * FROM student1",m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
if(!pRst->adoEOF)
pRst->MoveFirst();
else
{
cout<<"表内数据为空"<<endl;
return;
}
_variant_t var;
string strName;
while(!pRst->adoEOF)
{
var=pRst->GetCollect("Name");
if(var.vt!=VT_NULL)
strName=(LPCSTR)_bstr_t(var);
pRst->MoveNext();
}
pRst->Close();
pRst=NULL;
if(m_pConnection->State)
m_pConnection->Close();
m_pConnection=NULL;
CoUninitialize();
} 展开
5个回答
展开全部
错误在这两句:pRst->Open("SELECT * FROM student",m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Date Source=G:\\student.mdb","","",adModeUnknown);
可以参考:
connection.Open (ConnectionString, UserID, Password, Options)
参数
ConnectionString 可选,字符串,包含连接信息。
UserID 可选,字符串,包含建立连接时所使用用户名。
Password 可选,字符串,包含建立连接时所使用密码。
Options 可选,ConnectOptionEnum 值。决定该方法是在连接建立之后(异步)还是连接建立之前(同步)返回。可以是如下某个常量:
adConnectUnspecified (默认)同步打开连接。
adAsyncConnect 异步打开连接。
recordset.Open( Source, ActiveConnection, CursorType, LockType, Options)
参数
Source 可选,变体型,计算 Command 对象的变量名、SQL 语句、表名、存储过程调用或持久 Recordset 文件名。
ActiveConnection 可选。变体型,计算有效 Connection 对象变量名;或字符串,包含 ConnectionString 参数。
CursorType 可选,CursorTypeEnum 值,确定提供者打开 Recordset 时应该使用的游标类型。可为下列常量之一:
AdOpenForwardOnly (默认值)打开仅向前类型游标。
AdOpenKeyset 打开键集类型游标。
AdOpenDynamic 打开动态类型游标。
AdOpenStatic 打开静态类型游标。
LockType 可选。确定提供者打开 Recordset 时应该使用的锁定(并发)类型的 LockTypeEnum 值,可为下列常量之一:
AdLockReadOnly (默认值)只读 — 不能改变数据。
AdLockPessimistic 保守式锁定(逐个) — 提供者完成确保成功编辑记录所需的工作,通常通过在编辑时立即锁定数据源的记录。
AdLockOptimistic 开放式锁定(逐个) — 提供者使用开放式锁定,只在调用Update 方法时才锁定记录。
AdLockBatchOptimistic 开放式批更新—用于批更新模式(与立即更新模式相对)。
Options 可选,长整型值,用于指示提供者如何计算 Source 参数(如果它代表的不是 Command 对象),或从以前保存 Recordset 的文件中恢复 Recordset。可为下列常量之一:
adCmdText 指示提供者应该将 Source 作为命令的文本定义来计算。
adCmdTable 指示 ADO 生成 SQL 查询以便从在 Source 中命名的表中返回所有行。
adCmdTableDirect 指示提供者更改从在 Source 中命名的表中返回所有行。
adCmdStoredProc 指示提供者应该将 Source 视为存储过程。
adCmdUnknown 指示 Source 参数中的命令类型为未知。
adCmdFile 指示应从在 Source 中命名的文件中恢复保留(保存的)Recordset。
adAsyncExecute 指示应异步执行 Source。
adAsyncFetch 指示在提取 Initial Fetch Size 属性中指定的初始数量后,应该异步提取所有剩余的行。如果所需的行尚未提取,主要的线程将被堵塞直到行重新可用。
adAsyncFetchNonBlocking 指示主要线程在提取期间从未堵塞。如果所请求的行尚未提取,当前行自动移到文件末尾。
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Date Source=G:\\student.mdb","","",adModeUnknown);
可以参考:
connection.Open (ConnectionString, UserID, Password, Options)
参数
ConnectionString 可选,字符串,包含连接信息。
UserID 可选,字符串,包含建立连接时所使用用户名。
Password 可选,字符串,包含建立连接时所使用密码。
Options 可选,ConnectOptionEnum 值。决定该方法是在连接建立之后(异步)还是连接建立之前(同步)返回。可以是如下某个常量:
adConnectUnspecified (默认)同步打开连接。
adAsyncConnect 异步打开连接。
recordset.Open( Source, ActiveConnection, CursorType, LockType, Options)
参数
Source 可选,变体型,计算 Command 对象的变量名、SQL 语句、表名、存储过程调用或持久 Recordset 文件名。
ActiveConnection 可选。变体型,计算有效 Connection 对象变量名;或字符串,包含 ConnectionString 参数。
CursorType 可选,CursorTypeEnum 值,确定提供者打开 Recordset 时应该使用的游标类型。可为下列常量之一:
AdOpenForwardOnly (默认值)打开仅向前类型游标。
AdOpenKeyset 打开键集类型游标。
AdOpenDynamic 打开动态类型游标。
AdOpenStatic 打开静态类型游标。
LockType 可选。确定提供者打开 Recordset 时应该使用的锁定(并发)类型的 LockTypeEnum 值,可为下列常量之一:
AdLockReadOnly (默认值)只读 — 不能改变数据。
AdLockPessimistic 保守式锁定(逐个) — 提供者完成确保成功编辑记录所需的工作,通常通过在编辑时立即锁定数据源的记录。
AdLockOptimistic 开放式锁定(逐个) — 提供者使用开放式锁定,只在调用Update 方法时才锁定记录。
AdLockBatchOptimistic 开放式批更新—用于批更新模式(与立即更新模式相对)。
Options 可选,长整型值,用于指示提供者如何计算 Source 参数(如果它代表的不是 Command 对象),或从以前保存 Recordset 的文件中恢复 Recordset。可为下列常量之一:
adCmdText 指示提供者应该将 Source 作为命令的文本定义来计算。
adCmdTable 指示 ADO 生成 SQL 查询以便从在 Source 中命名的表中返回所有行。
adCmdTableDirect 指示提供者更改从在 Source 中命名的表中返回所有行。
adCmdStoredProc 指示提供者应该将 Source 视为存储过程。
adCmdUnknown 指示 Source 参数中的命令类型为未知。
adCmdFile 指示应从在 Source 中命名的文件中恢复保留(保存的)Recordset。
adAsyncExecute 指示应异步执行 Source。
adAsyncFetch 指示在提取 Initial Fetch Size 属性中指定的初始数量后,应该异步提取所有剩余的行。如果所需的行尚未提取,主要的线程将被堵塞直到行重新可用。
adAsyncFetchNonBlocking 指示主要线程在提取期间从未堵塞。如果所请求的行尚未提取,当前行自动移到文件末尾。
展开全部
我把Open("Provider=Microsoft.Jet.OLEDB.4.0;Date Source=C:\\Documents and Settings\\zhaolin\\My Documents\\asd\\student.mdb","","",adModeUnknown);
改为Open("Data Source=luoshuang;UID=sa;PWD=;","","",adModeUnknown); 就通过了,你试下看,Date Source我是先在数据源里注册了。
改为Open("Data Source=luoshuang;UID=sa;PWD=;","","",adModeUnknown); 就通过了,你试下看,Date Source我是先在数据源里注册了。
追问
在数据源里注册是什么意思?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在StdAfx.h中填写:
#if !defined(AFX_STDAFX_H__5F793306_E054_4604_945C_623A1495AAAE__INCLUDED_)
#define AFX_STDAFX_H__5F793306_E054_4604_945C_623A1495AAAE__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers
#include <afxwin.h> // MFC core and standard components
#include <afxext.h> // MFC extensions
#include <afxdisp.h> // MFC Automation classes
#include <afxdtctl.h> // MFC support for Internet Explorer 4 Common Controls
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h> // MFC support for Windows Common Controls
#import "C:\Program Files\Common Files\system\Ole DB\oledb32.dll" no_namespace
#import "c:\program Files\common files\system\ado\msado15.dll"\
no_namespace rename("EOF","adoEOF") rename("BOF","adoBOF")
#include <afxdb.h>
对照我的位置复制一下,调试试试,我的通过了
#if !defined(AFX_STDAFX_H__5F793306_E054_4604_945C_623A1495AAAE__INCLUDED_)
#define AFX_STDAFX_H__5F793306_E054_4604_945C_623A1495AAAE__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers
#include <afxwin.h> // MFC core and standard components
#include <afxext.h> // MFC extensions
#include <afxdisp.h> // MFC Automation classes
#include <afxdtctl.h> // MFC support for Internet Explorer 4 Common Controls
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h> // MFC support for Windows Common Controls
#import "C:\Program Files\Common Files\system\Ole DB\oledb32.dll" no_namespace
#import "c:\program Files\common files\system\ado\msado15.dll"\
no_namespace rename("EOF","adoEOF") rename("BOF","adoBOF")
#include <afxdb.h>
对照我的位置复制一下,调试试试,我的通过了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2011-04-14
展开全部
我也遇到了跟你一样的问题,一直连接不上,数据源也注册了,还是报错,不知是不是
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Date Source=C:\\Documents and Settings\\zhaolin\\My Documents\\asd\\student.mdb","","",adModeUnknown);
的问题?
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Date Source=C:\\Documents and Settings\\zhaolin\\My Documents\\asd\\student.mdb","","",adModeUnknown);
的问题?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#import "C:\\Program Files\\Common Files\\System\\ado\\msado15.dll" no_namespace rename("EOF","adoEOF")rename("BOF","adoBOF")
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询