问题标签 [interbase]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
792 浏览

java - 如何将 Interbase 连接池添加到 glassfish?

我正在尝试将 Interbase 连接池添加到GlassFish v3 以在项目中使用 EJB 3.1。glassfish 日志似乎正确连接到我的数据库,它吐出了我所有的表名和索引。但是,我收到一个错误

INFO: fetching database metadata SEVERE: could not complete schema update java.lang.NullPointerException at interbase.interclient.ResultSet.local_Close(Unknown Source) ...

当我从 Glassfish 中 ping 连接池时,我收到“Ping failed Exception - null”。

我的连接池设置了以下属性:
资源类型:javax.sql.DataSource
数据源类名:interbase.interclient.DataSource
portNumber:3050
以及我的数据库信息。

我似乎无法在其他地方找到信息。这个问题很相似,但没有得到答案。

谢谢。

0 投票
4 回答
750 浏览

sql - 使用 Interbase 优化 SQL

我从上一个关于 SQL的问题中得到的好答案启发了我。现在,此 SQL 在带有 Interbase 2009 的数据库上运行。它的大小约为 21 GB。

AddrDistance 有 840000 行,AddrDistance 有 190000 行,Address 有 4 行,DistanceQueryTask 有 4 行。

问题是,这可以更快地完成吗?我猜,相同的查询运行多次select bold_id from DistanceQueryTask。请注意,我对存储过程不感兴趣,只对普通 SQL 感兴趣 :)

EDIT1这是当前的执行计划:

是的,DistanceQueryTask 意味着如果数据库中的行数较少。

0 投票
1 回答
2296 浏览

delphi - 是否可以调整 TStringField 使其像 Delphi 中的 TWideStringField 一样工作?

我们想在 Delphi 2009 和 Interbase 中使用 Unicode,并发现要将字符编码从 WIN1252 切换到 UNICODE_FSS 或 UTF8,我们首先必须在所有数据模块中用 TWideStringField 替换所有 TStringField 实例。对于大约 60 个数据模块,我们不能简单地在一个周末内完成这项工作。我只能看到迁移策略的两个选项:

  • 找到一种解决方法,允许使用现有的 TStringField 字段而不触发“预期:TWideStringField”错误

或者

  • 删除所有持久字段以避免字符串类型冲突

据我所知,持久数据库字段的字段类型已在某种类注册表中注册。我们可以用它来让 Delphi 相信 TStringField 可以用于具有 UNICODE_FSS 或 UTF8 编码的 Interbase 字符列吗?

或者我们可以使用在这两种情况下都可以与 TStringField 一起使用的商业 dbExpress 驱动程序吗?

另请参阅我的相关问题:Delphi dbExpress 和 Interbase:UTF8 迁移步骤和风险?


更新:在所有 DFM 和 PAS 文件中将所有出现的 TStringField 替换为 TWideStringField 之后,我们发现现在还需要在大约 100 个位置将 TWideStringFields 的“Size”属性值乘以四(如果我们使用 UTF8)。所以我开始赏金寻找一种减少修复 DFM 的手动工作的方法

0 投票
3 回答
398 浏览

sql - Interbase 的 NHibernate 方言

我使用 Interbase 服务器做了很多工作。我想使用 NHibernate 为其开发一个数据访问层,但没有现成的 Interbase 方言。

有谁知道,是否有用于通用 ANSI 数据库工作的 NHibernate 方言,或者现有的任何方言是否可以与 Interbase 一起工作?

或者另一方面,创造一种新的方言需要什么样的工作?

感谢您提供的任何建议。

大卫

0 投票
2 回答
3325 浏览

sql - 使用 Firebird.NET 2.5 执行 SQL 脚本时出现问题(错误代码 = -104)

首先对不起我的英语。我有问题需要帮助。我有一个自己在 c# 上制作的简单工具。此工具可连接到本地或远程 firebird 服务器 (v.2.5)。我的工具可以在服务器的某处创建指定的 .fdb 文件(数据库)。

我还有一个包含 SQL 语句的文件(创建表、触发器等)。我想在创建数据库后执行这个文件。执行此文件将填充用户数据库的结构 - 不是数据,只有结构。

但后来我尝试执行我的 SQL 脚本 - firebird 服务器返回一个

SQL 错误代码 = -104 令牌未知行 xxx 列 xxx。

这是这条CREATE TABLESQL 语句中的一行,例如:

如果我只在我的文件中留下一个创建语句 - 一切都会好的......我不知道我是如何解释的(是否清楚) - 换句话说 - 为什么我不能使用许多创建语句执行完整查询在一笔交易中?有我执行查询的主要方法:

有一个查询是我的SQL文件。

0 投票
2 回答
754 浏览

sql - 在组合框中列出搜索结果

