调查一下各位高手对Firebird 1.5的看法!

leehq 2004-05-04 06:32:45
各位觉得Firebird 1.5比Interbase6.x有哪些优点?
Firebird 1.5在运行中会有什么问题?(比如文件损坏或者数据混乱之类的)
...全文
316 29 点赞 打赏 收藏 举报
写回复
29 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
leehq 2004-07-15
up
  • 打赏
  • 举报
回复
leehq 2004-07-01
up
  • 打赏
  • 举报
回复
alphax 2004-06-30
刚才发了,请查收
  • 打赏
  • 举报
回复
coaco 2004-06-30
非常感谢,关于initialization留待以后有机会找找对应于BCB应该是什么样的情况。
  • 打赏
  • 举报
回复
coaco 2004-06-30
还没有收到,没发吧?
  • 打赏
  • 举报
回复
alphax 2004-06-30
这主要是针对Delphi用户而言的,

先看IBIntf单元的GetGDSLibrary函数

function GetGDSLibrary : IGDSLibrary;
begin
if not Assigned(GDSLibrary) then
//如果本地的GDSLibrary全局变量尚未创建
if Assigned(FRegisterGDSLibrary) then
GDSLibrary := FRegisterGDSLibrary
else
//如果没有注册别的GDSLibraryFactory的话,使用默认的IGDSLabrary
GDSLibrary := TDynamicLibrary.Create;

Result := GDSLibrary;
end;


每个IBX控件都使用GetGDSLibrary函数来获得IGDSLibrary接口的,
Delphi有initialization的概念,这些部分的代码在进入程序入口以前被调用,
调用的顺序依照它们出现在program uses部分的顺序(还有一些其他的规则,这里不说了)

如果某个单元在initialization部分使用了IBX,很显然,
如果此前没有注册一个Factory函数,
对GetGDSLibrary会导致创建一个默认的IGDSLabrary并存储在全局变量中

这个注释只是用于Delphi用户,并且通常不会出现注释中说的情况
但是如果你的BCB项目中含有其他Delphi单元,并且它们在Initialization部分使用了IBX,
那你必须确保这个顺序,否则载入的将是GDS.DLL
  • 打赏
  • 举报
回复
coaco 2004-06-30
经客户端测试,完全可以不需要 GDS32.dll

编程环境是 BCB6.0,开始为了保险起见,在DM(数据)模块里添加了
#include FBClientLibrary.hpp 一行,测试通过
后来连这一行也删除了,完全没有问题

关于注释中提到的:
注意:如果某些单元在initialization的部分使用IBX控件,
则必须确保本单元在program的uses子句中的位置处于那个单元之前
这样的情况没有出现,奇怪,究竟什么情况下会有注释中的情况发生?
  • 打赏
  • 举报
回复
coaco 2004-06-30
收到了,谢谢
  • 打赏
  • 举报
回复
coaco 2004-06-29
还希望楼上再指点一下,IBIntf单元中,GDSLibrary的工作机制不甚了解,似乎也没有相关的说明,它似乎是通过如下方式的实现的:

IGDSLibrary = interface
['{BCAC76DD-25EB-4261-84FE-0CB3310435E2}']
不好意思,我对PASCAL不熟,如果象您所说,把它指向fbclient.dll 如何操作法呢?我在网上搜了相关的例程,也没有找到
  • 打赏
  • 举报
回复
coaco 2004-06-29
太谢谢了!
Travel_man@163.com
写一个主题,因为现在垃圾邮件太多了.
我也倾向于后一种 :),用前一种方法是不是还要重新编译IBX并替换相应的库文件呢?
  • 打赏
  • 举报
回复
alphax 2004-06-29
其实你直接改IBHeader里的IBASE_DLL就可以了,
不过,既然它提供了registerGDSLibaray函数,
我比较倾向于通过注册一个例程来达到
载入FBClient.DLL而不是默认的GDS32.DLL的目的

