我从http://sites.google.com/site/dbxfirebird/下载了 Firebird DBX 驱动程序,并且我已经能够编译“测试连接”项目并使其运行。我将它指向我的测试数据库,如下所示:
procedure TMainForm.Button1Click(Sender: TObject);
var C: TSQLConnection;
begin
C := TSQLConnection.Create(Self);
try
C.DriverName := 'FirebirdConnection';
C.Params.Add('User_Name=SYSDBA');
C.Params.Add('Password=masterkey');
C.Params.Add('Database=C:\fbtest\test.fdb');
C.Open;
if C.Connected then
ShowMessage('Connection is active')
finally
C.Free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
当我运行它时,它工作正常。但是当我将完全相同的代码放入不同的项目中时,它不起作用。我已将 fbclient.dll(Firebird 嵌入式驱动程序 DLL,重命名为 fbclient)、其所有依赖项和 dbxdrivers.ini 文件复制到与项目的 EXE 运行所在的同一文件夹中。我看不出任何原因这不应该工作,但是对 .Open 的调用失败并显示:
项目 Project1.exe 引发异常类 TDBXError 并显示消息“未知驱动程序:FirebirdConnection”。
同样,这是对 Open 的调用。对 DriverName 的分配工作得很好。以前有人见过这个问题吗?为什么完全相同的代码在测试项目中可以工作,但不同的代码却不能工作,有什么方法可以修复它吗?
我在 64 位 Linux 上尝试编译 PHP --with-interbase=/opt/firebird
这导致
checking for InterBase support... yes
checking for isc_detach_database in -lfbclient... no
checking for isc_detach_database in -lgds... no
checking for isc_detach_database in -lib_util... no
configure: error: libgds, libib_util or libfbclient not found! Check config.log for more information.
Run Code Online (Sandbox Code Playgroud)
libfclient 等都在那里。查看 config.log,当它尝试检查 interbase 时,会出现很多错误:
configure:50792: gcc -o conftest -I/usr/include -g -O2 -fvisibility=hidden -pthread -D_REENTRANT -L/opt/firebird//lib -L/usr/lib -L/usr/local/lib conftest.c -lfbclient $
/opt/firebird//lib/libfbclient.so: undefined reference to `std::bad_alloc::~bad_alloc()'
/opt/firebird//lib/libfbclient.so: undefined reference to `__cxa_pure_virtual'
/opt/firebird//lib/libfbclient.so: undefined reference to `__cxa_rethrow' …Run Code Online (Sandbox Code Playgroud) 我如何安全地中止/取消当前正在运行的查询/事务。使用 gfix -shut 可能会损坏数据库。我正在使用delphi和firebird 2.5
预先感谢雷纳尔迪
http://www.firebirdsql.org/refdocs/langrefupd20-select.html#langrefupd20-first-skip
手册说 FIRST 接受“任何计算为整数的表达式”。这不也应该意味着一个变量吗?
:DAYS在以下存储过程中,我在尝试提供给时遇到错误FIRST。
Token unknown - line 10, column 18
:
Run Code Online (Sandbox Code Playgroud)
第10行第18列是:DAYS前面的...
SET TERM ^ ;
CREATE PROCEDURE P_STOCK_MDA
( STOCK BIGINT, TRADE_DATE DATE, DAYS SMALLINT )
RETURNS
( AVG_CLOSE NUMERIC(6,2) )
AS
BEGIN
SELECT AVG(STOCK_ADJ_CLOSE) FROM (
SELECT FIRST :DAYS STOCK_ADJ_CLOSE
FROM STOCK_DAILY yd
WHERE yd.STOCK_STOCK=:STOCK AND yd.TRADE_DATE<=:TRADE_DATE
ORDER BY yd.TRADE_DATE DESC
) INTO AVG_CLOSE;
END^
Run Code Online (Sandbox Code Playgroud) 我有 firebird 数据库文件,我想把它转换成 Mysql,但我不知道怎么做。你能帮我如何转换吗?或者你能给我参考我必须使用什么软件来转换它?
谢谢
我几乎逐行关注此文档:
sudo add-apt-repository ppa:mapopa
sudo apt-get update
apt-cache search firebird2.5-*
sudo apt-get install firebird2.5-superclassic
sudo dpkg-reconfigure firebird2.5-superclassic
Run Code Online (Sandbox Code Playgroud)
在这个阶段我看到一个提示,要求我设置密码SYSDBA,所以我将其设置为root。然后我做剩下的事情:
sudo apt-get install firebird2.5-examples firebird2.5-dev
cd /usr/share/doc/firebird2.5-examples/examples/empbuild/
sudo gunzip employee.fdb.gz
sudo chown firebird.firebird employee.fdb
sudo mv employee.fdb /var/lib/firebird/2.5/data/
Run Code Online (Sandbox Code Playgroud)
最后:
$ isql-fb
SQL> connect "/var/lib/firebird/2.5/data/employee.fdb " user 'SYSDBA' password 'root';
Run Code Online (Sandbox Code Playgroud)
结果,我收到以下错误消息:
Statement failed, SQLSTATE = HY000
operating system directive open failed
-Permission denied
Run Code Online (Sandbox Code Playgroud)
这有什么问题吗?
我需要在表中查找作为主键的所有列并返回它们的列名。
有没有办法用Connection.GetSchema()Firebird .net API的方法来实现这一点?如果没有,SQL 语句将如何实现这一点?
我不需要完整的代码示例,但需要一些有关如何执行此操作的指导。
在我的场景中,我有一个 Firebird 嵌入式数据库,我想从数据库模式生成存储的 prodecures。我需要主键列名称在表上生成触发器,将一些元数据插入到跟踪表中。
我使用最新版本的 Firebird 和最新的 .net 连接器 (v.2.5.5)
如果您需要有关我的问题的更多信息,请发表评论!
我一直在尝试创建 Firebird 数据库的实体数据模型,但我无法克服这个错误:

