大家来谈谈<font color="red"><stone>InterBase6</stone></font>&

  • 主题发起人 主题发起人 云飞
  • 开始时间 开始时间
专为程序员申请的聊天室
http://141713.chat.yinsha.com/
谁来当斑竹呀
mail0017@sina.com
 
对我来说最大的感受是insert记录的速度惊人。
 
可是外面的人迷信啊!
不信你跟人家说:我这玩意儿使用inter base 做的......声音小得自己都听不见。
用ms的sql就可以大声说:咱用的是SQL Server 2000!就算你拿SQL当ACCESS用有谁知道?
 
呵呵。讨论非常热闹。很好。IB6当然是一个很不错的数据库系统。稳定、简单、快、发布
方便。不过不是每个人都能理解的。只有用过才有发言权。至于true64耸人听闻的传说还是
我来解释吧。
interbase 使用时如果不小心机器被RESET OR LOST POWER的话,数据库就完蛋了。
不能使用。
曾经网上有很多这种说法,有人甚至看了IB6的源码也这样说。但我作过试验,没有这回事的。
不过我没有在其它系统上做过这种试验,比如MSSQL什么的。
如果你要使用IB6做一些关键数据的应用的话,是得小心点。意思是你在设置上做些变化。就
是将force write设为true。这意味着你对数据库文件的更新是强制的,如果没有完成文件的
回写,该Query是不会返回的。这样当然会牺牲一些速度。不过一般更新数据的操作都很小,
不应该占用太时间。另外,难道你会在关键应用中允许随便reset或miss power吗?
 
请问barton及三代坦克:TIBinstall如何使用。
我的操作是:放一个TIBinstall在Form1上。然后再放上Edit1,edit2,Progressbar1
及一个button1。先设置TIBinstall的installOption.MainCompoments:=[moServer]
(只做这个设置,别的没动)
procedure TForm1.Button1Click(Sender: TObject);
begin
ibinstall1.SourceDirectory:=edit1.Text;//指向我的IBServer的安装盘路径,如:e:/ibserver
ibinstall1.DestinationDirectory:=edit2.Text;//指向IBServer的目标路径,如c:/ibs
ibinstall1.InstallCheck;
end;
function TForm1.IBInstall1StatusChange(Sender: TObject;
StatusComment: String): TStatusResult;
begin
Progressbar1.Position:=Ibinstall1.Progress;
end;
可是等到Progressbar1走到头时程序就死了,我到c盘查看c:/ibs确实被创建,其中也有许多文件。
我执行/bin/IBserver.exe,也确实能执行,(具体能被其它计算机连接,我没有测试)。
 
从自己的安装程序装IB6,有多种选择,例如IS、Wise、InNoSetup等,
脚本可到http://ibinstall.defined.net/下载。
我用IB做了一些应用,从稳定性以及易维护方面来讲,是很不错的,
特别中小型应用。至于数据连接控件,建议选用IBO套件,速度快,发布特
别方便。我一般使用IBO中的TDataSet控件,结合IP控件开发程序,报表用FastReport.
在IBO的众多优点中,我最欣赏数据集的刷新方式,以前用BDE的TQuery开发C/S程
序,刷新数据要Close、Open、Location很不方便,如果用DBGRID显示数据,闪动
很厉害。而IBO数据连接控件只需ReFresh即可,同使用文件型数据库没有差别。
我使用IBO接近两年了,效果不错。但是我感觉在国内,使用IBO的人比较少,
有问题也很难交流,希望更多的人了解和使用IBO。网址:http://www.ibobjects.com
 
为何我编译的udflib.dll文件在Win9x下可用,但放到NT上就不行了,为何?
哪位老兄有编译好的udflib.dll文件,E一个给我行不?
Email: ib6@163.com
 
zl:
你的程序代码好像缺了"执行"一句话。
我在NT4.0+sp6 win2000上都试验过,可以。

IBO可是要花钱的。所以就只好用IBX了。
 
三代坦克:我的实际代码里有执行这句。以上的我打错了。
看了zwx老弟的贴子,我载了一些诸如Wise Install 等安装制作软件
对安装IB6的脚本,正在分析。
其中innosetup的脚本如下:(有点长,不过这个还是最短的)
; This script was first created by ISTool
; http://www.lerstad.com/istool/

[Registry]
Root: HKLM; Subkey: Software/Microsoft/Windows/CurrentVersion/Run; ValueType: string; ValueName: InterBaseGuardian; ValueData: {app}/bin/ibguard.exe; Flags: uninsdeletekey
Root: HKLM; Subkey: Software/Borland/InterBase/CurrentVersion; ValueType: string; ValueName: DefaultMode; ValueData: -r
Root: HKLM; Subkey: Software/Borland/InterBase/CurrentVersion; ValueType: string; ValueName: GuardianOptions; ValueData: 1
Root: HKLM; Subkey: Software/Borland/InterBase/CurrentVersion; ValueType: string; ValueName: ServerDirectory; ValueData: {app}/bin


