vs2010 将mysql中数据导入到MFC列表中显示乱码 10
代码如下BOOLCsqltextDlg::OnInitDialog(){CDialogEx::OnInitDialog();//将“关于...”菜单项添加到系统菜单中。/...
代码如下
BOOL CsqltextDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 将“关于...”菜单项添加到系统菜单中。
// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
m_List.SetExtendedStyle(LVS_EX_FLATSB
|LVS_EX_FULLROWSELECT
|LVS_EX_HEADERDRAGDROP
|LVS_EX_ONECLICKACTIVATE
|LVS_EX_GRIDLINES);
m_List.InsertColumn(0,_T("ID"),LVCFMT_LEFT,100,0);
m_List.InsertColumn(1,_T("Name"),LVCFMT_LEFT,100,1);
m_List.InsertColumn(2,_T("CountryCode"),LVCFMT_LEFT,100,2);
m_List.InsertColumn(3,_T("District"),LVCFMT_LEFT,100,3);
m_List.InsertColumn(4,_T("Population"),LVCFMT_LEFT,100,4);
MYSQL m_MySQL;
mysql_init(&m_MySQL);
if(!mysql_real_connect(&m_MySQL,"localhost","root","159753","world",3306,NULL,0))
{
AfxMessageBox(_T("数据库连接失败"));
return FALSE;
}
char *ch_query;
ch_query="SELECT * FROM city";
if(mysql_real_query(&m_MySQL,"SELECT * FROM city",(UINT)strlen(ch_query))!=0)
{
AfxMessageBox(_T("读取数据表格失败!"));
return FALSE;
}
MYSQL_RES *result;
MYSQL_ROW row;
if(!(result=mysql_use_result(&m_MySQL)))
{
AfxMessageBox(_T("读取数据集失败"));
return FALSE;
}
CString str;
int i=0;
while(row = mysql_fetch_row(result))
{
str.Format(_T("%s"),row[0]);
m_List.InsertItem(i,str);
str.Format(_T("%s"),row[1]);
m_List.SetItemText(i,1,str);
str.Format(_T("%s"),row[2]);
m_List.SetItemText(i,2,str);
str.Format(_T("%s"),row[3]);
m_List.SetItemText(i,3,str);
str.Format(_T("%s"),row[4]);
m_List.SetItemText(i,4,str);
i++;
}
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
同样的代码在去掉str.Format(_T("%s"),row[i]);中的 _T()后在VC6.0中可以显示正常的英文 如下图
下图是数据库中表信息 展开
BOOL CsqltextDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 将“关于...”菜单项添加到系统菜单中。
// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
m_List.SetExtendedStyle(LVS_EX_FLATSB
|LVS_EX_FULLROWSELECT
|LVS_EX_HEADERDRAGDROP
|LVS_EX_ONECLICKACTIVATE
|LVS_EX_GRIDLINES);
m_List.InsertColumn(0,_T("ID"),LVCFMT_LEFT,100,0);
m_List.InsertColumn(1,_T("Name"),LVCFMT_LEFT,100,1);
m_List.InsertColumn(2,_T("CountryCode"),LVCFMT_LEFT,100,2);
m_List.InsertColumn(3,_T("District"),LVCFMT_LEFT,100,3);
m_List.InsertColumn(4,_T("Population"),LVCFMT_LEFT,100,4);
MYSQL m_MySQL;
mysql_init(&m_MySQL);
if(!mysql_real_connect(&m_MySQL,"localhost","root","159753","world",3306,NULL,0))
{
AfxMessageBox(_T("数据库连接失败"));
return FALSE;
}
char *ch_query;
ch_query="SELECT * FROM city";
if(mysql_real_query(&m_MySQL,"SELECT * FROM city",(UINT)strlen(ch_query))!=0)
{
AfxMessageBox(_T("读取数据表格失败!"));
return FALSE;
}
MYSQL_RES *result;
MYSQL_ROW row;
if(!(result=mysql_use_result(&m_MySQL)))
{
AfxMessageBox(_T("读取数据集失败"));
return FALSE;
}
CString str;
int i=0;
while(row = mysql_fetch_row(result))
{
str.Format(_T("%s"),row[0]);
m_List.InsertItem(i,str);
str.Format(_T("%s"),row[1]);
m_List.SetItemText(i,1,str);
str.Format(_T("%s"),row[2]);
m_List.SetItemText(i,2,str);
str.Format(_T("%s"),row[3]);
m_List.SetItemText(i,3,str);
str.Format(_T("%s"),row[4]);
m_List.SetItemText(i,4,str);
i++;
}
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
同样的代码在去掉str.Format(_T("%s"),row[i]);中的 _T()后在VC6.0中可以显示正常的英文 如下图
下图是数据库中表信息 展开
2个回答
展开全部
我也遇到跟楼主一样的问题,但是我不同的是:我的mysql 数据库是CentOS虚拟机的,数据库,表,字段都用gb2312编码。然而,在代码中查询之前加入
mysql_options(&m_mysql,MYSQL_SET_CHARSET_NAME,"gb2312");
或者
mysql_query(&m_mysql,"set names gb2312;");
查询的结果每一列,不管是整形还是英文字段,都是乱码。
而用insert或者update操作数据库,即使是中文,也不出现乱码。
mysql_options(&m_mysql,MYSQL_SET_CHARSET_NAME,"gb2312");
或者
mysql_query(&m_mysql,"set names gb2312;");
查询的结果每一列,不管是整形还是英文字段,都是乱码。
而用insert或者update操作数据库,即使是中文,也不出现乱码。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
if(!mysql_real_connect(&m_MySQL,"localhost","root","159753","world",3306,NULL,0))
{
AfxMessageBox(_T("数据库连接失败"));
return FALSE;
}
char *ch_query;
在这里加一句设置SQL里有一句是设置数据库用的字符集的 函数 我以前和你遇到过一样的问题
自己百度下 MYSQL更改字符集的sql语句 把字符集改成 GBK936 或者GB-2312就没问题了 现在数据库不支持中文
ch_query="SELECT * FROM city";
if(mysql_real_query(&m_MySQL,"SELECT * FROM city",(UINT)strlen(ch_query))!=0)
{
AfxMessageBox(_T("读取数据表格失败!"));
return FALSE;
}
另外 数据库本身出要建成GB2312的
{
AfxMessageBox(_T("数据库连接失败"));
return FALSE;
}
char *ch_query;
在这里加一句设置SQL里有一句是设置数据库用的字符集的 函数 我以前和你遇到过一样的问题
自己百度下 MYSQL更改字符集的sql语句 把字符集改成 GBK936 或者GB-2312就没问题了 现在数据库不支持中文
ch_query="SELECT * FROM city";
if(mysql_real_query(&m_MySQL,"SELECT * FROM city",(UINT)strlen(ch_query))!=0)
{
AfxMessageBox(_T("读取数据表格失败!"));
return FALSE;
}
另外 数据库本身出要建成GB2312的
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询