我在VC中用ADO访问access数据库,用了视图,可运行时出错?详细代码如下:
CString sSql,strName;
_variant_t RecordsAffected;
_RecordsetPtr m_pRecordset2;
sSql.Format("CREATE VIEW testview AS SELECT username FROM users1 UNION SELECT username FROM users");
m_pRecordset2 = theApp.m_pConnection->Execute((_bstr_t)sSql,&RecordsAffected,adCmdText);
while (!(m_pRecordset2->adoEOF))
{
strName.Format("user name is %s",
(char*)_bstr_t(m_pRecordset2->Fields->GetItem("username")->Value));
m_ListBox.AddString(strName);
m_pRecordset2->MoveNext();
}
m_pRecordset2->Close();
m_pRecordset2 = NULL;
我的数据库中有两个表users1和users,想把两个表中所有的用户名查出来,m_pConnection已经连接上数据库,程序退出时关闭了连接。
可我执行上面语句时,发生了运行时错误?不知原因何在,希望各位能帮忙看一下,多谢
还想问一下,创建视图有什么用处?是不是查询时速度快些,一般什么情况下使用啊?
CString sSql,strName;
_variant_t RecordsAffected;
_RecordsetPtr m_pRecordset2;
sSql.Format("CREATE VIEW testview AS SELECT username FROM users1 UNION SELECT username FROM users");
m_pRecordset2 = theApp.m_pConnection->Execute((_bstr_t)sSql,&RecordsAffected,adCmdText);
while (!(m_pRecordset2->adoEOF))
{
strName.Format("user name is %s",
(char*)_bstr_t(m_pRecordset2->Fields->GetItem("username")->Value));
m_ListBox.AddString(strName);
m_pRecordset2->MoveNext();
}
m_pRecordset2->Close();
m_pRecordset2 = NULL;
我的数据库中有两个表users1和users,想把两个表中所有的用户名查出来,m_pConnection已经连接上数据库,程序退出时关闭了连接。
可我执行上面语句时,发生了运行时错误?不知原因何在,希望各位能帮忙看一下,多谢
还想问一下,创建视图有什么用处?是不是查询时速度快些,一般什么情况下使用啊?
解决方案 »
- 资源DLL的问题
- 哪个函数可以实现切换到一个软件时,游戏不最小化
- 关于if(pMsg->message==WM_KILLFOCUS)
- TRACE宏会在哪里输出?
- 关与memcpy函数
- 学VC前是不是一定要精通WIN32编程?!
- 一个类似“中文Hello例句,测Wor试ld”的字符串, 如果要获取其中第n个字(既可能是中文也可能是英文),该如何操作?
- ftp的上传断点传输问题?急啊!!!
- 如何学vc++
- 串口Readfile的两个问题
- Rut-Time Check Failure #2- Stack around the variable 'sSubMsg' was corrupted.
- 如何隐藏checkbox?
m_pRecordset2.CreateInstance("ADODB.Recordset");
我这么用了一下,可还是有运行时错
CString sSql,strName;
_variant_t RecordsAffected;
_RecordsetPtr m_pRecordset2;
m_pRecordset2.CreateInstance("ADODB.Recordset");
sSql.Format("CREATE VIEW testview AS SELECT username FROM users1 UNION SELECT username FROM users");
theApp.m_pConnection->Execute((_bstr_t)sSql,&RecordsAffected,adCmdText);
strName.Format("SELECT username FROM testview");
m_pRecordset2 = theApp.m_pConnection->Execute((_bstr_t)strName,&RecordsAffected,adCmdText);
while (!(m_pRecordset2->adoEOF))
{
strName.Format("user name is %s",
(char*)_bstr_t(m_pRecordset2->Fields->GetItem("username")->Value));
m_ListBox.AddString(strName);
m_pRecordset2->MoveNext();
}
m_pRecordset2->Close();
m_pRecordset2 = NULL;
m_pRecordset2.Open((LPTSTR)strSQL.GetBuffer(255),_variant_t((IDispatch *)m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText);
..........
视图到底应该如何创建,access+ado改如何用?
CString sSql,strName;
_variant_t RecordsAffected;
_RecordsetPtr m_pRecordset2;
m_pRecordset2.CreateInstance("ADODB.Recordset");
sSql.Format("CREATE VIEW testview AS SELECT username FROM users1 UNION SELECT username FROM users");
protected:
_CatalogPtr m_pCatalog;
///////////////////////////////////////
HRESULT hr;
bool CreateView(CString strName, CString strCommand)
{
HRESULT hr;
ADODB::_CommandPtr pCommand = NULL;
pCommand.CreateInstance(__uuidof(ADODB::Command)); try
{
pCommand->put_CommandText(strCommand.AllocSysString());
hr = m_pCatalog->Views->Append(_bstr_t(strName.GetBuffer(0)), pCommand);
if(SUCCEEDED(hr))
{
m_pCatalog->Views->Refresh();
m_pView = m_pCatalog->Views->GetItem(strName.GetBuffer(0));
pCommand.Release();
return true;
}
else
{
return false;
}
}
catch(_com_error &e)
{
dump_com_error(e);
return false;
}
}
////////////////////////////////////////
CString sViewName,sCmdText;
sViewName="查询1";
sCmdText="Create view myView as......";
if(!CreateView(sViewName,sCmdText))
{
//......
}
sql server
oracle
...
的SQL语法是不一样的。
另外,楼主一开始的程序是创建试图,又如何能返回记录信息?
起码需要运行"select * from view_name"才是正确返回试图记录的正确方法。
CString sSql,strName,strName1;
_variant_t RecordsAffected;
sSql.Format("CREATE VIEW testview AS SELECT username FROM users1 UNION SELECT username FROM users");
theApp.m_pConnection->Execute((_bstr_t)sSql,&RecordsAffected,adCmdText);
可以为什么我这么建立视图,会发生runtime error呢?
access中怎么建立视图呢?
是不是视图一定要用Create Table这么创建表才可以用啊?我 在access中直接建立两个表,然后在程序中可以建立视图吗?
很大区别呢。
sCmdText="select a.*,b.* from tableA a,tableB b where a.id=b.id order by a.id";
//---------------------------------------
当然,Access的jet sql和T_SQL是不一样的。你直接用"create view myview as select ....."
是不行的,在Access没有视图和存储过程的说法。
但在SQL视图里就不行!在VC里就是用到ADOX,真麻烦。