读书人

*请问一个关于ADO的有关问题*

发布时间: 2012-02-09 18:22:27 作者: rapoo

**********************请教一个关于ADO的问题*******************
请教一个问题

在用recordset取数据的时候

如果不知道字段的类型

怎么将所有的字段全部转换成char*啊

我发现如果是int类型或者float等等

bstrValue就是一个空指针

[解决办法]
已经加到100了?找个封装好的ADO类吧。如果不是char*类型,应该考虑自己写代码转换。

http://www.codeproject.com/database/caaadoclass1.asp
[解决办法]
C++里当然可以了。
根据_variant_t的类型用wsprintf格式化数据成字符格式。
[解决办法]
void CSMisClientView::ShowGrid(CString strSQL)
{
DeleteGrid();
_variant_t RecordsAffected;
m_pRecordset.CreateInstance(__uuidof(Recordset));
//_variant_t vIndex ;
//_variant_t vCount ;
if(m_pConnection-> State)
{
try
{
m_pRecordset=m_pConnection-> Execute((const char*)strSQL,&RecordsAffected,adCmdText);
}
catch(_com_error e)
{
AfxMessageBox(e.ErrorMessage());///显示错误信息
DeleteGrid();
return;

}
if(m_pRecordset-> adoEOF==-1)
{
m_pRecordset-> Close();
MessageBox( "据库中没有合当前条件的记录,请返回。 ", "返回 ",MB_ICONINFORMATION);
DeleteGrid();
return;
}
int nRowCount = 0;
while(!(m_pRecordset-> adoEOF))
{
nRowCount++;
m_pRecordset-> MoveNext();
}
m_pRecordset-> MoveFirst();
if(0L == nRowCount)return;
m_pGridCtrl = new CGridCtrl;
if (!m_pGridCtrl) return;
m_pGridCtrl-> SetTextColor(RGB(0,0,255));
m_pGridCtrl-> SetHeaderSort(TRUE);
// Create the Gridctrl window
CRect rect;
GetClientRect(rect);
m_pGridCtrl-> Create(rect, this, 100);
// fill it up with stuff
m_pGridCtrl-> SetEditable(FALSE);
m_pGridCtrl-> EnableDragAndDrop(TRUE);
FieldsPtr pFields;//取得字段信息
m_pRecordset-> get_Fields(&pFields);
int nFieldCount = pFields-> GetCount();
BSTR bstr;
_variant_t var;
FieldPtr pf;
/*= pFields-> GetItem(_variant_t(0l));
pf-> get_Name(&bstr);
CString str =(char*)(_bstr_t)bstr;*/

/////////////////////////////////////
try {
m_pGridCtrl-> SetRowCount(nRowCount+1);
m_pGridCtrl-> SetColumnCount(nFieldCount+1);
m_pGridCtrl-> SetFixedRowCount(1);
m_pGridCtrl-> SetFixedColumnCount(1);
}
catch (CMemoryException* e)
{
e-> ReportError();
e-> Delete();
DeleteGrid();
return;
}

// fill rows/cols with text
for (int row = 0; row < m_pGridCtrl-> GetRowCount(); row++)
{

for (int col = 0; col < m_pGridCtrl-> GetColumnCount(); col++)
{
GV_ITEM Item;
Item.mask = GVIF_TEXT|GVIF_FORMAT;
Item.row = row;
Item.col = col;

if (row < 1)
{
if(col < 1)
{
Item.nFormat = DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS;
Item.szText=_T( "序号 ");
}
else
{
Item.nFormat = DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS;
//Item.nFormat = DT_LEFT|DT_WORDBREAK;
pf = pFields-> GetItem(_variant_t((long)(col-1)));
pf-> get_Name(&bstr);

Item.szText=(char*)(_bstr_t)bstr;;
}

} else if (col <1) {
Item.nFormat = DT_RIGHT|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS;
Item.szText.Format(_T( "%d "),row);


} else {
Item.nFormat = DT_LEFT|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS;
//pRs-> SetRowsetCursorPosition(row);


Item.szText= " ";
}

m_pGridCtrl-> SetItem(&Item);
}
}

m_pGridCtrl-> SetRowHeight(0, 3*m_pGridCtrl-> GetRowHeight(0)/2);
CString strValue;
for (row = 1; row <nRowCount+1; row++)
{
for(int col=1;col <nFieldCount+1; col++)
{
var = m_pRecordset -> GetCollect(long(col-1));
if(var.vt!=VT_NULL)
m_pGridCtrl-> SetItemText(row,col,(char*)_bstr_t(var));
}
if(!(m_pRecordset-> adoEOF))
m_pRecordset-> MoveNext();
}
m_pRecordset-> Close();
m_pGridCtrl-> AutoSize();
/////////////////////////////////////
}
}

读书人网 >VC/MFC

热点推荐