我用MFC连接数据库,批量读取数据库中表的数据:
在读取字符串数据类型的字段时用如下代码:
void** m_ppvData; // allocate dynamically to nColumns later
void** m_ppvLengths; // allocate dynamically to nColumns laterRFX_Text_Bulk(pFX, "FieldName",
(LPSTR*)&m_ppvData[1],
(long**)&m_ppvLengths[1],
MAX_TEXT_LEN);
能够读取数据出来,但是请教大家取出来的数据中,m_ppvData[nNum]这个指针指向的数据内容是怎样放的呢?
知道是多条字符串字段记录的,如果取出数据这样来取
CString* rgItemTexts;
CString m_pstrItemText[10];rgItemTexts = (char*)m_ppvData[1];
for(int i = 0;i < 10;i++)
{
m_pstrItemText[i] = rgItemTexts[i];
}
结果只能取到m_pstrItemText[0]的值,后面就取不到。
请问是为什么?
在读取字符串数据类型的字段时用如下代码:
void** m_ppvData; // allocate dynamically to nColumns later
void** m_ppvLengths; // allocate dynamically to nColumns laterRFX_Text_Bulk(pFX, "FieldName",
(LPSTR*)&m_ppvData[1],
(long**)&m_ppvLengths[1],
MAX_TEXT_LEN);
能够读取数据出来,但是请教大家取出来的数据中,m_ppvData[nNum]这个指针指向的数据内容是怎样放的呢?
知道是多条字符串字段记录的,如果取出数据这样来取
CString* rgItemTexts;
CString m_pstrItemText[10];rgItemTexts = (char*)m_ppvData[1];
for(int i = 0;i < 10;i++)
{
m_pstrItemText[i] = rgItemTexts[i];
}
结果只能取到m_pstrItemText[0]的值,后面就取不到。
请问是为什么?
解决方案 »
- 求助~在线等~怎样用windbg 确认某个object是否是signal状态的
- 想获取列表框中鼠标双击消息,用了子类方式来实现,但在消息处理函数中不能获取ESCAPE键的消息,程序如下,不知为什么?
- 如何把这些数据绑定到树形控件CTreeCtrl上?
- 增加一列的sql语句如何写?内容为。。。。
- 小问题:MFC的原代码在哪儿可以查看?
- 在一个进程中定义数组,需要在另一个进程中进行数组中数据的访问,怎么办?谢谢各位!!
- 我用一根 串口线(自己做的),连起了2 个串口,可用几个调试程序试的时候,接受到的字符与发送的不符合。
- 关于VC下动态建立视图
- 谁知道哪里有《windows程序设计》的电子书下载?谢谢
- VC中数据库的新手问题
- MediaPlayer如何播放VOX文件
- 关于用C语言在WINXP下开发简单的Web 服务器的架构问题
{
pFX->SetFieldType( CFieldExchange::outputColumn );
RFX_Long_Bulk( pFX, _T( "[colRecID]" ),
&m_rgID, &m_rgIDLenghts );
RFX_Text_Bulk( pFX, _T( "[colName]" ),
&m_rgName, &m_rgNameLengths, 30 ); pFX->SetFieldType( CFieldExchange::inputParam );
RFX_Text( pFX, "NameParam", m_strNameParam );
}
http://msdn2.microsoft.com/en-us/library/77dcbckz(VS.80).aspx
只是在去数据时:
rgItemTexts = (char*)m_ppvData[1];
for(int i = 0;i < 10;i++)
{
m_pstrItemText[i] = rgItemTexts[i];
}
如果前面调用DoBulkFieldExchange( CFieldExchange* pFX )时候这样写的语句:
RFX_Text_Bulk(pFX, "FieldName ",
(LPSTR*)&m_ppvData[1],
(long**)&m_ppvLengths[1],
MAX_TEXT_LEN); 那么改成这样:
char* rgItemTexts;
CString m_pstrItemText[10]; rgItemTexts = (char*)m_ppvData[1];
for(int i = 0;i < 10;i++)
{
m_pstrItemText[i] = rgItemTexts + MAX_TEXT_LEN * i;
}
参考MFC源代码如下:
case CFieldExchange::AllocMultiRowBuffer:
{
// The buffer pointer better be initialized to NULL
// or cleanup in exceptional cases mail fail
ASSERT(*prgStrVals == NULL);
ASSERT(*prgLengths == NULL); int nRowsetSize = pFX->m_prs->GetRowsetSize(); // Allocate buffers to hold data and length
*prgStrVals = new CharType[nRowsetSize * nMaxLength]; // Make sure bulk-row fetching works for Unicode
*prgLengths = new LONG_PTR[nRowsetSize];
}
break;