存储mdb数据库乱码问题 我用CDaoRecordset存储一条记录,可是界面输入的中文字符串存到mdb数据库中成了乱码了,请问怎么解决? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 // Stations_edit.cpp : implementation file//#include "stdafx.h"#include "RecMis.h"#include "Stations_edit.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// CStations_edit dialogCDaoDatabase 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_MAPEND_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();} CString sql;sql.Format("INSERT INTO RecMis(NAME,TEL,AUTOREC) VALUES(\'%s\',,%f,%d)",m_name,m_tel,bl);//values里的格式符根据类型你自己调整db.Execute(sql); YO:: laiyiling(最熟悉的陌生人) 不能用RecSet.AddNew(); RecSet.SetFieldValue("NAME",var); var.vt = VT_I4 ;//指明整型数据 var.lVal = m_tel;这种方式写吗? RecSet.AddNew();m_tel=...;m_name="...";RecSet.Update(); 就是//加入第二个记录,用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();后其他类型的存储都正确,就是中文字符串存储出现乱码了? b1也是COleVariant类型吧!你是怎么指定类型的?SetFieldValue的参数形式有几种,换换其他的看 你也可以同样用SQL语句来修改 忘了说了,我的Name字段在mdb数据库中设置为 "文本"类型 是这样我测试了COleVariant var(m_name); //var.ChangeType( RecSet.AddNew(); RecSet.SetFieldValue("NAME",var);结果乱码////////////////////////////////////////////////////////////RecSet.AddNew(); RecSet.SetFieldValue("NAME","你好");存储正确 请问如何以最简单的方式实现左边带有树状结构的向导? 一个十分怪异的问题,相同的RGB值会有不同的颜色? 如何从list control把某项内容拖动到word里面 有关进程,句柄,实例的理解,大家一起来讨论! 请问怎样把ListBox里面的值取出来存入数据库 请教高手:SDK编程中,如何删除文件中一行数据(以\n结尾) 在VC中如何定义和使用全局变量 关于数据库编程 kingzai拿分 关于钩子的真相 打印报表问题? 如何通过发消息 改变另一程序CTabCtrl 到第二个页面
//#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();
}
sql.Format("INSERT INTO RecMis(NAME,TEL,AUTOREC) VALUES(\'%s\',,%f,%d)",m_name,m_tel,bl);//values里的格式符根据类型你自己调整
db.Execute(sql);
RecSet.AddNew();
RecSet.SetFieldValue("NAME",var);
var.vt = VT_I4 ;//指明整型数据
var.lVal = m_tel;
这种方式写吗?
m_tel=...;
m_name="...";
RecSet.Update();
//加入第二个记录,用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();
后其他类型的存储都正确,就是中文字符串存储出现乱码了?
我测试了
COleVariant var(m_name);
//var.ChangeType(
RecSet.AddNew();
RecSet.SetFieldValue("NAME",var);
结果乱码
////////////////////////////////////////////////////////////
RecSet.AddNew();
RecSet.SetFieldValue("NAME","你好");
存储正确