我将使用Firebird Events的强大功能以及带有 TIBEvents 组件的 delphi 应用程序。
问题是防火墙,并不是每次都有正确的角色,当我尝试注册事件时,应用程序停止响应,我必须等待......
我能怎么做?
我还尝试在单独的线程中调用寄存器函数,但结果相同。
function RegisterEvents(data : Pointer) : Integer;
begin
with Form1 do begin
DBOspitiEvent.Registered := true;
end;
end; //<-- AFTER THIS, APPLICATION IS BLOCKED (for a while)
procedure TForm1.Button2Click(Sender: TObject);
var
ThreadId : Cardinal;
ThreadHandle : Integer;
begin
ThreadHandle := BeginThread(nil,0,@RegisterEvents,nil,0,ThreadId);
if ThreadHandle = 0
then ShowMessage('Error');
end;
Run Code Online (Sandbox Code Playgroud) 我可以使用 Firebird ISQL 工具 (Firebird 3.0.4) 通过以下命令连接到我的 Firebird 数据库:
connect "C:\Documents\database.db" user 'USER' password 'PASSWORD';
当我想在Python脚本(Windows10 64位上的Python v3.7.7)中,在包括fdb v2.0.1甚至firebirdsql v1.1.3的虚拟环境中执行此操作时,我不能并且系统地得到一个错误。
import fdb
con = fdb.connect(database="C:\Documents\database.db", user='USER' password='PASSWORD'')
Run Code Online (Sandbox Code Playgroud)
DatabaseError: ('连接到数据库时出错:\n- SQLCODE: -902\n- 无法完成对主机“xnet://Global\FIREBIRD”的网络请求。', -902, 335544721)
或者
con = fdb.connect(host='localhost', database="D:\Documents\database.db", user= 'USER' password= 'PASSWORD'')
Run Code Online (Sandbox Code Playgroud)
DatabaseError: ('连接到数据库时出错:\n- SQLCODE: -902\n- 无法完成对主机“localhost”的网络请求。\n- 无法建立连接。', -902, 335544721)
或者
con = fdb.connect(dsn="localhost:C:\Documents\database.db", user='USER' password='PASSWORD'')
Run Code Online (Sandbox Code Playgroud)
DatabaseError: ('连接到数据库时出错:\n- SQLCODE: -902\n- 无法完成对主机“localhost”的网络请求。\n- 无法建立连接。', -902, 335544721)
或者
import firebirdsql
con = firebirdsql.connect(host='localhost', database="D:\Documents\database.db", user='USER' password='PASSWORD'')
Run Code Online (Sandbox Code Playgroud)
如果您有任何想法,欢迎您,因为我被困住了。
在此示例中,Firebird 返回未解码的字符串。是我没有正确设置数据库还是 Firebird 就是这样工作的?
\n#!/usr/bin/env perl\nuse warnings;\nuse 5.10.0;\nuse utf8;\nuse open qw( :std :utf8 );\nuse Devel::Peek;\nuse DBI;\n\nmy ( $db, $dbh, $sth, @array );\nmy $table = 'test_encoding';\nmy $create = "CREATE TABLE $table ( name varchar(32) )";\nmy $insert = "INSERT INTO $table ( name ) VALUES ( ? )";\nmy $select = "SELECT * FROM $table";\nmy $value = '\xc3\xa4';\n\n$db = '/home/me/my_firebird_db';\n$dbh = DBI->connect(\n "dbi:Firebird:db=$db", 'user', 'password',\n { PrintError => 0, RaiseError => 1, ib_charset => 'UTF-8' }\n);\n$sth = $dbh->do( "DROP TABLE $table" );\n$sth …Run Code Online (Sandbox Code Playgroud) 我正在调查更新我们的应用程序以使用Firebird以外的数据库服务器的可能性.我们依靠"STARTING WITH"来访问我们的分层数据.没有它,我看不出如何在没有经过一些严肃的重新设计的情况下迁移到另一个数据库.
如果您不熟悉"STARTS WITH",它只是检查字符串字段是否以特定字符串开头,例如......
WHERE 'This is a test' STARTS WITH 'This is' ...
Run Code Online (Sandbox Code Playgroud)
会回归真实.如果列已建立索引,则索引将用于比较.
其他数据库服务器(尤其是Oracle/MSSQL)是否支持"STARTING WITH"(或"STARTS WITH")?
我试图在Entity Framework中向我的实体插入行.它适用于第一次插入操作,但它不适用于第二次插入操作.我使用Framework 4,C#和FireBird数据库.这是我的代码部分
rec = new T_MEDIAPLAN_REC();
//
//... initialization for T_MEDIAPLAN_REC
//
BossTVEntities.AddToT_MEDIAPLAN_REC(rec);
BossTVEntities.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
它在第二次SaveChanges()调用后给出了这个异常:
"The changes to the database were committed successfully, but an error occurred
while updating the object context. The ObjectContext might be in an inconsistent
state. Inner exception message: AcceptChanges cannot continue because the
object's key values conflict with another object in the ObjectStateManager.
Make sure that the key values are unique before calling AcceptChanges."
Run Code Online (Sandbox Code Playgroud)
我试着看看DataBase.目标实体中有两个插入的记录具有不同的Id.所以,我不知道这种行为的原因是什么.
我使用Visual Studio 2010 SP1 Professional,Firebird 2.5和.NET提供程序,C#,.NET Framework 4.0
它不适用于数据库中的每个实体.
我有由Firebird 1.0创建的gdb文件(25GB另一个~38 GB).在打开一些表时,它们显示错误[运行Firebird服务器1.0(停止Interbase 7.5)] - >无效请求BLR在偏移951处是什么意思?
另外我想将它转换为Interbase 7.5它有ODS版本.10(通过gstat -h).
有任何想法吗 ??
我有一个返回2列和多行的查询.我如何只返回一个非0或null的和值?
表" audit"是这样的:
parent_link integer;
dr smallint
amount decimal(18,2)
select parent_link, sum(case dr when 1 then amount else -amount end)
from audit where books = 3 group by parent_link
Run Code Online (Sandbox Code Playgroud)
我正在检查dr列中的值列中的值是否为1和0值.
此查询起作用并返回几千行,其中0表示总和结果,2表示总和中的值.我只想返回具有总和值的行.
任何帮助将非常感激.
我正在使用Delphi IBQuery和IBTransaction组件使用此查询更新数据库中的所有记录:
UPDATE INVOICES SET BLK = 0;
Run Code Online (Sandbox Code Playgroud)
当用户打开另一个客户端应用程序时,它会在某些记录上留下死锁(由用户打开).
问题在于我的应用程序必须完成上面的查询.
是否有可能实施某种解决方案来强制删除死锁?例如一个SQL查询?
Firebird版本是在Windows 7上运行的2.1.2.18118
此查询在firebird上抛出错误,如何解决该错误?
SELECT EMPNO,SAL
FROM EMP E
where EMPNO = (SELECT MAX(DEPTNO) FROM DEPT D WHERE E.ENAME NOT like (SELECT TOP 1 ENAME
FROM emp E1
WHERE E1.EMPNO=D.DEPTNO))
OR 1 = (SELECT MAX(DEPTNO)
FROM DEPT D
WHERE E.ENAME like substring('NAME111',1,5)) ORDER BY EMPNO;
Run Code Online (Sandbox Code Playgroud)
这是错误.
以下错误信息描述了失败
ODBC调用= SQLPrepareW()
SQL状态= HY000
原始错误= -104(FFFFFF98)
错误消息= [ODBC Firebird驱动程序] [Firebird]动态SQL错误
SQL错误代码= -104
令牌未知 - 第1行,第111列