一个关于GetBuffer的问题
我的RefreshData函数如下
但在运行中,我发现,如果把MDB数据库当中的某字段置为空,则程序运行不起来.
请问应该如何解决
我大概猜想是:GetBuffer的返回值为空 或者指向了NULL引起的
void CClientView::RefreshData()
{
//首先确保数据库打开
if(!m_database.IsOpen())
{
m_database.Open(_T("Client"));
}
//对列表控件的内容更新,清空原来的内容
m_client.DeleteAllItems();
//创建记录集
CPersonSet m_personset(&m_database);
m_personset.Open(AFX_DB_USE_DEFAULT_TYPE,m_query);
CDBVariant varValue;
char buf[20];
//用来记录当前记录的序号
int i=0;
//如果表中有记录,打开后将游标定在第一位,使记录集中的第一条记录成为当前记录
if(m_personset.GetRecordCount()!=0)
m_personset.MoveFirst();
//m_personset.Update();
// m_personset.Close();
while(!m_personset.IsEOF())
{
int temp=0;
//对整型数字的处理
m_personset.GetFieldValue(temp,varValue);
sprintf(buf,"%d",varValue.m_lVal);
m_client.InsertItem(i,buf);
//对字符串显示处理
// m_personset.GetFieldValue(temp,varValue);
// m_client.SetItemText(i,0,varValue.m_pstring->GetBuffer(1));
m_personset.GetFieldValue(1,varValue);
m_client.SetItemText(i,1,varValue.m_pstring->GetBuffer(1));
m_personset.GetFieldValue(2,varValue);
m_client.SetItemText(i,2,varValue.m_pstring->GetBuffer(1));
m_personset.GetFieldValue(3,varValue);
m_client.SetItemText(i,3,varValue.m_pstring->GetBuffer(1));
m_personset.GetFieldValue(4,varValue);
m_client.SetItemText(i,4,varValue.m_pstring->GetBuffer(1)); m_personset.GetFieldValue(5,varValue);
m_client.SetItemText(i,5,varValue.m_pstring->GetBuffer(1));
m_personset.MoveNext();
i++; }
}
我的RefreshData函数如下
但在运行中,我发现,如果把MDB数据库当中的某字段置为空,则程序运行不起来.
请问应该如何解决
我大概猜想是:GetBuffer的返回值为空 或者指向了NULL引起的
void CClientView::RefreshData()
{
//首先确保数据库打开
if(!m_database.IsOpen())
{
m_database.Open(_T("Client"));
}
//对列表控件的内容更新,清空原来的内容
m_client.DeleteAllItems();
//创建记录集
CPersonSet m_personset(&m_database);
m_personset.Open(AFX_DB_USE_DEFAULT_TYPE,m_query);
CDBVariant varValue;
char buf[20];
//用来记录当前记录的序号
int i=0;
//如果表中有记录,打开后将游标定在第一位,使记录集中的第一条记录成为当前记录
if(m_personset.GetRecordCount()!=0)
m_personset.MoveFirst();
//m_personset.Update();
// m_personset.Close();
while(!m_personset.IsEOF())
{
int temp=0;
//对整型数字的处理
m_personset.GetFieldValue(temp,varValue);
sprintf(buf,"%d",varValue.m_lVal);
m_client.InsertItem(i,buf);
//对字符串显示处理
// m_personset.GetFieldValue(temp,varValue);
// m_client.SetItemText(i,0,varValue.m_pstring->GetBuffer(1));
m_personset.GetFieldValue(1,varValue);
m_client.SetItemText(i,1,varValue.m_pstring->GetBuffer(1));
m_personset.GetFieldValue(2,varValue);
m_client.SetItemText(i,2,varValue.m_pstring->GetBuffer(1));
m_personset.GetFieldValue(3,varValue);
m_client.SetItemText(i,3,varValue.m_pstring->GetBuffer(1));
m_personset.GetFieldValue(4,varValue);
m_client.SetItemText(i,4,varValue.m_pstring->GetBuffer(1)); m_personset.GetFieldValue(5,varValue);
m_client.SetItemText(i,5,varValue.m_pstring->GetBuffer(1));
m_personset.MoveNext();
i++; }
}
解决方案 »
- 谁能发给我一个显示桌面的实例
- CDateTimeCtrl日期设置在vs2008下为什么整个wce桌面都会刷新一次?
- static void PASCAL Remove( LPCTSTR lpszFileName );中PASCAL 是嘛意思啊?
- 急需MSVCR70D.DLL
- 控制台程序如何自动退出?
- 一个Norton AntiVirus 病毒库的问题
- 用TRY捕获的错误,一定就是错在{}里面吗?
- 在VC6.0中如何使用断点功能??在那?
- 关于__stdcall,__cdecl,PASCAL的问题?
- 关于两个可执行文件捆绑的问题 千分答谢!
- 多线程共用函数体问题
- 哪位能帮我看看这段代码 为什么不能完成数据更新
//改成如下试试,先判断是否为空值
if(varValue.m_dwType != DBVT_NULL)
{
m_client.SetItemText(i,1,varValue.m_pstring->GetBuffer(1));
}
else
{
m_client.SetItemText(i,1,"");
}
1. 这里你为什么要GetBuffer?
2. GetBuffer到底是干吗得?你知道参数未1表示什么意思么?
3. GetBuffer之后用完需要干吗?知道ReleaseBuffer是干吗得么?
你这段代码在我看来是在完全不需要GetBuffer时使用了它,更严重得是,你既不知道GetBuffer是干什么得,也不知道使用完之后怎么处理它。
我用到GetBuffer是为了获取字段里的信息
ReleaseBuffer就是GetBuffer的一个析构机制
那你说这个应该怎么用啊 我是想为了得到字体里的信息
看看varValue的各成员特别是m_dwType究竟是什么
说是没有找到m_dwType
CXX0033:Error:error in OMF type information这是怎么回事啊?
应该没问题的了
m_personset.GetFieldValue(1,varValue);
if(varValue.m_dwType != DBVT_NULL)
{
m_client.SetItemText(i,1,varValue.m_pstring->GetBuffer(1));
}
else
{
m_client.SetItemText(i,1,"");
}
m_personset.GetFieldValue(2,varValue);
if(varValue.m_dwType != DBVT_NULL)
{
m_client.SetItemText(i,2,varValue.m_pstring->GetBuffer(1));
}
else
{
m_client.SetItemText(i,2,"");
}
m_personset.GetFieldValue(3,varValue);
if(varValue.m_dwType != DBVT_NULL)
{
m_client.SetItemText(i,3,varValue.m_pstring->GetBuffer(1));
}
else
{
m_client.SetItemText(i,3,"");
}
m_personset.GetFieldValue(4,varValue);
if(varValue.m_dwType != DBVT_NULL)
{
m_client.SetItemText(i,4,varValue.m_pstring->GetBuffer(1));
}
else
{
m_client.SetItemText(i,4,"");
} m_personset.GetFieldValue(5,varValue);
if(varValue.m_dwType != DBVT_NULL)
{
m_client.SetItemText(i,5,varValue.m_pstring->GetBuffer(1));
}
else
{
m_client.SetItemText(i,5,"");
}