我用CDaoRecordset存储一条记录,可是界面输入的中文字符串存到mdb数据库中成了乱码了,请问怎么解决?

解决方案 »

  1.   

    // Stations_edit.cpp : implementation file
    //#include "stdafx.h"
    #include "RecMis.h"
    #include "Stations_edit.h"#ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif/////////////////////////////////////////////////////////////////////////////
    // CStations_edit dialog
    CDaoDatabase db; //数据库
    CDaoRecordset RecSet(&db); //记录集
    CStations_edit::CStations_edit(CWnd* pParent /*=NULL*/)
    : CDialog(CStations_edit::IDD, pParent)
    {
    //{{AFX_DATA_INIT(CStations_edit)
    m_name = _T("");
    m_tel = 0;
    //}}AFX_DATA_INIT
    }
    void CStations_edit::DoDataExchange(CDataExchange* pDX)
    {
    CDialog::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(CStations_edit)
    DDX_Control(pDX, IDC_COMBO1, m_recordstate);
    DDX_Text(pDX, IDC_EDIT1, m_name);
    DDX_Text(pDX, IDC_EDIT2, m_tel);
    DDV_MinMaxLong(pDX, m_tel, 0, 99999999);
    //}}AFX_DATA_MAP
    }
    BEGIN_MESSAGE_MAP(CStations_edit, CDialog)
    //{{AFX_MSG_MAP(CStations_edit)
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
    // CStations_edit message handlersBOOL CStations_edit::OnInitDialog() 
    {
    CDialog::OnInitDialog();

    // TODO: Add extra initialization here
    m_name = "";
    m_tel = 0;
    m_recordstate.InsertString(0,"是");
    m_recordstate.InsertString(1,"否");
    m_recordstate.SetCurSel(0);
    UpdateData(false);
    return TRUE;  // return TRUE unless you set the focus to a control
                  // EXCEPTION: OCX Property Pages should return FALSE
    }void CStations_edit::OnOK() 
    {
    // TODO: Add extra validation here
    UpdateData(true);
    bool bl;
    bl = m_recordstate.GetCurSel()==0?true:false;
    try
    {
    //默认创建数据名:RecMis.mdb
    CString sPath = GetApplicationPath();
    CString lpszFile = sPath + "\\RecMis.mdb";
    db.Open(lpszFile); // 打开已创建的RecMis.mdb数据库
    //打开已创建的数据表
    RecSet.Open(AFX_DAO_USE_DEFAULT_TYPE,"SELECT * FROM STATIONS", NULL);
    //加入第一个记录,用SQL语句
    //db.Execute("INSERT INTO RecMis (NAME,TEL,AUTOREC) VALUES (m_name,m_tel,bl)");
    //加入第二个记录,用DAO涵数
    COleVariant var(m_name);
    //var.ChangeType(
    RecSet.AddNew();
    RecSet.SetFieldValue("NAME",var);
    var.vt = VT_I4 ;//指明整型数据
    var.lVal = m_tel;
    RecSet.SetFieldValue("TEL",var);
    //RecSet.SetFieldValue("AUTOREC",bl);
    RecSet.Update();
    RecSet.Close();
    db.Close();
    }
    catch(CDaoException* e)
    {
    DisplayDaoException(e);
    }
    CDialog::OnOK();
    }
      

  2.   

    CString sql;
    sql.Format("INSERT INTO RecMis(NAME,TEL,AUTOREC) VALUES(\'%s\',,%f,%d)",m_name,m_tel,bl);//values里的格式符根据类型你自己调整
    db.Execute(sql);
      

  3.   

    YO:: laiyiling(最熟悉的陌生人) 不能用
    RecSet.AddNew();
    RecSet.SetFieldValue("NAME",var);
    var.vt = VT_I4 ;//指明整型数据
    var.lVal = m_tel;
    这种方式写吗?
      

  4.   

    RecSet.AddNew();
    m_tel=...;
    m_name="...";
    RecSet.Update();
      

  5.   

    就是
    //加入第二个记录,用DAO涵数
    COleVariant var(m_name);
    //var.ChangeType(
    RecSet.AddNew();
    RecSet.SetFieldValue("NAME",var);
    var.vt = VT_I4 ;//指明整型数据
    var.lVal = m_tel;
    RecSet.SetFieldValue("TEL",var);
    //RecSet.SetFieldValue("AUTOREC",bl);
    RecSet.Update();
    后其他类型的存储都正确,就是中文字符串存储出现乱码了?
      

  6.   

    b1也是COleVariant类型吧!你是怎么指定类型的?SetFieldValue的参数形式有几种,换换其他的看
      

  7.   

    你也可以同样用SQL语句来修改
      

  8.   

    忘了说了,我的Name字段在mdb数据库中设置为 "文本"类型
      

  9.   

    是这样
    我测试了
    COleVariant var(m_name);
    //var.ChangeType(
    RecSet.AddNew();
    RecSet.SetFieldValue("NAME",var);
    结果乱码
    ////////////////////////////////////////////////////////////
    RecSet.AddNew();
    RecSet.SetFieldValue("NAME","你好");
    存储正确