
VC++对数据库的操作?
我想从数据库中提取出指定的一列然后显示在编辑框内。编辑框得变量为m_strSource,我用ODBC连得数据库,请告诉我具体的程序UpdateData(TRUE);CSt...
我想从数据库中提取出指定的一列然后显示在编辑框内。编辑框得变量为m_strSource,我用ODBC连得数据库,请告诉我具体的程序
UpdateData(TRUE);
CString m_column28;
int i=1;
//m_strSource.DeleteAllItems();
CLoadSet m_recordset(&m_database);
CString strSQL;
//选择内容简介
strSQL.Format("select * from marc where 内容简介='%s'",m_column28);
m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);
if(m_recordset.GetRecordCount()!=0)
m_recordset.MoveFirst();
if(!m_recordset.IsEOF())
{
m_strSource+=strSQL;
}
i++;
这是我写的程序?问题出在哪呢?
void CFenCiDlg::OnBtnLoadFile()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
CDBVariant varValue[200] [31];
CLoadSet m_recordset;
int j=m_recordset.GetDatabase(varValue);
int k;
int i=0;
for(k=0;k<j;k++)
{
m_strSource=varValue[k] [28].m_pstring->GetBuffer(1);
}
UpdateData(FALSE);
}
int CLoadSet::GetDatabase(CDBVariant varValue[] [31])
{
CLoadSet m_recordset(&m_database);
CString strSQL;
CString m_strSource;
strSQL.Format("select * from marc");
m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);
if(m_recordset.GetRecordCount()!=0)
m_recordset.MoveFirst();
int j=0;
while(!m_recordset.IsEOF())
{
m_recordset.GetFieldValue(28,varValue[j] [28]);
j++;
m_recordset.MoveNext();
}
m_recordset.Close();
return j;
}
我把程序改成这样了!运行的时候出现debug assertion failed!
file:dbcore.cpp,忽略后显示“程序类型越界”
这又是什么问题呢? 展开
UpdateData(TRUE);
CString m_column28;
int i=1;
//m_strSource.DeleteAllItems();
CLoadSet m_recordset(&m_database);
CString strSQL;
//选择内容简介
strSQL.Format("select * from marc where 内容简介='%s'",m_column28);
m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);
if(m_recordset.GetRecordCount()!=0)
m_recordset.MoveFirst();
if(!m_recordset.IsEOF())
{
m_strSource+=strSQL;
}
i++;
这是我写的程序?问题出在哪呢?
void CFenCiDlg::OnBtnLoadFile()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
CDBVariant varValue[200] [31];
CLoadSet m_recordset;
int j=m_recordset.GetDatabase(varValue);
int k;
int i=0;
for(k=0;k<j;k++)
{
m_strSource=varValue[k] [28].m_pstring->GetBuffer(1);
}
UpdateData(FALSE);
}
int CLoadSet::GetDatabase(CDBVariant varValue[] [31])
{
CLoadSet m_recordset(&m_database);
CString strSQL;
CString m_strSource;
strSQL.Format("select * from marc");
m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);
if(m_recordset.GetRecordCount()!=0)
m_recordset.MoveFirst();
int j=0;
while(!m_recordset.IsEOF())
{
m_recordset.GetFieldValue(28,varValue[j] [28]);
j++;
m_recordset.MoveNext();
}
m_recordset.Close();
return j;
}
我把程序改成这样了!运行的时候出现debug assertion failed!
file:dbcore.cpp,忽略后显示“程序类型越界”
这又是什么问题呢? 展开
展开全部
你写的这个m_strSource+=strSQL; 没有用啊?也没有事先进行查询。
可以这样:
UpdateData(TRUE);
CDBVariant var;
memset(var,0,sizeof(Var));
m_recordset.strFilter = strSQL;//这个SQL语句根据你的需要自己写
m_recordset.Requery();
while(!m_recordset.IsEOF() && m_recordset.GetCount() > 0)
{
for(int i = 0; i<m_recordset.m_nFields-1; i+=1)
{
GetFieldValue(i,var);
switch(var.m_dwType)
{
case DBVT_STRING:
case DBVT_WSTRING:
m_strSource += *var.m_pstring;
break;
case DBVT_LONG:
break;
m_strSource += itoa(var.m_lVal);//如果是UNICODE则是_wtoa(var.m_lVal);
//等等
default:
m_strSource += "?";
}
m_strSource += m_recordset.
}
UpdateData(FALSE);
//jiangmeng,2009,5,20
可以这样:
UpdateData(TRUE);
CDBVariant var;
memset(var,0,sizeof(Var));
m_recordset.strFilter = strSQL;//这个SQL语句根据你的需要自己写
m_recordset.Requery();
while(!m_recordset.IsEOF() && m_recordset.GetCount() > 0)
{
for(int i = 0; i<m_recordset.m_nFields-1; i+=1)
{
GetFieldValue(i,var);
switch(var.m_dwType)
{
case DBVT_STRING:
case DBVT_WSTRING:
m_strSource += *var.m_pstring;
break;
case DBVT_LONG:
break;
m_strSource += itoa(var.m_lVal);//如果是UNICODE则是_wtoa(var.m_lVal);
//等等
default:
m_strSource += "?";
}
m_strSource += m_recordset.
}
UpdateData(FALSE);
//jiangmeng,2009,5,20
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |