C++ Builder数据库综合开拓实践
当前位置:以往代写 > C/C++ 教程 >C++ Builder数据库综合开拓实践
2019-06-13

C++ Builder数据库综合开拓实践

C++ Builder数据库综合开拓实践

副标题#e#

一套本来在Access上开拓的桌面系统,网页调阅利用ASP编程,数据维护系统利用C++Builder编程。由于Access是一个桌面的共享型数据库,所以在通用性和网络开拓方面都存在一些问题。因此,需要将该系统移植随处事器型的数据库上。使系统既可以通过桌面软件维护数据,又可以有大量用户通过网页调看数据(功效)。

系统初始软件为:Windows98第二版、Access97、C++Builder4.0、C++Builder5.0、MDAC(Microsoft Data Access Component 2.6中文版)。

一、移植到Oracle的实验

在呆板上安装Oracle 7.3桌面版,由于利用不纯熟,所以选择默认安装,除选择语言Simplified Chinese外,其他都选择默认,一路装下去,没有问题,从头启动系统。运行Net Easy Config,设置需要的数据库别名,然后用SQL Net毗连试验,用户名输入system,暗码输入manager,毗连处事器留意,不要输入处事器的地点,而是输入适才成立的别名,进去了。Ok!

此时开始测试ODBC,成立ODBC数据源。此时,ODBC中有两个有关Oracle的驱动,一个是Microsoft ODBC for Oracle,另一个是Oracle 7.3,这是该公司本身开拓的驱动。但是怎么选择驱动措施都不可,不是提示Oracle的驱动没有安装,就是说某个DLL文件找不到。真是说不可,就不可,行也不可。

多次试验均无效。。。。

查抄AUTOEXEC.BAT文件,个中有ORACLE的路径。那末,问题会在什么处所呢?本着猜疑一切的立场,在MSDOS方法下随手输入了一个PATH呼吁,奇怪,内里居然没有ORACLE的路径!打开AUTOEXEC.BAT文件一琢磨,路径是不是太长?把路径中的其他目次全都注释掉,重启系统,嘿!数据源可以成立了,并且两个驱动措施哪个都可以或许事情。本理由于系统中安装了C++Builder的两个版本,而该软件的目次又出格深,造成PATH情况变量的溢出,而在WINDOWS情况下启动时的提示我们看不到,所以没有发明这个问题。此刻知道了,从头调解一下AUTOEXEC.BAT文件,保存一个C++Builder的路径。今后得记着安装C++Builder时最好本身指定一个目次,这样可以缩短路径。这但是说行就行,不可也行。

颠末对Oracle的测试,发明将Access数据库直接移植到Oracle数据库中时,对文本字段(TEXT,MEMO)的迁移总有问题,且该系统利用、安装过于巨大,对呆板设置的要求也太高,而该系统需要安装的用户较多,且利用者程度东倒西歪,所以抉择改用此刻在自由软件界较量风行的免费数据库系统MySQL。

二、移植到MySQL的经验

1.该系统的安装较量简朴,若认为本身没有本领安装该软件的话,还可以从网络上下载一个叫PHPTriad for windows的软件,该软件安装时没有任何选项,自动安装好MySQL。(实际上,该软件同时还安装好了APACHE处事器、PHP语言表明器,这正好切合未来把ASP的网页换到PHP上去;别的,该软件还同时安装设置好了一个网页数据库维护东西PHPMyAdmin,PHPMyAdmin对付SQL语言不算熟的人来说打点数据库极其利便。)

2.再安装MYODBC(即ODBC for MySQL,我的是2.5版本),留意下载该软件时,要分清95版照旧NT版的。安装也很简朴,一路OK。好了,成立数据源work,填好IP地点,数据库名填mymember(这时系统提供的数据库),举办测试,不可?改用系统自动安装的sample-mysql数据源毗连,链上了。仔细查抄设置,没有错误,为什么系统本身做的数据源可以用,我做的就不可呢?把本身成立的删掉,把sample-mysql更名为work,再毗连,嘿嘿,不可了!哈哈,本来就出在名字上,在work后头加上-mysql,再毗连,好了,本来myodbc要求它的数据源名称必需以mysql末了!办理了数据源,下面开始移植本来的Access数据库。

