标签: firebird2.5

使用保留字TimeStamp作为字段名称(Firebird 2.5)

我正在扩展现有应用程序的数据层以使用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下执行此操作,或者我将不得不重命名该字段并更改其他数据层中的代码.

sql firebird firebird2.5

4
推荐指数
1
解决办法
4883
查看次数

如何在Delphi中使用dbExpress将参数传递给查询

我想使用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

delphi dbexpress firebird2.5 delphi-xe2

4
推荐指数
1
解决办法
8827
查看次数

使用isql对firebird数据库运行多个插入查询

我有要求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在我的系统上安装了.

firebird isql firebird2.5

4
推荐指数
2
解决办法
1万
查看次数

未安装Firebird 2.5 CHARACTER SET WIN1252

我已经使用以下方法在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 freebsd firebird2.5

4
推荐指数
1
解决办法
7196
查看次数

如何将二进制gbak输出重定向到Delphi流?

我希望Firebird备份工具gbak将其输出写入Delphi流(没有中间文件).有一个命令行参数可以写入stdout而不是文件.然后我使用ExecuteJEDI中的方法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,而不是重新发明这样的事情.那么,如果它不会太复杂,那就太好了.

delphi firebird jedi delphi-2010 firebird2.5

4
推荐指数
1
解决办法
2262
查看次数

用连接更新表?

我试图用表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无效的令牌

谁能帮我?

sql firebird firebird2.5

4
推荐指数
2
解决办法
9621
查看次数

XE6 ClientDataSet AV尝试从Firebird加载数据

我有一个带有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?

delphi tclientdataset firebird2.5

4
推荐指数
1
解决办法
1765
查看次数

在`LIKE:varname ||上使用索引 火鸟的'%'`

我有一个问题

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))

如何强制它使用指标?

sql database firebird firebird2.5

4
推荐指数
1
解决办法
478
查看次数

如何在Firebird select语句中创建1到100的范围?

如何在Firebird select语句中创建1到100的范围?

我已经找到了将字符串转换为列表的方法,但它对我不起作用,因为我需要生成更大的范围如何向Firebird存储过程输入值的数组参数?.

是否可以在不创建存储过程的情况下执行此类操作?

sql firebird firebird2.5

4
推荐指数
2
解决办法
657
查看次数

如何解释RDB $ FORMATS查询结果

为了获取表模式更改的历史记录,我运行了查询:

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)

database firebird firebird2.5

4
推荐指数
1
解决办法
107
查看次数