以下是程序,可是DataGrid 什么也不显示很着急啊!
ADODBHandler dbObj;
_RecordsetPtr p_data;
int i;
BOOL check =dbObj.OpenDatabase();
if (check==TRUE) //if connected
p_data=dbObj.GetProductNames();
DataViewGrid dlg;
//DataViewGrid是一个form,上面就一个控件ms DataGrid 6.0 变量名为:m_DataGrid
dlg.m_DataGrid.SetRefDataSource(NULL);
dlg.m_DataGrid.SetRefDataSource(p_data);
dlg.m_DataGrid.Refresh();
dlg.DoModal();
//
//执行这段代码可是m_DataGrid什么也不显示。
//数据库打开是正确的。因为我在紧接上面的代码,下面我用下列代码进行了严正,结果很正常:
while ( !p_data->GetadoEOF() )
i=p_data->Fields->GetItem("TAXWARENO")->GetValue().intVal;
//TAXWARENO 是表的一个列,int类型
CString TempStr="";
TempStr.Format("%d",i);
MessageBox(TempStr);//能正常显示数据
p_data->MoveNext();
请问为什么DataGrid不工作呢?他根本什么都不显示。
ADODBHandler dbObj;
_RecordsetPtr p_data;
int i;
BOOL check =dbObj.OpenDatabase();
if (check==TRUE) //if connected
p_data=dbObj.GetProductNames();
DataViewGrid dlg;
//DataViewGrid是一个form,上面就一个控件ms DataGrid 6.0 变量名为:m_DataGrid
dlg.m_DataGrid.SetRefDataSource(NULL);
dlg.m_DataGrid.SetRefDataSource(p_data);
dlg.m_DataGrid.Refresh();
dlg.DoModal();
//
//执行这段代码可是m_DataGrid什么也不显示。
//数据库打开是正确的。因为我在紧接上面的代码,下面我用下列代码进行了严正,结果很正常:
while ( !p_data->GetadoEOF() )
i=p_data->Fields->GetItem("TAXWARENO")->GetValue().intVal;
//TAXWARENO 是表的一个列,int类型
CString TempStr="";
TempStr.Format("%d",i);
MessageBox(TempStr);//能正常显示数据
p_data->MoveNext();
请问为什么DataGrid不工作呢?他根本什么都不显示。
::CoInitialize(NULL);
m_pCon.CreateInstance(_uuidof(Connection));
m_pCon->Open("jw_zjgl","sa","",NULL); m_pRs.CreateInstance(_uuidof(Recordset));
m_pRs->Open("select*from f_dw",m_pCon.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
m_grid.SetRefDataSource(m_pRs);
m_grid.SetColWidth(0,0,0); //设置ID列的宽度为0
m_pRs->Close();
return TRUE;
注意:m_grid为MSHFLEXGRID的控件变量。
如果用DataGrid,在连接时应指明光标类型为客户端光标。
这句话我不懂。。我太弱了。。
m_pCon.CreateInstance(_uuidof(Connection));
m_pCon->PutCursorLocation(adUseClient); //必须加此句
_RecordsetPtr p_data;
int i;
BOOL check =dbObj.OpenDatabase();
//打开的Oracle8i的数据库,在另外的一台电脑(服务器)上的。
if (check==TRUE)
{
m_datagrid1.SetRefDataSource(p_data);//能正确显示出行数,可是没有数据
m_datagrid1.Refresh();
//就这么多。
。。
// 下面的是别的处理了。
在ADODBHandler类中,是这样打开数据库的:
BOOL ADODBHandler ::OpenDatabase()
{
_bstr_t strMissing(L""); //Variable for missing function parameters
_bstr_t strConnectionString;
//Check if connection is already open
if (!m_bDatabaseOpen)
{
//Initialise the connection string for database
strConnectionString = "Provider=OraOLEDB.Oracle;Data Source="+ Datasource +
"; User Id=" + Username +
";Password="+ Password ; //Create instance of ADODB connection object
m_cpConnection.CreateInstance("ADODB.Connection");
m_cpConnection->PutCursorLocation(adUseClient);
//上面一行 是经你指点 添加上的
//Alternate way of creating instance
//m_cpConnection.CreateInstance(__uuidof(Connection));
//Set the connection string for ADODB connection object
m_cpConnection->ConnectionString = strConnectionString;
try
{
//Open Connection to database. Use strMissing for parameters that are not required
//to be passed
m_cpConnection->Open(strMissing,strMissing,strMissing,-1);
}
//Catch COM errors
catch( _com_error &e)
{
// get info from _com_error
AfxMessageBox(e.Source() +" : " +e.Description() +" in OpenDatabase() function");
return FALSE;
}
//Catch Unhandled Exceptions
catch(...)
{
AfxMessageBox("Exception in OpenDatabase() function");
return FALSE;
} } //Connection to database is open
m_bDatabaseOpen = TRUE;
// MessageBox(_T("DataBase Open Proroly"));
return TRUE; //successfully connected}
有没有办法在程序中修改它呢?
m_pCon->Open("jw","sa","274008",NULL); //我喜欢用ODBC,
可以正常工作呀,这样吧,你先在你机上配置个ODBC,连接服务器的,照我的试试,应该没问题的。
我的这个程序原来不连数据库的(非数据库应用程序)
后来有了这方面的需要,我就通过了添加文件的方式,把ADO 的封装类加入到了工程中,
然后就可以访问数据库了。根本没配什么DSN.! 不过机器上有ORACLE的客户端。
汗,我都要急死啦!
唉,弄不好了
学会用datagrid 就行了吧!谢谢你!给你50分怎么样?
100分呀。。舍不得
我就这么多分了啊
对了,我最后不用datagrid了,用edit!
晕死,自己设置好格式 显示整齐就好了。我暂时这么处理了。谢谢你
只是用来edit 自己做了 对齐处理,使其看起来像表格了。
唉 !
斑竹 帮我给 VCSQLVB(九龙.君威) 50分吧,剩下的分我自己保留了。
谢谢 斑竹!