我定义了一个名为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++;
}
}

解决方案 »

  1.   

    你的代码错在
    strSQL.Format("insert into dvd values(%d, %d)",i,m_editdata);应是strSQL.Format("insert into dvd values(%d, %s)",i,m_editdata);
      

  2.   


    下回注意了
    应该
    strSQL.Format("insert into dvd values(%d, %s)",i,m_editdata);
      

  3.   

    谢谢大家,
    但是,当我将%d改为%s后,
    编译通过,
    在Edit控件中填入字符单击Button后
    出现如下警告对话框:参数不足,期待是1。
    这是怎么回事?一个无法令我理解的错误。
      

  4.   

    改为‘%s’后,就可以将字符加入进数据库了,但是,我在调用刷新的时候,又出现了一个问题:
    无效的字符值和规格在列号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++;
    }
    }
      

  5.   

    表dvd的第一个字段是自动编号吗?如果是的话下面这条语句
    strSQL.Format("insert into dvd values(%d, '%s')",i,m_editdata);
    应该改成
    strSQL.Format("insert into dvd (第二列的字段名) values('%s')", m_editdata);
    因为自动编号类型是不能手动赋值的,插入一条新记录时会自动赋一个唯一的数值。还有void CAdd::OnAdddata() 函数看不懂你的处理逻辑。你可以把MDB文件打开看看通过程序插入的数据和手动加入的数据有什么不同。