嘉定都市网

查看:4160 回复:44 发表于 2005-1-6 22:09

该用户从未签到

qrcode
跳转到指定楼层
楼主
发表于 2004-12-9 18:34:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

[求助]哪为高手会写数据库啊? [复制链接]

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
.cpp文件~~~就很一般的那种~~
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享淘帖 支持支持 反对反对
回复

使用道具 打印 举报

该用户从未签到

沙发
发表于 2004-12-10 13:10:54 | 只看该作者
*.cpp 是 Microsoft Visual C++ 的工程文件啊~怎么扯到数据库上了?
回复 支持 反对

使用道具 打印 举报

该用户从未签到

板凳
发表于 2004-12-10 21:52:51 | 只看该作者
mdb?
       

此贴由 evolsee 在 2004-12-10 21:53:14 最后编辑
回复 支持 反对

使用道具 打印 举报

该用户从未签到

地板
 楼主| 发表于 2004-12-11 14:48:13 | 只看该作者
就是在cpp环境下,也就是用c++编写,最好用c~~~~~我们的作业啊~~我好久没听课了咋办啊~~哪位高手救救我啊~~
回复 支持 反对

使用道具 打印 举报

该用户从未签到

5
发表于 2004-12-12 07:33:14 | 只看该作者
Visual C++ 1.5下应用MFC进行ODBC编程
1.m-db连接数据源
m-db在完成定义构造后,要调用CDatabase的打开(Open)函数以进行数据源的实际连接:
m-db.Open(lpszDSN, bExclusive, bReadOnly, lpszConnect);
打开函数需要输入四个参数。lpszDSN:要连接的数据源的名字,如果lpszDSN=NULL且lpszConnect中也没有指明数据源名,则该调用会自动出现一个对话框列出所有可用的数据源(名),让用户选择。bExclusive:只支持“假”(False)值,表示为共享(share)方式连接。因此,应用程序在运行前,一定要装入share.exe或在Windows的system.ini中装入vshare.386。 ReadOnly:指明数据源操作方式是“只

读”还是可以修改。lpszConnect: 指明连接字符串,包括数据源名、用户标识码、口令等信息。该字符串必须以“ODBC;”开头,表示该连接是与一个ODBC数据源的连接(考虑以后版本支持非ODBC数据源)。
m-db打开后,其指针可以传给m-recset作为其数据源。m-db关闭后,将关闭所有CRecordset对它的连接,m-db也可以重新打开。
2.m-db操作数据
数据源打开后,即可对数据库文件中的数据表格进行操作,操作以调用SQL语句方式进行,可直接通过ODBC API函数,或者CDatabase类成员函数ExecuteSQL。数据表名在SQL语句中指定,如下语句则在所在的数据源中的clerk表中插入一个记录,记录的name字段值为"chen"。
m-db.ExecuteSQL("insert into clerk(name) value('chen')");3.m-recset连接数据m-recset在构造时,可传入一个CDatabase对象指针,作为m-recset的数据源,当为NULL时,必须重载CRecordset的函数GetDefaultConnect,以提供数据源连接字符串(相当于m-db.Open中的lpszConnect)。如下则表示连接名为COMPANY的数据源(当传入了合法的CDatabase对象指针时,该函数将不被调用)。
CString CUserset::GetDefaultConnect()
{
return"ODBC;DSN=COMPANY;";
}4.m-recset选取记录和字段
m-recset在调用打开函数时,即获得了符合条件的一组记录,条件语句在Open函数中的lpszSQL中给出,如果lpszSQL为NULL,则必须重载CRecordset的函数以提供该语句。该语句是一个SELECT语句,带或不带where和order by子句(如果不带,where和Order by的条件也可在CRecordset的两个预定义成员变量m-strFilter和m-strSort中给出)。lpszSQL也可以只是一个数据表名(table-name),也可以是对内嵌在数据库文件中的查询程序的调用语句。所选择的一系列字段名,在成员函数DoFieldExchange中由一系列RFX-函数指定。RFX-(Record Field Exchange)函数,使字段和成员变量一一建立类型对应关系。另外,m-strFilter中也可以带变量参数(用"?"表示,如"fieldl>=? AND field2<=?"),参数与成员变量的对应关系也在DoFieldExchange中由RFX-函数指定(串中的"?"将被参数变量值逐一替换)。
void CUserset:oFieldExchange(CFieldExchange* pFX)
{
pFX->SetFieldType(CFieldExchange:utputColumn);
/*以下为字段连接 */
RFX-???(pFX,"field1",m-var1);
RFX-???(pFX,"field2",m-var2);
...
RFX-???(pFX,"fieldn",m-varn);
pFX->SetFieldType(CFieldExchange::param);
/*以下为参数连接*/
RFX-???(pFX,field1,m-param1);
RFX-???(pFX,field2,m-param2);
...
}其中,???为ODBC SQL数据类型名,如RFX-Double,RFX-Text等。
综合上述,选取记录和字段实际是由下列语句完成:
SELECT rfx-field-list FROM table-name[WHERE m-strFilter][ORDER BY m-strSort]
字段变量和参数变量的个数一定要在调用打开函数前(如构造函数中)准确地赋值给成员变量m-nFields和m-nParams。m-recset在打开后的任何时候调用Requery()函数,将根据新的查询条件(例如修改了参数变量值)重新选取记录。
5.m-recset操作数据
记录集合生成后,其当前记录的各字段值被保存在前述的各字段变量中,如果调用CRecordset的滚动(scroll)函数,如MoveFirst(),MoveNext(),MovePrev(),MoveLast()等,字段变量的值将自动跟随“当前”记录的位置的变化而变化。IsBOF(),IsEOF()用于判别是否移动到记录的头或尾。
数据操作主要包括删除(Delete),添加(AddNew)和更改(Edit),一般流程为:
if(m-recset.CanUpdate()) /*是否允许修改*/
{
if (m-db.CanTransact()) /*是否支持“批”处理*/
{
m-db.BeginTrans();
m-recset.AddNew();
/* 修改字段变量值 */
. . .
m-recset.Update();
m-db.CommitTrans();
if(catch error)
m-db.RollBack();
}
}
对于AddNew和Edit,修改字段变量后一定要调用函数Update(),否则更新将丢失,而Delete操作则不必进行字段值修改和调用Update()。
上述的CDatabase的四个函数是ODBC为保证数据操作的可靠性而提供的“批”处理函数,即在BeginTrans和CommitTrans之间的数据修改如果出现任何异常,可通过函数RoolBack来恢复所做的修改。
在多用户系统使用时,每一个数据源可以被多个用户的多个任务连接,不同的任务可同时修改相同的数据源。ODBC提供了两种数据表更新的同步机制(在m-recset.Open函数中指定),“静态”的(snapshot)和动态的(dynaset)。前者是一组静态的记录集合,当建立后不会改变,除了反应自己的添加/删除外,不反应别的用户的修改,除非调用了Requery重新建立。后者是一组动态的记录集合,自己或别的用户所作的修改随时反应到集合中来(当然也可用Requery重建),以保持记录与数据源的同步。在应用中,应根据需要确定使用哪一种方式。
结束语
从以上讨论可以看出,ODBC应用接口十分简便!再加上Visual C++中的AppWizard和ClassWizard自动生成框架代码功能,连接一个数据源,生成一个CRecordset对象,就更快捷了。
应用程序只需关心数据的处理而不必费心数据的存取,另外,另一个与ODBC有关的类CRecordView,是一个窗口类CWnd的派生类,建立在CRecordset上,可直接构造数据库记录显示窗口,某些情况下也不
妨一用。


