1、获取对话框上编辑框的内容有好几方法,
第一种直接调用成员函数:CString str; GetDlgItemText(编辑框控件ID号,str)
第二种也是调用成员函数:CString str; GetDlgItem(编辑框控件ID号)->GetWindowText(str);
第三种方法直接绑定编辑框控件的对象,DDX_Control(编辑框控件ID,m_obj),obj->GetWindowText(str),DDX_Text(编辑框控件ID,m_str);调用UpdateData()获取str,m_str的值即可
1Access数据库字段没有CTime类型,CTime是和MFC的日期时间控件对应的类型,Access数据库字段类型和时间相关的是DateTime,其入库insert语句和查询select结果都是字符串类型,也就是说如果你MFC程序界面上没有MFC的日期时间控件,你的程序中没必要出现CTime对象;
如果你的程序界面只有一个编辑框,即一个CString类型m_normalDate,那么char std:string CString之间的转换遵循如下方式:
CString转char
CString cstr;
char p = (LPSTR)(LPCTSTR)cstr;
string 转 CString CStringFormat(”%s”, stringc_str());//用stringc_str()要比stringdata()好
//c_str(),返回有”/0“的字符串数组,data(),返回没有”/0“的字符串数组
char 转 CString CStringformat(”%s”, char);
char 转 string string s(char ); //这是初始化,在不是初始化的地先要stringassign()
string 转 char char p = stringc_str();
CString 转 string string s(CStringGetBuffer());//GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间
那么解决第一个报错:
sscanf((LPSTR)(LPCTSTR)m_normalDate, "%d-%d-%d", &nYear, &nMonth, nDay);
或者
sscanf(m_normalDateGetBuffer()c_str(), "%d-%d-%d", &nYear, &nMonth, nDay);
2Access入库语句在DateTime类型时就是一个前后添加‘#’号的字符串,所以%①肯定是%s。
CTime time(nYear, nMonth, nDay);
CString dateTime("#");
dateTime+=timeFormat("YYYY-mm-dd"));
dateTime+="#";
sqlFormat(L"insert into tbl_Table values(%s)",(LPSTR)(LPCTSTR)dateTime);
insert into tbl_Table values(#2013-04-15 23:01#)"
"select date(field_name) from tbl_Table"
"select time(field_name) from tbl_Table"
"select Format(field_name, "yyyy-mm-dd") from tbl_Table"
"select Format(field_name, "hh:ss") from tbl_Table"
SQL Server服务没有开启,如果是SQL Server2000的就打开服务管理器,并启动相应的服务,如果是SQL Server2005以上的打开SQL Server配置管理器,启动SQL Server服务和SQL Server Browse服务
这个还真不知道。。不过我当初运行的时候也常常崩溃,改了很久才把那个命令改对。。
当时连的是SQL数据库,好像是账号密码没设置对,还有数据库的名字没设置对,才导致的。
改完以后就OK了
你用Query analiyzer去打开你的数据库,查询一下试试。
我当时也是找了半天的原因,后来我用这个去查,发现打不开,才找出根本原因的
开始也是一运行就崩溃。。错误都没法找
比如在你的工程目录中建一个 dbf\virmdb //Access数据库,然后你需要做以下 *** 作:\x0d\1在StadAfxh里面添加#include //新加入头文件,用于CDatabase类。\x0d\2在StadAfxh最后的#endif上添加#import "msado15dll" no_namespace rename("EOF","rsEOF")\x0d\这时,你要把msado15dll拷到与dbf同级的目录,也就是工程目录里,当然你可以该路径\x0d\3在你自己的工程里,比如MyProc是你建的工程,添加代码\x0d\CMyPorcApp::CMyProcApp(){\x0d\CoInitialize(NULL);\x0d\SQLConfigDataSource(NULL,ODBC_ADD_DSN, "Microsoft Access Driver (mdb)",\\x0d\ "DSN=MyImage;DBQ=dbf\\virmdb;DEFAULTDIR=dbf"); //注册本地数据库数据源\x0d\m_dbOpenEx("DSN=MyImage;;",CDatabase::noOdbcDialog);//MyImage是数据源名称\x0d\}\x0d\4在前面的函数体之前创建全局变量CDatabase m_db; CRecordset m_rec(&m_db);\x0d\5使用数据库{\x0d\ CString strSQL="select from virdb"; \x0d\ BSTR bstrSQL=strSQLAllocSysString();\x0d\ m_recOpen(CRecordset::dynaset,strSQL);\x0d\ while(!m_recIsEOF()) \x0d\{\x0d\ // 使用数据库的代码,读出来的数据都是字符串型的\x0d\ CString MyVirable;\x0d\ m_recGetFieldValue("字段名",MyVirable); //将某个字段的当前行的值读到MyVirabl中\x0d\ // \x0d\ m_recMoveNext(); //将记录移到下一行\x0d\ }\x0d\}\x0d\\x0d\本程序是自动注册数据源的,当然可以手动注册数据源,关于如何注册数据源并不麻烦,叙述起来不太方面,你就参考其他的吧。不过建议不用手动注册数据源,这样你地程序移植性不好
1 // 这个Open函数的第二个参数为什么和
答:你这里不都是一样的吗?
2m_pRecordset->AddNew(); //为什么要这一句呢?是提示程序要添加新的记录了吗?
答:不是提示,这个是让表添加一个新行。
3m_pRecordset->PutCollect("name", _variant_t(m_Name)); // 这里的PutCollect函数的作用是什么?
答:put 放入的意思。这里是把m_Name值放入表中的name字段中。
4m_pRecordset->MoveFirst(); // 这一句和下面的Move有什么作用??
答:m_pRecordset表示记录集。MoveFirst移动指针到记录集中的第一行。
Move(cursel);移动到cursel)行。
5m_pRecordset->PutCollect("age", atol(m_Age)); //为什么这里的强制转换是用atol,而不是用上面的_variant_t ???
答:因为在表中声明的age是long类型。放入数据时类型要一致。
以上就是关于MFC中如何获取编辑框的内容然后将其添加到数据库中。。全部的内容,包括:MFC中如何获取编辑框的内容然后将其添加到数据库中。。、MFC中如何读取编辑框中的字符串,转换为CTime类型,然后插入到Access数据库中的CTime类型、mfc添加数据库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)