移植事情较量简朴,打开Access数据库,选中第一张表,从File菜单中选择“另存为/导出”,选择“另存为一个外部文件或数据库”,选确定,在弹出的对话框中的“生存范例”下拉选单中选择“ODBC数据库”,又弹出一个“导出”的对话框,假如规划给该数据表更名的话,此刻可以输入新的名字,然后选择确定,在弹出的“选择数据源”对话框中点Machine Data Source(呆板数据源),找到本身成立的work-MySQL数据源,按确定。此时会回到Access数据库,假如数据表很大的话,状态栏中会有一个导出的进度,不然,导出已经完成。

导出乐成后,通过PHPMYADMIN查抄导出的数据库,布局、内容都正常。需要留意的是,假如数据表顶用到了Access提供的ID(自动增量)字段的话,需要手工在方针数据库中修改对应字段的属性(这在PHPMyAdmin中很容易实现,找到该字段后点“改变”,在该字段的属性最后一项“特别”的下拉选单中选择auto_increment,然后生存。PHPMyAdmin的界面是英文的?其实只要在安装有PHPMyAdmin的目次Apache\Htdocs\PHPMyAdmin中找到config.inc.php文件,搜索require,把引号中的“english.inc.php”改成“chinese_gb.inc.php”,再去挪用网页中的PHPMyAdmin,嘻嘻,是不是酿成中文了?其实chinese_gb.inc.php是一个文件名,就在该目次下,你还可以把界面酿成BIG5码呢)。

#p#分页标题#e#

3.终于把移植的事情做完了,下面开始用C++BUILDER编程。对数据库利用ADO来会见。步调如下:在ADO控件标签中选ADOTable,在主窗口上先安排一个ADOTable1,然后点击左边工具调查器(Object Inspector)中ConnectionString右边的“…”图标,选“Use Connection String”,点“Build”,在“Provider”标签中选择“Microsoft OLE DB Provider for ODBC Drivers”,点“Next>>”按钮,在“specify the source of data”中选“use data source name”,从下拉选单中选择数据源work-MySQL,点“Test Connection”,显示毗连乐成,确定,OK,返回,在工具调查器中Table Name属性点下拉选单,选择需要的数据表。再从Data Access控件标签中选DataSource,在主窗口上安排一个DataSource1,在工具调查器中DataSet属性点下拉选单,选择ADOTable1,下面举办界面输出的机关,选择“Data Controls”控件标签中的DBEdit按照需要安排,并把DataSource属性配置为DataSource1 ,DataField属性配置为所需要的字段名。如此安排几个字段,最后从“Data Controls”控件标签中选“DBNavigator”放在窗口上。再把ADOTable1的Active属性改为true,咦,怎么有的字段显示成(MEMO),先不管他,运行措施,输入一些内容,点击提交,怎么没了?有的字段还缩短了,多试屡次,发明新输入的内容不能高出本来的长度,那么本来是空的字段就永远没法输入内容了。这是怎么回事?这种用法必定没有问题,以前在Access数据库上就是这么用的。那么,就是MySQL的ODBC有问题,退出C++Builder,打开数据源的选项仔细阐明,个中第一项vaaaa很象。把它选中,确定,从头运行C++Builder,再运行措施,一切OK。本来MySQL这样的自由软件,其ODBC选项许多,是为了适应各方面需要,不象微软或其他的数据库那样默认值就可以用。这个选项大概是为了优化一些网络上的应用,而把数据库字段的默认值老是假设为最小状态,从而造成这个问题。这大概也是自由软件的一个小缺点吧。


#p#副标题#e#

三、ASP会见MySQL数据库的问题

本来的主页中大量利用了ASP会见数据库,个中典范的用法是:

