我有一个生产数据库,使用Firebird 2.1,我需要找出每个表使用多少空间,包括blob.blob-part是棘手的,因为它没有使用标准统计报告.
我无法轻松访问服务器的桌面,因此安装UDF等不是一个好的解决方案.
我怎么能这么容易做到?
我正在使用dbExpress组件(Delphi 7)开发数据库程序.通过以下组件从数据库中检索数据:TSQLDataSet - > TDataSetProvider - > TClientDataSet - > TDatasource - > TDBEdit.到目前为止,表格已正常运作.TSQLDataset中的查询是
select id, name, byteken, timeflag from scales where id = :p1
Run Code Online (Sandbox Code Playgroud)
我在数据库表中添加了一个大的(2048)varchar字段; 当我将此字段添加到上面的查询(并将TDBMemo或TDBRichEdit连接到TDatasource)时,当我尝试编辑新文本字段中的值时,我收到以下消息
Unable to find record. No key specified.
Run Code Online (Sandbox Code Playgroud)
当表单上没有TDBMemo时(但在查询中使用varchar字段),我得到相同的错误.一旦从查询中删除varchar字段,一切都可以正常工作.
可能是造成这个问题的原因是什么?
====更多信息====
我现在已经在表单中定义了持久字段.保存表的键的字段的提供者标志设置为[pfInUpdate,pfInWhere,pfInKey],而所有其他字段的标志为[pfInUpdate,pfInWhere].这并没有解决问题.
持久字段在clientdataset上定义.当我在TSQLDataSet上定义它们时,不会出现关于"未指定密钥"的错误消息.程序仍然会显示此错误消息(我之前忽略了这一点):
EDatabase error: arithmetic exception, numeric overflow or string truncation
Run Code Online (Sandbox Code Playgroud)
大字符串字段在'displaywidth'和'size'中具有正确的值.
====更多信息====
我重写了表单以使用非数据感知组件.一个查询从数据库中检索数据(使用与我在TSQLDataSet中使用的查询字符串完全相同的查询字符串); 然后将数据传输到控件.在用户按下表单上的"确定"按钮后,数据将通过执行更新或插入的另一个查询传递回数据库.由于这可以正常工作,我不知道数据感知组件的问题是什么.
====又一段信息====
我在Stack Overflow上发现了这个问题,似乎解决了类似的问题.我将查询更改为
select id, name, name, byteken, timeflag,
cast (constext as varchar (2048)) as fconstext
from scales
where id = :p1
Run Code Online (Sandbox Code Playgroud)
并将dbMemo的数据字段设置为'fconstext'.将文本添加到dbMemo后,'applyupdates'调用现在失败,并显示以下消息
column unknown 'fconstext' …Run Code Online (Sandbox Code Playgroud) 是否可以更改BLOB字段的SUBTYPE?
我有一个带有SUBTYPE BINARY的BLOB需要将它更改为SUBTYPE TEXT,因为我在BLOB和带有SUBTYPE TEXT的BLOB中得到一些奇怪的字符我没有这个问题
在这一点上,下面引用的摘录似乎是矛盾的.
(我认为它们都很老了,第二个是从2004年开始,第一个提到Borland所以一定也要老了,所以也许它们已经过时了.)
第一个似乎表明提交保留使事务处于活动状态,因此将坚持OIT.
第二,如果我理解它意味着通过提交保留,现有的TID被标记为已提交,并且事务保持活动但具有新的TID,因此不会粘贴OIT.这第二个摘录与Interbase有关,我不知道这是否解释了看似矛盾的问题.
Firebird文档提取:
使用Firebird(和InterBase),Commit Retaining会使事务无限期地保持有趣.垃圾收集有效地停止在"标准"Borland RAD工具数据库应用程序和任何其他使用Commit Retaining的应用程序上.
Embarcadero Blog post extract
读取已提交,读写:
如果您不时保留提交,此事务可以永久运行而不会对性能产生负面影响.
我想知道是否可以返回SELECTFirebird 1.5 中的查询中找到的多行,如下所示:
| FIELD1 | FIELD 2 |
--------------------
| 1.00 | 1 |
| 2.00 | 2 |
| 3.00 | 3 |
SET TERM /;
CREATE OR ALTER PROCEDURE TEST
RETURNS (VARIABLE1 DOUBLE PRECISION, VARIABLE2 INTEGER)
AS
BEGIN
SELECT FIELD1, FIELD2 FROM TABLE INTO :VARIABLE1, :VARIABLE2;
END/
EXECUTE PROCEDURE TEST/
SET TERM ;/
Run Code Online (Sandbox Code Playgroud)
假设查询返回多个结果/行,则抛出以下错误:
声明失败,SQLCODE = -811
单例选择多行
显然,Firebird的引擎不允许我在变量中返回多个值.我正在开发一个我想要的Python软件,作为一个元组,例如,像[(1.00,1),(2.00,2),(3.00,3)]这样的东西,基于TEST程序.我正在使用kinterbasdb模块与GDB连接.
有没有办法做到这一点?
我有一行查询:
DECLARE VARIABLE var_SecondsOfTime INTEGER;
Run Code Online (Sandbox Code Playgroud)
但运行查询后,我收到此消息:
引擎错误(代码= 335544569):动态SQL错误.SQL错误代码= -104.令牌未知 - 第1行,第9列.VARIABLE.
SQL错误(代码= -104):令牌无效.
我在互联网上随处可见,所有的例子都显示了我正在使用的相同的声明风格.
怎么了?
我使用的是Delphi 2010 Professional,它没有附带Firebird的dbExpress驱动程序.如果我开始使用Chau Chee Yang编写的Firebird dbExpress驱动程序,然后再升级到XE?企业(Firebird dbExpress驱动程序附带)代码才能运行?
刚刚从mySQL移动平台到firebird我发现很难找到一种可接受的方法来捕获从Java .jar应用程序传递到数据库服务器(Firebird)的SQL命令.我需要分析命令以及在执行时间等方面传递的查询的"成本".
使用MySQL可以使用maatkit工具包,但不幸的是,这似乎不适用于Firebird.
有没有人对Firebird的maatkit有适当的可比方法?或者使用strace或类似?
序列:
table1 ===== id - Description ---------------- |1 |Proj-x |2 |Settlers |3 |Bank |4 |Newiest table2 ===== id table1Id value alternate-value --------------------------------- |1| 1 |12 |null |1| 4 |6 | null |1| null |22 |Desktop |2| 2 |7 |null |2| 3 |11 |null |2| null |2 |Camby Jere |3| 1 |8 |null |3| 4 |6 |null |3| null |7 |Camby Jere
必须返回select指令
|table1.id|Proj-x|Settlers|Bank |Newiest|Desktop|Camby Jere ---------------------------------------------------------- |1 |12 |null |null |null |null |null |1 |null |null |6 |null |null |null …
firebird ×10
firebird2.5 ×3
sql ×3
dbexpress ×2
delphi ×2
database ×1
declaration ×1
delphi-2010 ×1
delphi-7 ×1
firebird2.1 ×1
java ×1
monitor ×1
pivot ×1
ubuntu ×1
variables ×1