#2
heping_fly2023-10-21 22:36
|
Firebird火鸟数据库是一个开源数据库,是从当初的InterBase数据库改过来的。本人的某些软件就使用这种库。为什么不用微软的SQL库呢?主要是Firebird更小巧,资源占用率小,而且连接数据没有限制,不像微软的SQL如果是个人版就只有有限的几个连接数量,总担心在实际应用中受到限制。但Firebird火鸟数据库的中文支持不太好,表名不可以有中文,但好在字段名可以有中文,而偏偏VFP是很早就停止更新的软件,对后来的某些数据库存在兼容性问题。为了解决VFP完全操作Firebird的问题,作如下总结。如果打算使用火鸟数据库开发一个软件,本文可做参考。
VFP用CA或远程视图都可以操作Firebird,用数据库的远程视图可以完成查询和修改,但不可以用远程视图里的筛选功能。如果一定要用筛选,只用一次可以,但存盘后再想修改远程视图则会出错。所以是改后无悔。
用CA可以无问题操作,只是界面中没有筛选功能,需要自己改代码,就是Select....where语句。但要注意的是字段名必须加双引号。如果搞不定,则先在客户端软件Ibexpert里操作正确。
以下是在界面中的CA操作过程,以下操作步骤必须严格执行,错一步都不可以:
1、新建表单,右键数据环境,再按Esc键取消,则出现新的空白窗口。在其右键添加Cursoradapter,再对其右键生成器,在下方数据源类型选择ODBC,连接字符串,将下面连接字符串拷贝进去:
DRIVER=Firebird/InterBase(r) driver;UID=SYSDBA;PWD=masterkey;Client=D:\BHB_Fb\fbclient.dll;CHARSET=none;Dbname=172.18.77.18:D:\BHB_Fb\BHB_JH.FDB;
注意其中部分内容可能要修改,比如Client=D:\BHB_Fb\fbclient.dll;是本地电脑中fbclient.dll的存放位置,必须正确。Dbname=172.18.77.18:D:\BHB_Fb\BHB_JH.FDB是服务器的IP地址和数据库文件在服务器的存放位置,必须正确。CHARSET=none;是建立数据库时选的字符集,必须对应正确。
点测试连接应该OK
再点第二页数据访问,点生成,选择一个服务器端的表,点下方“表.*”将其移至右方(注意只能移动这一项,不可把全部字段都移入,否则将出错!)。此时读入了服务器端的表。
再第三页自动更新页,选中自动更新,再选中更新所有字段,再把主键字段比如ID的钥匙选上,笔不选,确定。
下一步是把包含汉字的字段加双引号(重要!),方法如下:
在数据环境中的刚添加的Crusoradadper上,右键属性,数据页里UpdateNameList项复制粘贴到记事本中,要做的是把其中凡是有汉字的字段都要加入双引号,比如(设备名称 DQ_BH.设备名称)这一项要改为(设备名称 DQ_BH."设备名称")。如果字段太多,则如下替换:执行记事本中的编辑菜单中的替换,分两步操作:1、查找半角的点(即.),替换为半角的点和半角双引号(即.")。全部替换。2、查找半角的逗号(即,),替换为半角双引号和一个半角逗号(即",),则将全部字段都改完,最后再将不含汉字的字段中的双引号都删除,则全部改完,然后复制粘贴回属性UpdateNameList里。
最后把数据环境中的Cursoradapter拖至表单中成为表格,再在表单中放一个按钮,让其执行表格的AutoFit方法调整列宽。至此全部完成。
用远程视图操作
为节省篇幅,以下为简述,其要点在熟悉上述CA操作后自然明白。
建立数据库,建立连接,建立远程视图,用新建视图(不要用视图向导),选择连接后确定,则出现服务器端的众多表,勾选下方的“所有用户表”,重要!别问为什么,不选会出错。然后再把某个表添加,关闭。
第一页选定字段里,点选 表.* 这一项移进去,万不可把所有字段都加入。
再选更新条件页,左下角勾选发送SQL更新,然后立刻在上方空白处右键,选查看SQL,把代码是的字段类型定义的诸如:
DBSetProp(ThisView+".设备类型","Field","DataType","C(10)")
DBSetProp(ThisView+".设备类型","Field","UpdateName","DQ_DNB.设备类型")
DBSetProp(ThisView+".设备类型","Field","KeyField",.F.)
DBSetProp(ThisView+".设备类型","Field","Updatable",.T.)
这一些区域的代码全部复制到记事本中,然后进行查找替换,举例效果是其中的:
"DQ_DNB.设备类型" 要改为 "DQ_DNB."+'"设备类型"'
目的是汉字字段两端要加双引号,但代码中又不能直接加,所以要写成上述样子,每个中文字段名的格式都要改为:单引号双引号字段名双引号单引号。因为数据太多,则需要查找替换,技巧见前面CA里的类似操作。
然后再复制粘贴回去即可。
注意改完后尽量不要设筛选,如果设了,以后就无法修改。要修改就只能重做。