C++数据库简易操作
哎哟我去,哥假期为了赚点别的老师的小外快,努力过年搬砖,搞个excel,还出了诸多问题,然后遇到的最麻烦的一个问题就是,读取速度太慢了,慢的令人发指,经过我对别人给的接口的源文件各种优化,4W多条也要40+s的时间,然后今天去跟那个老师聊了一下,他说,他们原本的数据时mdb格式的数据库文件,然后为了方便观察(保守估计老师电脑没有装Access),于是一师姐就把它转到excel里面去了,其实呢,源数据是mdb的,所以让我改成读取mdb,哎哟我去,早说嘛,我假期某两天的努力就这样白费了。。。话说我上次用数据库MS是当年企鹅实习的时候了,之后就再没碰过了。。。
然后找了一下简单的示例程序看看,好吧,MS比我以前学的简单很多。。。下面是正文。。
算了,不想说那么多废话。。。直接给Code好了。。反正简单易懂。。。
首先要做的事情就是添加头文件#include <afxdao.h>
下面展示如何创建数据库,插入项:
CDaoDatabase db; CDaoRecordset RecSet(&db); CFileFind fFind; BOOL bSuccess; bSuccess=fFind.FindFile("e:\\test.mdb"); //查找文件是否存在 fFind.Close(); if(!bSuccess) { db.Create("e:\\test.mdb"); CString str = "CREATE TABLE MyTable(Name VARCHAR(32),Age VARCHAR(10));";//命令 db.Execute(str); //创建数据库表 RecSet.Open(AFX_DAO_USE_DEFAULT_TYPE,"SELECT * FROM MyTable", 0); //插入数据法一 db.Execute("INSERT INTO MyTable (Name,Age) VALUES ('AAA',10)"); //插入数据法二 RecSet.AddNew(); RecSet.SetFieldValue("Name","BBB"); RecSet.SetFieldValue("Age","20"); RecSet.Update(); RecSet.Close(); db.Close(); }
其中创建mdb文件为了设置版本也可以:
db.Create("***.mdb",dbLangGeneral,dbVersion40);
还有就是创建Table也不一定要用上面那种方法:
CDaoDatabase db; db.Create("m.mdb",dbLangGeneral,dbVersion40); CDaoTableDef tb(&db); tb.Create("MyTable"); tb.CreateField("ID",dbLong,4,dbVariableField|dbUpdatableField); tb.CreateField("Name",dbText,8); tb.CreateField("Date",dbDate,8); tb.Append(); db.Close(); tb.Close();
下面是如何读取数据文件:
COleVariant var; CDaoDatabase db; CDaoRecordset RecSet(&db); CString sPath = "E:\\总表.mdb"; db.Open(sPath); RecSet.Open(AFX_DAO_USE_DEFAULT_TYPE,"SELECT * FROM t_power_data",NULL); CString s1,s2; while(!RecSet.IsEOF()) { var.ChangeType(VT_DATE, NULL); RecSet.GetFieldValue("time",var); DATE _date = var.date; COleDateTime t; t.m_dt=_date; s2= t.Format("%Y-%m-%d-%H-%M-%S"); AfxMessageBox(s2); var.ChangeType(VT_R4, NULL); RecSet.GetFieldValue("W_avg",var); double dVal = var.fltVal; s1.Format("%f", dVal); AfxMessageBox(s1); RecSet.MoveNext(); //移动到下一条记录 } RecSet.Close(); db.Close();
其中上面打开数据表的第7行代码,也可以用下面形式来代替:
CDaoDatabase db; db.Open("m.mdb"); CDaoTableDef tb(&db); tb.Open("MyTable");
更一般的,执行命令,实现删除修改什么的可以用下面的方法,但是数据库命令不能写错。
CDaoDatabase db; CDaoRecordset RecSet(&db); db.Open("e:\\test.mdb"); db.Execute("update MyTable set Name='CCC',Age='30' where Name='AAA'"); RecSet.Close(); db.Close();
也可以用下面的方法添加,修改,删除,查询数据:
添加:
CDaoDatabase db; db.Open("m.mdb"); CDaoTableDef tb(&db); tb.Open("MyTable"); CDaoRecordset rs(&db); rs.Open(&tb); rs.AddNew(); COleVariant varl; varl.ChangeType(VT_I4); varl.lVal = 31415926L; rs.SetFieldValue("ID",varl); varl.ChangeType(VT_BSTRT, NULL); varl.SetString("张三",VT_BSTRT); rs.SetFieldValue("Name",varl); varl = COleVariant(COleDateTime(2012,9,28,0,1,0)); rs.SetFieldValue("Date",varl); rs.Update(); rs.Close(); tb.Close(); db.Close();
修改数据:
CDaoDatabase db; db.Open(“m.mdb”); CDaoTableDef tb(&db); tb.Open(“MyTable”); CDaoRecordset rs(&db); rs.Open(&tb);COleVariant varl; rs.MoveFirst(); rs.Edit(); varl = COleVariant(“王五”,VT_BSTRT); rs.SetFieldValue(“Name”,varl); rs.Update();rs.Close(); tb.Close(); db.Close();
删除:
CDaoDatabase db; db.Open("m.mdb"); CDaoTableDef tb(&db); tb.Open("MyTable"); CDaoRecordset rs(&db); rs.Open(&tb); rs.MoveFirst(); rs.Delete();
查询:
CDaoDatabase db; db.Open("m.mdb"); CDaoTableDef tb(&db); tb.Open("MyTable"); CDaoRecordset rs(&db); rs.Open(&tb,dbOpenDynaset);//< -注意这里 rs.FindFirst("ID=0"); rs.FindNext("ID=0"); COleVariant var; rs.GetFieldValue("Name",var); AfxMessageBox(V_BSTRT(&var));
【完】
本文内容遵从CC版权协议,转载请注明出自http://www.kylen314.com