我同时使用Firebird嵌入式和Firebird服务器,并且我不时需要使用如下过程重新索引表:
CREATE PROCEDURE MAINTENANCE_SELECTIVITY 
ASDECLARE VARIABLE S VARCHAR(200);
BEGIN
FOR select RDB$INDEX_NAME FROM RDB$INDICES INTO :S DO
BEGIN
S = 'SET statistics INDEX ' || s || ';';
EXECUTE STATEMENT :s;
END
SUSPEND;
END
我想使用嵌入式这是正常的,但是真的需要使用服务器吗?有没有办法配置服务器在需要时或定期自动执行此操作?
我正在寻找一种方法来使用firebird驱动程序在Delphi的DBX中指定自定义事务级别.我正在使用Delphi XE.
在TSQLConnection组件的参数编辑器中,我可以设置各种TransIsolation值,我使用的是默认值ReadCommited.该物业WaitOnLocks将设置为True.我希望这使用以下firebird事务配置,但我不确定:
READ WRITE + WAIT + SNAPSHOT(见http://www.firebirdsql.org/refdocs/langrefupd20-set-trans.html)
我想用LOCK TIMEOUT [seconds]而不是WAIT.但我找不到如何或在何处指明这一点.我查看了DBX源文件,并且有一些自定义事务级别的代码(搜索xilCUSTOM),但它似乎未完成/未使用.
原因是我们有时会在多用户数据绑定应用程序中遇到死锁,我认为这是因为一个事务正在等待另一个(可能是死的)事务.我们宁愿在几秒钟之后让交易中断,而不是让整个客户端无限期挂断.
Firebird在分割时截断小数位,而不是舍入.此外,它将返回值中的小数点数作为分子和分母中的小数位数.
为什么Firebird会截断而不是舍入?为什么它将返回值基于查询中的小数位数?
Firebird 2.5:
select 187/60.00 from rdb$database; --result: 3.11
select 187.000/60 from rdb$database; --result: 3.116
select 187.000/60.00 from rdb$database --result: 3.11666
SQL Server 2012:
select 187/60.00; --result: 3.116666
Oracle 11gR2:
select 187/60.00 from dual; --result: 3.116666666667
MySQL 5.5.32:
select 187/60.00 from dual; --result: 3.1167
PostgreSQL 9.3.1:
select 187/60.00; --result: 3.116666666667
SQLite的:
select 187/60.00; --result: 3.1166666666666667
多年来我看到了对VistaDB的引用,以及SQLite,Firebird,MS SQL等工具.人.我没有理由考虑它.
支付VistaDB与使用其他技术有什么好处?我想到的事情:
1.紧凑的框架支持.SQLite + MSSQL支持CF. 
2.需要迁移到"更强大"的系统.火鸟+ MSSQL.
3.需要更高级的功能,如触发器.火鸟+ MSSQL  
我试图将Firebird嵌入式服务器与Microsoft Visual C#2010一起使用.所以这就是我现在所做的:
下载Firebird .Net Data Provider(Firebird Client v2.5.2).
下载Firebird嵌入式服务器(Firebird Embedded Server v2.5.0).
在我的项目中添加了对FirebirdSql.Data.FirebirdClient.dll的引用.
将fbembed.dll文件解压缩并复制到我的应用程序目录中.
将我的FDB文件"TEST.FDB"添加到我的应用程序目录中.
添加了" 使用FirebirdSql.Data.FirebirdClient; "语句.
到目前为止这么好(我想)......
现在,当我尝试使用以下代码连接到我的FDB文件时:
    FbConnection con = new FbConnection("User=SYSDBA;" + "Password=masterkey;" + "Database=TEST.FDB;" + "DataSource=127.0.0.1;" + "Port=3050;" + "Dialect=3;" + "Charset=UTF8;");
    try  {
             con.Open();
         }
    catch (Exception ex) 
         {
            MessageBox.Show(ex.ToString());
         }
我总是得到消息框,这意味着代码没有正确连接到我的数据库文件.难道我做错了什么?我真的还是C#的菜鸟,我不知道怎么做或修复它,我希望有人会帮助我.
谢谢 :)
编辑:这是我在异常中得到的:
FirebirdSql.Data.FirebirdClient.FbException(0X80004005):无法完成网络请求主机"127.0.0.1".--->无法完成主机"127.0.0.1"的网络请求.在FirebirdSql.Data.FirebirdClient.FbConnectionInternal.Connect()在FirebirdSql.Data.FirebirdClient.FbConnectionPool.Create()在FirebirdSql.Data.FirebirdClient.FbConnectionPool.CheckOut()在FirebirdSql.Data.FirebirdClient.FbConnection.Open()在fbTestApp .Form1.button1_Click(对象发件人,EventArgs e)如C:\ Documents和Settings\ermac \我的文档\的Visual Studio 2010 \项目\ …
我编写了一个使用TSQLConnection的GetTableNames和GetFieldNames方法显示数据库结构的工具.如何获取每个字段名称的类型类似于以下列表(这是构建表所需的DDL的一部分)?
TABLE: ARTICLES
ID INTEGER NOT NULL
PRINTED SMALLINT DEFAULT 0
ACADEMIC SMALLINT
RELEVANCE SMALLINT
SOURCE VARCHAR(64) CHARACTER SET WIN1251 COLLATE WIN1251
NAME VARCHAR(128) CHARACTER SET WIN1251 COLLATE WIN1251
FILENAME VARCHAR(128) CHARACTER SET WIN1251 COLLATE WIN1251
NOTES VARCHAR(2048) CHARACTER SET WIN1251 COLLATE WIN1251
我的关系数据库(Firebird)中有一个DAG,有两个表edge和node(邻接列表模型).我想以递归方式查询它们,但发现递归查询非常低效.因此,我试图在Dong et.al之后实现触发器以维持传递闭包.论文http://homepages.inf.ed.ac.uk/libkin/papers/tc-sql.pdf.
SELECTs现在非常快,但是DELETEs非常慢,因为几乎整个图形被复制用于单个删除.更糟糕的是,并发更新似乎不可能.
有没有更好的方法来实现这个?
编辑
我做了一些实验并向TC表引入了一个参考计数器.有了这个,删除很快.我写了一些简单的测试用例,但我不确定我做得对.这是我到目前为止:
CREATE GENERATOR graph_tc_seq;
CREATE TABLE EDGE (
    parent DECIMAL(10, 0) NOT NULL,
    child DECIMAL(10, 0) NOT NULL,
    PRIMARY KEY (parent, child)
);
CREATE TABLE GRAPH_TC (
    parent DECIMAL(10, 0) NOT NULL,
    child DECIMAL(10, 0) NOT NULL,
    refcount DECIMAL(9, 0),
    PRIMARY KEY (parent, child)
);
CREATE TABLE GRAPH_TC_TEMP (
    session_id DECIMAL(9, 0),
    parent DECIMAL(10, 0),
    child DECIMAL(10, 0)
);
CREATE PROCEDURE GRAPH_TC_CREATE (p_parent DECIMAL(10, 0), c_child …sql firebird directed-acyclic-graphs transitive-closure-table
我正在使用JDBC连接到数据库服务器.连接是通过无线网络进行的,有时可能很狡猾.在连接丢失的那一刻,我需要关闭并重新启动应用程序.
有没有人有一些代码示例,我可以编写某种包装器来自动重新连接并重新运行最后一个查询?这样可以省去很多麻烦.
我只是不确定它应该如何/可以实施.也许已经有了可用的东西?
我想使用参数进行查询,如下所示:
SELECT * FROM MATABLE
WHERE MT_ID IN (368134, 181956)
所以我想到这个
SELECT * FROM MATABLE
WHERE MT_ID IN (:MYPARAM)
但它不起作用......
有没有办法做到这一点 ?
我实际上使用的是IBX和Firebird 2.1
我不知道IN子句中有多少参数.
我需要获得连续更改的所有值,并在其他"审计"表上发布修改.我是否可以完成此操作,而无需为行中的每个元素编写条件?我知道来自http://www.firebirdfaq.org/faq133/的SQL,它为您提供了验证的所有条件:
select 'if (new.' || rdb$field_name || ' is null and old.' ||
rdb$field_name || ' is not null or new.' || rdb$field_name ||
'is not null and old.' || rdb$field_name || ' is null or new.' ||
rdb$field_name || ' <> old.' || rdb$field_name || ') then'
from rdb$relation_fields
where rdb$relation_name = 'EMPLOYEE';
但这应该写在触发器中.所以,如果我改变一个表,那么我需要修改触发器.
由于FireBird不允许动态增加varchar变量的大小,因此在将其插入文本blob之前,我考虑将所有值转换并连接到一个大的varchar变量.
firebird ×10
sql ×4
delphi ×3
database ×2
audit-trail ×1
c# ×1
connection ×1
dbexpress ×1
delphi-xe ×1
firebird2.5 ×1
java ×1
jaybird ×1
jdbc ×1
sql-server ×1
sqlite ×1
t-sql ×1
transactions ×1
triggers ×1
vistadb ×1