zoukankan      html  css  js  c++  java
  • FIREBIRD使用经验总结

    http://www.cnblogs.com/wenew/articles/152294.html

    最近在改写一段ms sql的存储过程到firebird,
    总结了一些经验,
    firebird可以说是这个世界上最小的又支持存储过程的数据库的,
    才2.3M而已,如果做小型的应用,比ms sql桌面版也有70多M(+sp3),
    mysql也有20-30M,太不方便。

    1.自定义函数问题.Access to UDF library "rfunc.dll" is denied by server administrator
    花了很长时间,不明白为何,将rfunc.dll拷到udf目录,bin目录,windows\system32目录都不能解决问题,google一下,网上有同样的问题,但没有解决方案,结果我重装了一下firebird就解决了.

    2.存储过程中变量的定义
    ms sql存储过程中无论在哪都可以定义新的变量,但在firebird中,只能在as 与begin之间进行定义.firebird的变量不能用@符号,我将@全部变成a就好了.

    3.存储过程中变量的使用
    select @i=count(*) from table1 //ms sql
    select count(*) from table1 into :i//firebird引用变量使用冒号

    4.嵌入式sql,
    firebird支持select * from table exists (select ...) 或 select * from table in (select ...)
    但不支持select * from (select * from ...) a,
    我是将这类改写成视图解决的

    5.case语句
    mssql 可使用field= case (),但firebbird仅支持case () as field,
    6.mssql getdate()变成CURRENT_DATE+CURRENT_TIME
    select * from snartleave where   dt_starttime<CURRENT_DATE+CURRENT_TIME

    select * from snartleave where   dt_starttime<CURRENT_DATE||' ' ||CURRENT_TIME

    7.返回数据集的存储过程写法(firebird写法有点麻烦)
    CREATE PROCEDURE SPVARTST2 (
        VAR_IPTARTNO CHAR(6))
    RETURNS (
        VAR_ARTNAME CHAR(10))
    AS
    begin
    for select v_name1 from snart where v_artNo=:var_iptartno into :var_artname do
    suspend;
    end

    8.自动增长字段的使用(autoincrement)
    firebird有个发生器(generator)的东东,在发生器里记录值的增长,
    再用触发器实现
    begin
      if (new.i_seqno is null) then
      begin
        NEW.i_seqno = GEN_ID(GEN_T_DB_ARTSEQNO_ID,1);
      end
    end
    //GEN_T_DB_ARTSEQNO_ID就是创建的发生器,看到没有,也就是说不同的表不同的字段可以共用一个发生器,gen_id相当于identity,看起来比mssql复杂,其实也很简单。

    9.发生器重置 mssql里自动增加的字段要重置好像很麻烦,较难控制,
    firebird可以这样(存储过程中)
    agenerator=Gen_ID(GEN_T_DB_ARTSEQNO_ID,Gen_ID(GEN_T_DB_ARTSEQNO_ID,0)*-1+1);
    //agenerator是一个整形变量,好像一定要装gen_id的值符给一个变量才行,不知道有没有更好的办法,不用定义一个多余的变量
    可参考如下网址:http://www.fingerbird.de/generatorguide_body.htm


    10 通过一个表更改另一个表的数据
    mssql:update table1 set cname=b.cname from table1 a inner join table2 as b where a.id=b.id
    firebird:update table1 a set cname=(select cname from table 2 b where b where a.id=b.id)

    以下给出一些用delphi开发基与Firebird数据库应用的程序源代码:

    Firebird-V2.5-D2009

    delphi2009连接火鸟数据库的例子

    下载地址:http://www.pudn.com/downloads170/sourcecode/database/detail783975.html

    Firebird(emerged)example

    用firebird制作嵌入式数据库,使得用户免去额外安装数据库的麻烦,而且该数据库较其它文件型数据库具有容量大的特点。

    下载地址:http://www.pudn.com/downloads141/sourcecode/embed/detail613425.html

    Firebird使用实例DEMO

    最近在开始学习FB,这个Firebird使用实例使用的例程传上来给需要的一起学习

    下载地址:http://download.csdn.net/source/1838225

  • 相关阅读:
    33.数组声明方式(var构造函数) 、检测数组类型、数组的属性(封装好的就一个length)、数组的方法
    31.this指向(写出调用链,找最近对象) this的默认绑定 隐式绑定 显示绑定(call(绑定对象) apply(绑定对象) 当括号内没放绑定对象的时候恢复默认绑定) bind
    31.
    30.函数作用域链 (GO AO 也叫词法作用域链)、 调用栈、调用栈涉及this绑定
    29.包装类(构造函数) 包装类作用及调用栈
    916. Word Subsets
    246. Strobogrammatic Number
    445. Add Two Numbers II
    2. Add Two Numbers
    341. Flatten Nested List Iterator
  • 原文地址:https://www.cnblogs.com/chulia20002001/p/1964844.html
Copyright © 2011-2022 走看看