初步搞好了,基本测试也做了,
本来想贴出来,无奈说回复太长了
如果你需要,就留个email
  • 打赏
  • 举报
回复
alphax 2004-06-29
我目前自己用的是,Firebird提供的兼容gds.dll,因为我打算项目基本完成以后才去弄它

既然你现在想要,那等一下吧,我现在弄一下,
  • 打赏
  • 举报
回复
alphax 2004-06-28
不好意思,写多了一个c
  • 打赏
  • 举报
回复
alphax 2004-06-28
to CuteBit达达

想了两个晚上,终于想通了“为什么还没有达到serializable级别”的问题,
我老是考虑两个consistency事务并发的情况,没有考虑到consistency事务
和其他事务并发的情况

to coacco达达
>>第一,后续程序最好不使用IBX,因为IBX只认GDS32.DLL,可能会有冲突
Firebird 1.5提供一个向后兼容的选项就是提供一个GDS32.DLL
而IBX的新版本是依赖一个称为GDSLibrary的接口来工作的,
你可以可以通过注册一个TRegisterGDSLibrary类型的例程来达到
载入FBClient.DLL而不是默认的GDS32.DLL的目的

详细的请参阅IBIntf单元的RegisterGDSLibraryFactory例程以及GetGDSLibrary函数

>>第二,后续程序指定另一个端口,不再使用3050
应该留一个接口,使得应用程序可以根据配置文件决定使用哪个端口

  • 打赏
  • 举报
回复
coaco 2004-06-27
关于共存的问题首先我觉得是那些商业软件服务不到位的原因,不是IB/FB的原因。
用FB可以共存没有试过,不过我觉得应该有两个前提:
第一,后续程序最好不使用IBX,因为IBX只认GDS32.DLL,可能会有冲突。
第二,后续程序指定另一个端口,不再使用3050
  • 打赏
  • 举报
回复
CuteBit 2004-06-26
hi...alphax
>>哎,刚才打了几行,回复失败丢了
我也经常遇到这样的情况 :((

>>那为什么还没有达到serializable级别呢?
我喜欢这样的问题..不过今天我没时间回复太多,,或者你开个新贴讨论一下..
  • 打赏
  • 举报
回复
alphax 2004-06-26
哎,刚才打了几行,回复失败丢了


>> 用IB6.x的,然后你用FB1.5的话(同一台服务器),可能安装上会有问题的

其实IB可以和FB共存的,FB提供了一某个server port或service name启动的feature
你可以通过传递FB服务的启动参数来控制这一点,客户程序也可以制定连接那一个服务器
也可以同时运行多个FB实例,详细信息,请参阅FB 1.5 release notes

另外,我也有个问题想了好久想不明白,想在这里请教大家

IB/FB有个事务参数consistency,Delphi的大多数存取控件都将它视为Repeatable read
级别,但是,据我所知,IB/FB是通过锁定整个数据表来实现这种Repeatable read,也就是
一旦读/写取了某个数据表,则其他事务就不能更新该数据表了,
很自然,insert也是被拒绝的,那么幻象插入的问题就不复存在了,

那为什么还没有达到serializable级别呢?
  • 打赏
  • 举报
回复
leehq 2004-06-17
coaco(),帮你顶一下!
  • 打赏
  • 举报
回复
coaco 2004-06-15
补充一下,在下不是“高手”
  • 打赏
  • 举报
回复
coaco 2004-06-12
有一个缺点,比如你的用户在用速达,它是用IB6.x的,然后你用FB1.5的话(同一台服务器),可能安装上会有问题的——当然SQL SERVER也有版本的问题,可问题在于速达好象没打算对原来的版本做数据库升级,所以,可能会麻烦,最好请版主再灌一次水,看看这样的问题如何解决.
  • 打赏
  • 举报
回复
加载更多回复
相关推荐
发帖
其他数据库
加入

2192

社区成员

其他数据库开发 其他数据库
申请成为版主
帖子事件
创建了帖子
2004-05-04 06:32
社区公告
暂无公告