我定义了一个名为Add Data的Dialog
Dialog上就一个Edit控件和button控件,Edit控件取名IDD_ADD,
定义Edit控件为CString m_editdata,当单击button后数据加入数据库中,
但是当我输入一简单任意字符串后得到的数据库中的输入值为43329948等等的随机数,请问如何解决?
单击Button代码:
注:CString m_editdata;已经定义,i为数据库中第一列数据:自动编号
要从EDIT控件输入的是第二列:姓名
void CAdd::OnAdddata()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
CString strSQL;
int i=1;
int flag=0;
while(!flag){
CDvdDataxx m_recordset(&m_database);
strSQL.Format("select * from dvd where dvd=%d",i);
m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);
if(m_recordset.GetRecordCount()==0){
strSQL.Format("insert into dvd values(%d,% d)",i,m_editdata);
m_database.ExecuteSQL(strSQL);
m_database.Close();
flag=1;
MessageBox("A Data have Added");
}
i++;
}
}
Dialog上就一个Edit控件和button控件,Edit控件取名IDD_ADD,
定义Edit控件为CString m_editdata,当单击button后数据加入数据库中,
但是当我输入一简单任意字符串后得到的数据库中的输入值为43329948等等的随机数,请问如何解决?
单击Button代码:
注:CString m_editdata;已经定义,i为数据库中第一列数据:自动编号
要从EDIT控件输入的是第二列:姓名
void CAdd::OnAdddata()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
CString strSQL;
int i=1;
int flag=0;
while(!flag){
CDvdDataxx m_recordset(&m_database);
strSQL.Format("select * from dvd where dvd=%d",i);
m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);
if(m_recordset.GetRecordCount()==0){
strSQL.Format("insert into dvd values(%d,% d)",i,m_editdata);
m_database.ExecuteSQL(strSQL);
m_database.Close();
flag=1;
MessageBox("A Data have Added");
}
i++;
}
}
strSQL.Format("insert into dvd values(%d, %d)",i,m_editdata);应是strSQL.Format("insert into dvd values(%d, %s)",i,m_editdata);
下回注意了
应该
strSQL.Format("insert into dvd values(%d, %s)",i,m_editdata);
但是,当我将%d改为%s后,
编译通过,
在Edit控件中填入字符单击Button后
出现如下警告对话框:参数不足,期待是1。
这是怎么回事?一个无法令我理解的错误。
无效的字符值和规格在列号2(姓名),但是这些无效字符就是我刚才加入数据库的字符(包括才加入的数字字符都是这个问题),
其他能在刷新后显示出来的是我直接输入数据库的一些数字字符,这是怎么回事,我检查了一下变量的类型 “姓名”在Access中使用的是“文本”,m_editdata(Edit控件)是CString,难道文本和CString类型不同吗?应该如何改正!!!!!
刷新函数RefreshData()如下:void CManager::RefreshData()
{
if(!m_database.IsOpen()){
m_database.Open(_T("dvd"));
}
m_data.DeleteAllItems();
DvdDataxx2 m_dataset(&m_database);
CString strSQL;
m_dataset.Open(AFX_DB_USE_DEFAULT_TYPE,p_query);
CDBVariant varValue;
if(m_dataset.GetRecordCount()!=0)
m_dataset.MoveFirst();
char buf[30];
int i=0;
while(!m_dataset.IsEOF())
{
int temp=0;//在ListCtrl中显示第一列(长整型)
m_dataset.GetFieldValue(temp,varValue);
sprintf(buf,"%d",varValue.m_lVal);
m_data.InsertItem(i,buf);
//在ListCtrl中显示第二列
m_dataset.GetFieldValue(1,varValue);
m_data.SetItemText(i,1,varValue.m_pstring->GetBuffer(1)); m_dataset.MoveNext();
i++;
}
}
strSQL.Format("insert into dvd values(%d, '%s')",i,m_editdata);
应该改成
strSQL.Format("insert into dvd (第二列的字段名) values('%s')", m_editdata);
因为自动编号类型是不能手动赋值的,插入一条新记录时会自动赋一个唯一的数值。还有void CAdd::OnAdddata() 函数看不懂你的处理逻辑。你可以把MDB文件打开看看通过程序插入的数据和手动加入的数据有什么不同。