我正在扩展现有应用程序的数据层以使用Firebird 2.5,除了MSSQL和SQLite,但我遇到了绊脚石.
我有一个名为TimeStamp的字段,它将数据/时间存储为TimeStamp类型.这在MSSQL和SQLite下工作正常,其类型是datetime,但在Firebird下可以使用.以下SQL:
SELECT SysTrnId,'TimeStamp' from "TRANSACTIONS"
Run Code Online (Sandbox Code Playgroud)
看似有效,但TimeStamp字段返回为字段名"CONSTANT",内容为文本"timestamp"
是否可以在Firebird下执行此操作,或者我将不得不重命名该字段并更改其他数据层中的代码.
我想使用dbExpress TSQLQuery组件.但我不知道如何编写SQL来添加参数.我会举一个例子,也许更清楚我的问题是什么.
在TADOQuery中,以下工作:
SELECT*
FROM sometable
WHERE sometable.id = :value;
Run Code Online (Sandbox Code Playgroud)
现在在上面的示例中,您使用参数名称前面的冒号(:)将参数传递给查询.但是当我尝试使用TSQLQuery执行此操作时,我收到以下错误:
dbExpress driver does not support the TDBXTypes.UNKNOWN data type. Vendor Error Message.
Run Code Online (Sandbox Code Playgroud)
现在,如果这不是您在TSQLQuery组件中传递参数的方式,那么有人可以帮助我.这对我来说是一个新的领域.
我使用Firebird数据库,我使用Delphi XE2
我有要求inserting enormous data in table of firebird database around 40K entries
.我准备好了我的脚本,但是在使用flameRobin执行它时,UI一下子插入如此庞大的数据就永远挂起了.
我知道如果我在255个查询块中执行插入查询会很好,但我想知道bulk insert tool available for Firebird
在从scripts.sql文件读取时是否有任何这样的条目.
经过一些谷歌搜索后,我遇到了isql
工具,但无法对其执行脚本.有人可以指导我使用任何其他工具或正确的文档一次性输入如此庞大的数据吗?
我已经firebird version 2.5
在我的系统上安装了.
我已经使用以下方法在FreeBsd 9.1上安装了Firebird-Server 2.5:
pkg install firebird-server-2.5.2_1
Run Code Online (Sandbox Code Playgroud)
可以,因为我可以从外部PC使用FlameRobin进行连接。
现在,当我尝试使用gbak还原数据库时,得到了以下信息:
...
gbak: ERROR: CHARACTER SET WIN1252 is not installed
gbak:Exiting before completion due to errors
Run Code Online (Sandbox Code Playgroud)
我应该在服务器端安装更多的东西吗?该数据库是在Windows计算机上创建的,因此其字符集为WIN1252。
编辑:遇到一些麻烦后,我卸载了firebird并重新安装,而无需使用SUDO。
现在,我可以使用isql-fb进行连接并“显示系统整理”。结果如下:
...
TIS620_UNICODE, CHARACTER SET TIS620, PAD SPACE, SYSTEM
UCS_BASIC, CHARACTER SET UTF8, PAD SPACE, SYSTEM
UNICODE, CHARACTER SET UTF8, PAD SPACE, SYSTEM
UNICODE_CI, CHARACTER SET UTF8, FROM EXTERNAL ('UNICODE'), PAD SPACE, CASE INSENSITIVE, SYSTEM
UNICODE_CI_AI, CHARACTER SET UTF8, FROM EXTERNAL ('UNICODE'), PAD SPACE, CASE INSENSITIVE, ACCENT INSENSITIVE, SYSTEM
UNICODE_FSS, CHARACTER SET UNICODE_FSS, PAD SPACE, …
Run Code Online (Sandbox Code Playgroud) 我希望Firebird备份工具gbak将其输出写入Delphi流(没有中间文件).有一个命令行参数可以写入stdout而不是文件.然后我使用Execute
JEDI中的方法JclSysUtils
启动gbak并处理该输出.
它看起来像这样:
procedure DoBackup;
var
LBackupAbortFlag: Boolean;
LBackupStream: TStringStream;
begin
LBackupAbortFlag := False;
LBackupStream := TStringStream.Create;
try
Execute('"C:\path to\gbak.exe" -b -t -v -user SYSDBA -pas "pw" <db> stdout',
LBackupStream.WriteString, // Should process stdout (backup)
SomeMemo.Lines.Append, // Should process stderr (log)
True, // Backup is "raw"
False, // Log is not
@LBackupAbortFlag);
LBackupStream.SaveToFile('C:\path to\output.fbk');
finally
LBackupStream.Free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
问题是输出文件太小而无法包含实际备份.我仍然看到文件内容的元素.我尝试了不同的流类型,但这似乎没有什么区别.这可能会出错?
需要明确的是:其他解决方案也是受欢迎的.最重要的是,我需要一些可靠的东西.这就是为什么我首先选择JEDI,而不是重新发明这样的事情.那么,如果它不会太复杂,那就太好了.
我试图用表B中的数据更新表A.我想我可以做这样的事情
update A
set A.DISCOUNT = 3
from INVOICE_ITEMS A
join ITEM_PRICE_QUNTITY B on A.ITEM_PRICE_NO = B.ID
where A.INVOICE_ID = 33
Run Code Online (Sandbox Code Playgroud)
但收到错误SQL消息:-104无效的令牌
谁能帮我?
我有一个带有FireDac FDConnection和FDSqlQuery,DataSetProvider和ClientDataSet的简约项目,试图访问我今天从SourceForge下载的Firebird 2.5软件包随附的示例Employee.FDB。
除了FDConnection的弹出信息选项卡中的数据库名称和FDQuery的Sql(已设置为)外,所有内容均已设置为默认值,因为它们离开了调色板select * from employee
。
FDQuery可以正常打开,但是一旦我尝试在IDE中运行CDS或运行我的应用程序,就会遇到访问冲突。
这是我的全部代码:
FDQuery1.Open;
Caption := IntToStr(FDQuery1.RecordCount); // this shows 42 on the form's caption
CDS1.Open; // AV here
Run Code Online (Sandbox Code Playgroud)
因此,FDQuery可以打开,但CDS不能。
在运行时,异常发生在这里:
function TCustomClientDataSet.CreateDSBase: IDSBase;
begin
CreateDbClientObject(CLSID_DSBase, IDSBase, Result);
Check(Result.SetProp(dspropANSICODEPAGE, DefaultSystemCodePage)); <-- Exception here
Check(Result.SetProp(dspropUTF8METADATA, NativeUInt(True)));
Check(Result.SetProp(dspropUTF8ERRORMSG, NativeUInt(True)));
end;
Run Code Online (Sandbox Code Playgroud)
例外味精是
项目FBTest1引发了异常类$ C0000005,消息为“在0x0075d05b发生访问冲突:读取地址0x00000000”。
在IDE中,如果尝试在CDS上设置Active = True,则会收到类似的异常,该消息表示发生在DSnap200.Bpl中。
它是在运行时第一次发生,我有某种“事件报告”弹出窗口可以将其报告给Embarcadero。第一次见到。
如果我用SqlConnection和SqlQuery代替FDac组件,则会收到相同的错误。
因此,我想我的问题是,是否可以通过使用像该项目一样简单的项目的默认属性设置来激发CDS的行为,即我错过了一步,还是EMBA QC?
我有一个问题
SELECT DISTINCT FKDOCUMENT
FROM PNTM_DOCUMENTS_FT_INDEX
WHERE WORD LIKE 'sometext%'
Run Code Online (Sandbox Code Playgroud)
PLAN SORT((PNTM_DOCUMENTS_FT_INDEX INDEX(IX_PNTM_DOCUMENTS_FT_INDEX)))
它工作正常.
但是当我尝试使用连接字符串时LIKE
,firebird 不使用标记:
SELECT DISTINCT FKDOCUMENT
FROM PNTM_DOCUMENTS_FT_INDEX
WHERE WORD LIKE 'sometext' || '%'
Run Code Online (Sandbox Code Playgroud)
计划排序((PNTM_DOCUMENTS_FT_INDEX NATURAL))
如何强制它使用指标?
如何在Firebird select语句中创建1到100的范围?
我已经找到了将字符串转换为列表的方法,但它对我不起作用,因为我需要生成更大的范围如何向Firebird存储过程输入值的数组参数?.
是否可以在不创建存储过程的情况下执行此类操作?
为了获取表模式更改的历史记录,我运行了查询:
select CAST(SUBSTRING(f.rdb$descriptor FROM 1 FOR 32000) AS VARCHAR(32000)) log
from rdb$formats f
join rdb$relations r on r.rdb$relation_id = f.rdb$relation_id
where r.rdb$relation_name = 'MY_TABLE_NAME'
Run Code Online (Sandbox Code Playgroud)
文档说明如下:
RDB $ DESCRIPTOR | BLOB格式| 将列名称和数据属性存储为BLOB,就像创建格式记录时一样
以下是查询的结果:
LOG TABLE FORMAT ID
------------------------------------------------- ----------------
4: type=9 (LONG) length=4 sub_type=0 flags=0x0 15
8: type=9 (LONG) length=4 sub_type=0 flags=0x0
12: type=14 (DATE) length=4 sub_type=0 flags=0x0
16: type=9 (LONG) length=4 sub_type=0 flags=0x0
20: type=9 (LONG) length=4 sub_type=0 flags=0x0
24 <-- probably truncated?
------------------------------------------------- ----------------
4: type=9 …
Run Code Online (Sandbox Code Playgroud) firebird2.5 ×10
firebird ×8
sql ×4
delphi ×3
database ×2
dbexpress ×1
delphi-2010 ×1
delphi-xe2 ×1
freebsd ×1
isql ×1
jedi ×1