既然是你的作业,给你转篇文章看看,下面就要自己去做了,孩子!


       

此贴由 hzhou 在 2004-12-12 07:33:59 最后编辑
回复 支持 反对

使用道具 打印 举报

该用户从未签到

6
 楼主| 发表于 2004-12-14 10:39:52 | 只看该作者
不是啊,我们做的都是很简洁的那种啊:
1、        建立数据库表
2、        能够对数据库中的单表进行数据导入
3、        能够对数据库中的单表进行插入
4、        能够对数据库中的单表进行查询
5、        能够对数据库中的单表进行更新
6、        能够对数据库中的单表进行删除
我们是刚接触C语言,所以请大家帮帮忙啊~~~
为什么。。。。。。。。。为什么。。。。。。。。么人救我。。。。。。。
跟ODBC不搭介的啊~~~就是用C在C++环境下做~~~~高手救救我啊~~~
看来我得自杀了`~~~

       

此贴由 ronalzeido 在 2004-12-14 19:27:13 最后编辑
       

此贴由 ronalzeido 在 2004-12-16 12:00:41 最后编辑
       

此贴由 ronalzeido 在 2004-12-17 13:21:10 最后编辑
回复 支持 反对

使用道具 打印 举报

该用户从未签到

7
发表于 2004-12-18 00:28:42 | 只看该作者
楼主是念哪个学校的?你是计算机系的吗???象这个样子下去,没前途的。改行吧!
让我来指出你所范的一些基本错误:
第一,C是C,C++是C++,两者有着及其相近的血缘关系,但毕竟有所区别。所以“C在C++环境下面做……”这句话,是错的;
第二,跟ODBC不搭介?朋友,难道你有水平可以自己开发数据库引擎的能力?调用ODBC可以很简单的连接、操作数据库。
第三,其实也没什么第三拉,只想说你是属于不太聪明的那一种人。要偷懒你也要会偷懒的方法啊。网上面有关数据库编程的C,或者C++的代码遍地都是。会使用搜索引擎吗?google、baidu知道吗?
回复 支持 反对

使用道具 打印 举报

该用户从未签到

8
 楼主| 发表于 2004-12-20 08:55:50 | 只看该作者
楼上是念哪个学校的?我是没前途了~~~但我还在垂死挣扎~~~这个世界不会这么绝情的~~
回第一:C在C++环境下面做……”这句话,不可能错,C++完全包容C。。。。。;
回第二:我们是用我们刚学的C知识做一个数据库,不用什么ODBC。。虽然我不知道什么是ODBC。。。。。
回第三:网上我已经找过了,不可能有我们的作业之类的,所以才来找现实中的高手~~
楼上是高手么??如果是,那请救我一命~~~如要报酬,尽管说~~~
回复 支持 反对

使用道具 打印 举报

  • TA的每日心情
    擦汗
    2017-5-8 09:36
  • 签到天数: 184 天

    [LV.7]常住居民III

    9
    发表于 2004-12-20 09:23:38 | 只看该作者
    应该是用到ODBC的~~~会简单很多的
    回复 支持 反对

    使用道具 打印 举报

    该用户从未签到

    10
     楼主| 发表于 2004-12-20 09:43:47 | 只看该作者
    应该没用到吧~~~我太郁闷了~~~
    回复 支持 反对

    使用道具 打印 举报

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    发表新贴 返回顶部