我想改变我们的搜索,因为它现在有点老套了。目前它的工作原理是这样的:

  1. 用户在文本框中输入文本,例如沃尔沃并开始搜索。
  2. 这个用 SQL 搜索所有包含沃尔沃的帖子。
  3. 结果是一个包含 2 列的列表,BoldID 和 DisplayValue。
  4. BoldID 只是用于识别数据库中对象的唯一编号。
  5. DisplayValue 是用户在结果列表中看到的内容。
  6. 结果集中的每一行都用用户列表中的行号标识。第一个是 1,第二个是 2,以此类推。
  7. 通过在代码中循环查询,也有一个限制,只能按意图显示最多 99 个命中。有一个返回许多命中的查询是不好的,因为在用户命中列表中有更多没有意义。在这种情况下,搜索应该更具体。

结果列表显示在名为 rightpane 的单独全局窗口中。骇人听闻的部分是,如果从模式对话框中搜索,则必须从主窗口中取消右窗格才能使用鼠标选择一个值。我们怀疑这可能是应用程序有时会在主窗口后面的模式对话框中锁定自身的原因。

更改后它应该像这样工作:

用户在 Combobox 中输入文本,然后像以前一样按需使用 SQL 进行搜索。但结果集显示在组合框中。所以我只想尽可能地更改显示,因为有很多旧的 SQL 查询正在使用并且现在可以正常工作。

我们使用 Delphi 2007、Interbase 2009 和 DevExpress 的组件。昨天我尝试将自定义数据源连接到组合框,但我意识到这还没有实现。请参阅如何在 TcxExtLookupComboBox 中使用 TcxCustomDataSource。我想使用自定义数据源来实现行号和最大命中数。上面列表中的 Se 6 和 7。

所以现在我看到了 2 个选项:

  • 使用 DB 感知组合框
  • 使用文本框并将网格附加到它以显示结果集。

组合框比较简单,因为它是一个完整的组件,但我不知道如何实现上面列表中的功能 6 和 7。文本框 + 网格提供更多自由,但需要更多工作。

我更喜欢第一个选项。目前的问题是:

  • 我认为 Interbase SQL 不能限制结果集中的命中数。必须用代码来完成。这是如何使用 DB 感知组合框完成的?
  • 如何在结果集中显示行号?

更新 1: 感谢 Marjan,要求 7 已解决,谢谢。至于6,我觉得更难。理想情况下,我希望在 SQL 中使用它,这样我就可以提取自己的列,例如添加行号。但是 Interbase 不支持这一点。

0 投票
1 回答
2026 浏览

sql - 从 Interbase 在 SQL 中生成行号

这可能来自 Interbase 吗?例如在这个链接中。

0 投票
2 回答
930 浏览

sql - IBDAC / UniDAC + interbase 6 或 7 + 一个名为“returning”的表字段

我正在移植非常旧的代码以使用 UniDAC 组件。我遇到了一个特定的 UPDATE sql,它更改了一个名为“returning”的字段。简单地将字段用引号括起来并不能解决问题,因为数据库中的 SQL 方言是 1,它不支持双引号字段分隔符。有没有办法在不改变领域的情况下解决这个问题?我在 delphi 7 上,正在远离 interbase db 组件。

编辑:SQL如下:

尝试准备时返回以下错误:

即使我在代码中将客户端 SQL 方言设置为 1,也会发生这种情况:

0 投票
3 回答
8735 浏览

sql - 如何为 Interbase 更改现有数据库的字符集

我们有一个数据库,我们的客户端是用 Delphi 2007 编写的。使用的是最新的 Interbase 2009。该数据库很旧,我相信它是在 2002 年左右创建的,现在已经超过 25 GB。最近我发现在 IBConsole

upper('åäö')

生成“åäö”。它应该是“ÅÄÖ”。这是英文字母表中缺少的瑞典语字符。

我搜索了该主题并找到了此链接。重要的部分是:

如何更改现有数据库的默认字符集?没有支持的方法来执行此操作。您应该从元数据重新创建数据库。

该博客由 Craig Stuntz 于 2004 年 6 月 29 日撰写,我希望 Interbase 从那以后不断发展,并且有一种方法可以轻松更改 Interbase 2009 的字符集。如果不可能,可以从 gbk 备份文件中完成吗?最后一个选项是创建一个具有正确字符集的全新数据库,并以某种方式从旧数据库中抽取数据。

所以我有2个问题。

  1. 更改字符集的最简单方法是什么?
  2. 我应该选择什么字符集 upper('åäö') = 'ÅÄÖ'

编辑:正如克雷格所说,除了复制知道字符集的数据之外,没有真正的方法。所以我选择了另一种方式。

在这种情况下,这只是将瑞典语字符转换回小写,因为这是我从 Interbase 获得的结果。也许不是最好的解决方案,但我认为它有效。

0 投票
1 回答
61 浏览

sql - 为什么在第一种情况下显示 debit = 'null',而在第二种情况下显示正确的金额

为什么在第一种情况下显示 debit = 'null',而在第二种情况下显示正确的金额

~

~