我从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 的分配工作得很好。以前有人见过这个问题吗?为什么完全相同的代码在测试项目中可以工作,但不同的代码却不能工作,有什么方法可以修复它吗?
这个标题对我来说很有趣-尽管标题几乎是无用的。我已经使用Firebird很长时间了,但是直到最近才发现一种有趣的行为。
我正在使用嵌入式firebird 1.5,并且注意到如果我在数据库中塞满blob(比如说价值10mb),数据库的大小就会增加。然后,我可以删除数据库中的所有字段,并且数据库的文件大小保持其扩展大小。目前,它的大小为20mb,完全为空。
我知道firebird已将其内置到其体系结构中(用于快速索引,速度问题等),但是我一直认为它会减少到最初的〜2mb默认值。
是否有人建议“缩小”文件大小?原因是这是一个空间意识的问题。如果我有大量的工作空间,我将不在乎。但是,事实并非如此,我需要让一切尽可能最佳
谢谢!
我需要在表中查找作为主键的所有列并返回它们的列名。
有没有办法用Connection.GetSchema()Firebird .net API的方法来实现这一点?如果没有,SQL 语句将如何实现这一点?
我不需要完整的代码示例,但需要一些有关如何执行此操作的指导。
在我的场景中,我有一个 Firebird 嵌入式数据库,我想从数据库模式生成存储的 prodecures。我需要主键列名称在表上生成触发器,将一些元数据插入到跟踪表中。
我使用最新版本的 Firebird 和最新的 .net 连接器 (v.2.5.5)
如果您需要有关我的问题的更多信息,请发表评论!
我正在开发一个应用程序,它将使用firebird嵌入式和/或postgres,具体取决于用户的复杂程度.firebird嵌入式的论点是应该减少安装,防火墙,UAC等问题.到目前为止,postgres就像在云上行走一样,但我遇到了火鸟的路障.该应用程序是.net,我正在使用此提供程序http://www.firebirdsql.org/en/net-provider/版本3.0.2
一切都在技术上有效,但嵌入了firebird我每秒只插入大约100条记录,而postgres每秒超过3000条记录!使用postgres,我将大量的INSERT INTO ...语句作为一个命令启动,这很好.对于火鸟来说,它并不顺利.这是什么工作(慢慢地)
String query = @"INSERT INTO Customers(ID, Name, SiteID) VALUES(1,'delta',2);
INSERT INTO Customers(ID, Name, SiteID) VALUES(2,'phoenix',2);
";
FbScript fbs = new FbScript(query);
fbs.Parse();
FbConnection fbc = new FbConnection(ConnectionString);
FbBatchExecution fbe = new FbBatchExecution(fbc, fbs);
fbe.Execute(true);
Run Code Online (Sandbox Code Playgroud)
但是,我试图没有解析.类似于第二个答案的东西使用isql或者在这里http://www.firebirdfaq.org/faq336/ 对firebird数据库运行多个插入查询
String sql = @"set term ^ ;
EXECUTE BLOCK AS BEGIN
INSERT INTO Customers(ID, Name, SiteID) VALUES(1,'delta',2);
INSERT INTO Customers(ID, Name, SiteID) VALUES(2,'phoenix',2);
end^";
FbCommand cmd = new FbCommand();
PrepareCommand(cmd, connection, (FbTransaction)null, CommandType.Text, sql, commandParameters, …Run Code Online (Sandbox Code Playgroud) 无论我做什么,我似乎无法使用Firedac连接到Firebird 2.5嵌入式数据库.有趣的是,昨天它似乎工作,现在突然间它不会.
相反,为了让我的脑袋突然停止工作,我开始重建一个干净的项目,这样我就可以一步一步地弄清楚发生了什么.我将下载的软件包的全部内容从Firebird添加(复制)到我的应用程序目录和数据库本身.
为了避免文件夹问题,我设置了Delphi环境选项,将所有文件(和exe放在同一目录中.然后我使用了Firebird*.doc文件夹中的建议,并将fbembed.dll重命名为fbclient.dll.一些Firedac Q&A关于我读过的问题,Firedac需要fbembed.dll文件.好吧,我已经尝试了两种方式,它无论如何都不会工作....).但是让我坚持第一个问题fbclient.dll.
为了建立连接,我在数据模块上放了一个FDPhysFBDriverLink1和一个FDConnection1.
现在FDPhysFBDriverLink1:它的BaseDriverID是FB.对于DriverID,我尝试了两个建议:首先使用'FB',然后提供fbclient.dll的完整路径.没有人似乎有所作为.
当我转到Firedac Connection编辑器并输入我的数据库文件的路径时,我得到"无法加载供应商库(fbclient.dll或fbembed.dll)....错误.但这两个文件都在应用程序exe文件夹中(就像在embarcadero网站上建议的那样.那么Firedac在哪里寻找文件?我对Firebird和Firedac有点厌倦,因为他们不能简单地解释为什么连接成功必须做的事情.他们给的只是一些模糊的选项,它们都不起作用.添加这个 - 添加......最后......失败.
因此,如果有人有直接回答如何做到这一点的经验(没有链接,请...我已经看过并尝试过所有这些)我会非常感激.尝试建立一个简单的连接几天是非常愚蠢的.我也尝试过与Unidac类似的结果.所以在我第99次精神崩溃之前,我该怎么办才能完成连接?
我已经写了一个小型的Python应用程序了几周了。该应用程序从Firebird数据库读取数据,并将其复制到另一个DB。我正在使用嵌入式Firebird的FDB。
这是我的连接代码。
def createConnectionTo(path):
try:
connection = fdb.connect(
database=path,
user='SYSDBA',
password='masterkey',
charset='WIN1252'
)
print("Connessione al database riuscita!\n")
return connection
except fdb.fbcore.DatabaseError as details:
errorMsg = "ERRORE: impossibile connettersi al database!\nPer favore scegliere un altro file.\n\nDETTAGLI\n"+str(details).replace("\\n", "\n")+"\n"
print(errorMsg)
return False
except fdb.fbcore.ProgrammingError as details:
errorMsg = "ERROR: bad parameters value!\nPlease check your connection code.\nDETAILS: "+str(details)+"\n"
print(errorMsg)
return False
except Exception as errorMsg:
print("ERRORE: "+str(errorMsg))
input("Premi un ENTER per chiudere la finestra.")
return -1
Run Code Online (Sandbox Code Playgroud)
该代码适用于我计算机内的文件夹,但莫名其妙地不适用于我们本地网络中共享的文件夹。我使用os.path.exists()检查Python是否能够找到所选的共享文件夹,并且它始终返回True。
我一直收到此错误,而且我不知道如何解决该错误,即使我怀疑它与斜杠转换问题有些相关。
('Error while connecting to …Run Code Online (Sandbox Code Playgroud) firebird ×6
.net ×2
c# ×2
delphi ×2
database ×1
delphi-xe6 ×1
firedac ×1
primary-key ×1
python ×1