求教MFC对话框中如何将数据写入数据库中

求教MFC对话框中如何将数据写入数据库中,第1张

CString Filepath="Data.accdb"

int i=m_list.GetItemCount()//在列表的队尾添加,所以先获取行数

db.Open(Filepath)

Dbset.Open(AFX_DAO_USE_DEFAULT_TYPE,"SELECT * FROM DataTable",0)

Dbset.AddNew()//在记录集的队尾添加

Dbset.SetFieldValue("Name",_variant_t(m_name))

Dbset.SetFieldValue("Age",atol(m_age))//将CString格式转换为数据库规定的格式

Dbset.SetFieldValue("Extra",_variant_t(m_extra))

Dbset.Update()//一定要及时更新

Dbset.Close()

db.Close()//并关闭////////////////////////////

看这段代码,是把三个edit控件里的值写入Data.accdb数据库文件中。

① 首先把MySQL的服务停掉 在运行窗口输入:net stop mysql

② 把服务器和客户端的字符集改成自己想用的字符集:GB2312或是utf8等……

具体 *** 作为:打开mysql安装目录下的myini.tet;

找到default-character-set,将其改为自己想用的字符集:GB2312或是utf8等……,要注意的是这里有两个default-character-set,用ctrl+f定位在文件最前面输入default就会找到,都要改过来;

③ 重启MySQL服务器,在运行窗口输入:net start mysql

④ 最重要的是一点是,到这里我们已经能够解决乱码问题了,可问题是我们依然还会出现乱码问题,这是因为我们现在的表被创建的时候用的是默认的字符集(latin1),所以这时候我们要把表删除,然后重建就可以了!

在MFC中与SQL数据库相关联的主要是两个类:CDatabase类与CRecordeset类。

1.将SQL中的字段显示在Clistctrl空间的列名中

[cpp] view plain copy

m_gl.Open(CRecordset::dynaset)//打开ODBC连接的数据库  

    short nfilecount=m_gl.GetODBCFieldCount()//获取表中的字段数  

    CODBCFieldInfo fieldinfo//用于存储字段信息  

    for(int n=0n<nfilecountn++)  

    {  

        m_gl.GetODBCFieldInfo(n,fieldinfo)//返回某一字段索引的字段信息 m_strName保存的是字段名  

        int nWidth=m_list.GetStringWidth(fieldinfo.m_strName)+15//确定列头的显示长度  

        m_list.InsertColumn(n,fieldinfo.m_strName,LVCFMT_LEFT,nWidth)//在Clistctrl控件中插入列  

    }  

  

  

    CString strvalue  

    m_gl.MoveFirst()  

    int ncount=0  

    while(!m_gl.IsEOF())  

    {  

  

        m_list.InsertItem(ncount,strvalue)  

        //for(short j=0j<nfilecountj++)  

        //{  

        //  m_gl.GetFieldValue(j,strvalue)//获取某个字段的信息  

        //  m_list.SetItemText(ncount,j,strvalue)//在Clistctrl控件中写入数据  

        //}  

        CString m_ID  

        m_ID.Format("%d",m_gl.m_ID)  

        m_list.SetItemText(ncount,0,m_ID)  

        m_list.SetItemText(ncount,1,m_gl.column1)  

        m_list.SetItemText(ncount,2,m_gl.column2)  

        m_list.SetItemText(ncount,3,m_gl.column3)  

        m_list.SetItemText(ncount,4,m_gl.column4)  

        m_list.SetItemText(ncount,5,m_gl.column4)  

        m_gl.MoveNext()  

        ncount++  

      

    }  

    m_gl.Close()  

    m_db.Close()

2.删除表中的某一行:

[cpp] view plain copy

int nIdxingdb=nIdx1+1  

    m_gl.Open (CRecordset::dynaset)//打开数据库  

    m_gl.SetAbsolutePosition(nIdxingdb)//设置数据库的记录位置  

    m_gl.Delete()//删除记录  

    m_gl.Close()

3.增加到记录中一行:

[cpp] view plain copy

m_gl.AddNew()  

    m_gl.SetFieldNull(NULL,false)  

  

    m_gl.column1 = r.Name  

    m_gl.column5 = r.Photo  

    m_gl.column2 = r.Depart  

    m_gl.column3 =r.IsIntern  

    m_gl.column4=r.Phone  

    m_gl.Update()  

    m_gl.Requery()  

  

    m_gl.MoveFirst()


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9886587.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存