dim LK_CONN
set LK_CONN=server.createobject("ADODB.CONNECTION")
LK_CONN.open "onduty_mysql","root",""
‘以上成立数据库的毗连
dim RS_NEWS
set RS_NEWS = server.createobject("adodb.recordset")
sql = "SELECT * FROM NewsPic"
RS_NEWS.open sql,LK_CONN,1,1
‘以上成立对表的会见
‘下面显示内容,为表达简朴,没有名目,引号中为字段名
=RS_NEWS("Extract")
=RS_NEWS("Pic")

这一段代码没有问题,实现了滑腻过渡;可是有个体处所,有写入操纵,数据不能正常读出。该段代码如下:

dim RS_COUNT
set RS_COUNT = server.createobject("adodb.recordset")
RS_COUNT.open "SELECT * FROM count",LK_CONN,3,3
'会见计数器
dim Zcount
Zcount=RS_COUNT("Count")
Zcount = Zcount + 1
RS_COUNT("Count").Value=Zcount
RS_COUNT.Update
RS_COUNT.Close

开始猜疑这一段后头有写入操纵,所以不能正确执行,但颠末仔细较量和测试,发明问题不在是否写入上。这一段的代码主要是用了ASP会见Access数据库时直接填入数据库名的要领,而没有利用SQL语句,我们把打开数据库的处所改为“select * from 表名”,措施遂事情正常。

结论:编程时应该只管利用通用性好的要领,这样对付系统的通用性、可移植性来说,照旧很重要的。

#p#副标题#e#

四、ODBC的问题

在C++Builder中有的处所要用到SQL查询,因此,有一段措施利用的是ADOQuery控件,原来这种用法在其他呆板上用过,没有问题,但是在这里却不可。详细环境如下:安排一个ADOQuery,ConnectionString属性、TableName属性和前面的ADOTable属性配置一样,Active属性保持false,再添加一个DataSource控件和几个DBText控件,配置同前。然后在FormCreate(表单结构函数)中添加如下代码:

#p#分页标题#e#

ADOQuery1->Active=false;
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("select * from Names order by ID");
ADOQuery1->Active=true;
while (!ADOQuery1->Eof)
{
ComboBox1->Items->Add(ADOQuery1->FieldByName("Name")->AsString);
ADOQuery1->Next();
}
//后一段
ADOQuery1->Active=false;
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("select * from Dutys order by ID");
ADOQuery1->Active=true;
while (!ADOQuery1->Eof)
{
ComboBox2->Items->Add(ADOQuery1->FieldByName("Duty")->AsString);
ADOQuery1->Next();
}

就这么一段代码,在该呆板上怎么都不能运行,系统老是提示“BOF或EOF中有一个为真。。。。”的错误,将注释后头的一段删掉,系统可以运行,但退出措施时呈现犯科错误,说明是带妨碍运行。重复查察找不出措施的明明错误,把措施拿到其他呆板上可以通过,两个呆板的最主要不同就是ODBC的版本差异。

于是想将ODBC降为2.5英文版,找到MDAC2.5版安装了屡次都不可,只能手工删除了,在WINDOWS目次中搜索出所有前缀为ODBC的文件,然后删除program files\common files中的system目次,再从头安装MDAC(Microsoft Data Access Component 2.5英文版),再运行该措施,一切正常。

结论:不知道是MDAC2.6版本的问题,照旧因为它是中文版的问题,总之,造成系统的兼容性不是很好,发起各人在编程时也应该只管利用已经熟悉的情况,而不要老是去实验太新的东东。

虽然,假如是我这一段代码有问题,还但愿有好手能出来指导。

以上是我们在一次数据库系统的移植开拓进程中呈现问题息争决要领的真实记录,固然问题都很小,可是让我们在开拓进程中走了不少弯路,所以把它记录下来,供各人参考,但愿对伴侣们的开拓有所辅佐。个中的问题也但愿有伴侣可以或许指出更好的办理步伐。

    关键字:

在线提交作业