[Files]
Source: ibconfig; DestDir: {app}
Source: bin/ibserver.exe; DestDir: {app}/bin
Source: interbase.msg; DestDir: {app}
Source: isc4.gdb; DestDir: {app}
Source: isc4.gbk; DestDir: {app}
Source: gds32.dll; DestDir: {sys}
Source: msvcrt.dll; DestDir: {sys}
Source: bin/instreg.exe; DestDir: {app}/bin
Source: bin/ibguard.exe; DestDir: {app}/bin
[Dirs]
Name: {app}/bin
[Run]
Filename: {app}/bin/instreg.exe; Parameters: "install ""{app}"""; Flags: nowait runminimized
Filename: {app}/bin/ibguard.exe; Flags: nowait
[Setup]
AppCopyright=Borland
AppName=Interbase
AppVerName=Interbase version 6.0
DefaultGroupName=InterBase
DefaultDirName={pf}/Borland/InterBase
DisableProgramGroupPage=false
AllowNoIcons=true
[UninstallRun]
Filename: {app}/bin/instreg.exe; Parameters: remove; Flags: runminimized
 
我把离线库移值到IB6上去了,感觉很爽
我觉得IB最大的特点就是开放,开放带来的好处,第一是不要钱,
第二是有很多第三方的工具可用,比如除了IBX还有IBO,除了
IBConsole还有IBAccess(我用过后者,感觉比IBConsole好)
另外还有free及可扩充的UDF可用
我在borland的主页看到,最大的一个IB的数据库产品有200G
 
to wzx:
>>从自己的安装程序装IB6,有多种选择,例如IS、Wise、InNoSetup等,
>>脚本可到http://ibinstall.defined.net/下载。
总不如IBInstall方便的。
>> 我用IB做了一些应用,从稳定性以及易维护方面来讲,是很不错的,
>>特别中小型应用。
完全同意。
>>至于数据连接控件,建议选用IBO套件,速度快,发布特
~~~~~~不会吧。是否有分析过源代码?
IBX的IBDatabase/IBSQL我作过充分细致的研究,感觉Jeff Overcash非常认真地对待
这个项目的。很多思路非常好,很多地方没有占用多余的资源,代码简洁,速度奇快。
我在程序中不用DBGrid所以TDataset对我没有任何用处,我甚至连TField都不用。所以
TIBQuery/TIBTable与我无关。我有一套现在已在IB6上应用成功,将来还可用于任何DB
的简洁引擎,支持在一个查询过程中一次返回多个相关表。但在该引擎的驱动上我用了
IBSQL,主要是这个控件不用TField返回数据,而且速度奇快。返回一个blob的速度几乎
是TQuery的5倍。IBO就更差了。
>>别方便。我一般使用IBO中的TDataSet控件,结合IP控件开发程序,报表用FastReport.
>>在IBO的众多优点中,我最欣赏数据集的刷新方式,以前用BDE的TQuery开发C/S程
>>序,刷新数据要Close、Open、Location很不方便,如果用DBGRID显示数据,闪动
>>很厉害。而IBO数据连接控件只需ReFresh即可,同使用文件型数据库没有差别。
~~~~~~~实现的原理你查过吗?
是不是封装了Open/Close的代码?
>> 我使用IBO接近两年了,效果不错。但是我感觉在国内,使用IBO的人比较少,
>>有问题也很难交流,希望更多的人了解和使用IBO。网址:http://www.ibobjects.com
97年我就用过IBO,也是源码,Borland也官方推荐,但我不认为真的好。当然如果IBX
没有提供IBSQL的话,我也只是认为很一般的控件。
 
左大侠也在用IB,这可是个好消息。
to barton:
“我有一套现在已在IB6上应用成功,将来还可用于任何DB的简洁引擎,
支持在一个查询过程中一次返回多个相关表。但在该引擎的驱动上我用了
IBSQL,主要是这个控件不用TField返回数据,而且速度奇快。”