我已经安装:
DDEX 提供程序 3.0.2.0
Firebird .NET Provider 5.0.0.0(尝试使用来自 Firebird 官方网站的 .msi 安装它并手动将引用添加到项目并从 NuGet 安装它)
EntityFramework.Firebird(来自 NuGet)
这是我的 machine.config:
<system.data>
<DbProviderFactories>
<add name="FirebirdClient Data Provider" invariant="FirebirdSql.Data.FirebirdClient" description=".NET Framework Data Provider for Firebird" type="FirebirdSql.Data.FirebirdClient.FirebirdClientFactory, FirebirdSql.Data.FirebirdClient, Version=5.0.0.0, Culture=neutral, PublicKeyToken=3750abcc3150b00c"/>
</DbProviderFactories>
</system.data>
Run Code Online (Sandbox Code Playgroud)
这是我的 App.config:
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<system.data>
<DbProviderFactories>
<remove invariant="FirebirdSql.Data.FirebirdClient" />
<add name="FirebirdClient Data Provider" invariant="FirebirdSql.Data.FirebirdClient" description=".NET Framework Data Provider for Firebird" type="FirebirdSql.Data.FirebirdClient.FirebirdClientFactory, FirebirdSql.Data.FirebirdClient" />
</DbProviderFactories>
</system.data>
<entityFramework>
<providers>
<provider invariantName="FirebirdSql.Data.FirebirdClient" type="FirebirdSql.Data.EntityFramework6.FbProviderServices, …Run Code Online (Sandbox Code Playgroud) 这是针对 Firebird 2.5 的。
我有一个表 T,其索引由 2 列组成,例如 ColA 和 ColB。如果我正在做 :
SELECT * FROM T WHERE ColA=...,所以 WHERE 子句只在 A 列上,Firebird 会为列 ColB 设置默认值,以及索引的好处,还是根本不能使用这个索引?
一些上下文:我正在进行数据库升级。这是我所拥有的:
CREATE TABLE user(
newid BIGINT NOT NULL,
oldid BIGINT NOT NULL,
anotherCol INT);
CREATE INDEX idx ON user(oldid, anotherCol);
CREATE TABLE order(
RefUser BIGINT);
Run Code Online (Sandbox Code Playgroud)
order.RefUser 是 oldid,我需要将它们更改为 newid。我使用这个查询来做到这一点:
UPDATE order o SET o.refuser = (SELECT u.newid FROM user u WHERE u.oldId = o.refuser);
Run Code Online (Sandbox Code Playgroud)
此时,oldid 仍然是唯一的,但稍后将仅保证 (oldid, anotherCol) 的唯一性,因此索引,以及 newid 的创建。
用户表是几百万条记录,订单表是几千万条:这个查询需要一个多小时。我想看看如何改进它(不热衷于在这段时间内关闭关键服务)。
我正在维护一个旧软件(Firebird 2.5 和 C#.net)。最近我们收到了很多“死锁更新与并发更新冲突”的错误。我检查了交易设置。它没有设置等待超时选项:
public override IDbTransaction BeginTransaction(IDbConnection conn)
{
FbTransaction trans = null;
if (conn.State != ConnectionState.Open)
conn.Open();
FbTransactionOptions op = new FbTransactionOptions();
op.TransactionBehavior = FbTransactionBehavior.ReadCommitted | FbTransactionBehavior.RecVersion;
trans = ((FbConnection)conn).BeginTransaction(op);
return trans;
}
Run Code Online (Sandbox Code Playgroud)
那么,为什么我们会超时?难道不应该等待提交一个事务来提交下一个事务吗?