能细说说这个“引擎”吗?

 
关于金维引擎(KDE)。
1.绕过复杂技术过程,采用尽可能简洁、清晰的方式实现,可以达到以下效果:
a.引擎与应用系统密不可分,不会因为引擎而影响其它系统;
b.引擎的驱动完全是由程序员自己实现的。这样系统可以随意扩充,数据库内部细节对应用系统是完全透
明的。
c.取消了复杂而耗费资源的TField结构来访问数据,而用更简洁的TVField实现。这样在多个线程中并行
访问数据成为可能。
d.实现了字段的嵌套定义。这是TDataset所没有的功能。
2.为了简化数据访问机制,只设七种数据类型
vtUnknown 不明类型
vtInteger 整型
vtString 串型
vtFloat 浮点型
vtDatetime 日期型
vtDataSet 子数据集(数据集的递归定义)
vtStream 流数据(任意Blob)
这里解释一下vtDataset类型。例如一个学生,除了性别、年龄、民族、籍贯等数据外,还包括家长数据、
奖惩数据、每学期、每门功课的成绩数据、每学年的身体状态数据等等。可以根据需要来取。而这些数据
并不是单行的,于是这个数据结构变成:
ID Name Code Birth Sex Nation Parents Scores ...
ID Name Cat Company ID Period Sub Cent ...
1908 张海平 9812012 19910315 男 汉 2897 张平旺 父亲 造纸厂 1902 1 语文 96.0 ...
2898 刘淑玉 母亲 建筑队 1903 1 数学 89.0 ...
3.引擎的最内层为对象定义(访问数据结构),取代传统的TField/TDataset
分三层:第一层是TVDataset,第二层是TVFields,第三层是TVField
第一层包装多行数据集、数据集列名和数据访问方法
第二层为管理单行数据的列表
第三层为单行数据每列的内容、状态标记(新添加/已删除/已更改)
4.引擎中间层定义虚引擎体对象定义 TVDatabase,包括:
虚类方法Error:处理错误信息
查询方法:
虚方法ExecuteQuery:执行一个查询(使用缺省资源,无返回)
虚方法NestQuery:嵌套查询(建立与查询相关的新的资源,不使用缺省资源,无返回)
虚方法IntegerQuery:执行一个查询(使用缺省资源,返回一个整数)
虚方法FloatQuery:执行一个查询(使用缺省资源,返回一个浮点数)
虚方法StringQuery:执行一个查询(使用缺省资源,返回一个串类型数,以一个已分配空间的PChar为载体)
虚方法DataSetQuery:执行一个查询(返回多行数据集,以一个已分配空间的TVDataset为载体)
虚方法UpdateQuery:执行一个查询(传递一个多行数据集,根据数据集中的标记刷新数据库)
引擎操作方法:
虚方法Open: 打开数据库,返回是否连接成功
虚方法Close:; 关闭数据库
虚方法Commit: 提交更新
虚方法Rollback:退回更新
引擎实现部分的回调函数通过事件句柄实现:
事件OnError: 通知出错
事件OnEvent: 通知发生了事件
事件OnQuestion: 需要宿主程序对某个提示作出反应
事件OnStartQuery: 通知已进入查询
事件OnStepQuery: 通知正在对查询结果作处理,每处理一行数据触发一次
事件OnFinishQuery: 通知已完成查询
5.引擎是通过引擎驱动来实现的。引擎驱动就是一组DLL,该驱动必须提供两个输出函数:
function GetDatabase: TVDatabase; stdcall; 返回重载过的TVDatabase;
function ConfigDatabase: Boolean; stdcall; 修改数据库配置,返回是否成功。
该引擎不是服务于整个操作系统,只服务于具体的应用系统,所以,数据库配置可以与应用系统关联。这样就不
需要类似BDE那样的别名配置了。整个配置过程是该应用程序的一部分,如何调用该引擎(如引擎dll的文件名),
以及该引擎在实现时采用什么配置,究竟是采用注册表还是用户自定义或是使用ini均由该应用的程序员规定。
6.我在实现使用Interbase引擎服务我的Campus2000时,配置是这样的:
a.总引擎是Engine.dll,输出以上两个过程,访问注册表:
HKEY_CURRENT_USER/Kingway/Campus2000/1.0/Engine节点下的串量DLL=ibe.dll
将对Engine.dll的访问转为对ibe.dll的访问。
b.ibe.dll具体实现Interbase的驱动,该驱动访问注册表:
HKEY_CURRENT_USER/Kingway/Campus2000/1.0/Engine/InterBase节点下的数据,确定访问的网络协议、数据
库、用户名、角色等等。
如果换一种数据库如MS SQL Server的话,只需将
HKEY_CURRENT_USER/Kingway/Campus2000/1.0/Engine节点下的串量DLL设为mssql.dll即可。至于mssql.dll
如何实现查询、数据库指向就不需要Engine.dll关心了。
 
这套东西不错啊,是商业产品吗?
另外,www.interbase2000.org上不去很久了,有人知道是怎么回事吗?
IBX有没有官方站点(除掉borland),可以下一些sample之类的,
delphi自己的sample太少了
 
左老弟,看来,yysun是反感Interbase的。这个阵营我们得好好把住。

KDE不是什么商业产品,只是我的应用系统的一个数据库解决方案,这是个可以完全提供源码的
方案。我正在完善它,开发一套支持TVField的数据敏感件,内容包括一个容纳PB中全部DataWindow
的部件,而且能非常轻松地用于Application或web页面的开发。当然,它不只是针对Interbase,只
要提供相应的驱动,任何数据库都是可以的。

www.interbase2000.org我很少访问。我们这儿网络不太好,更难说明原因。

IBX的官方站点应该是:
http://ww6.borland.com/codecentral/ccweb.exe/author?authorid=102
上面有些例子,不过并不多。

云飞:能不能结束你的问题,转到:
http://www.delphibbs.com/delphibbs/DispQ.asp?LID=399547
 
多人接受答案了。
 
后退
顶部