1

我正在尝试将我的 Windows XP 程序(Lazarus)连接到我的 Ubuntu postgres 服务器。

当 Lazarus 程序运行时,它似乎编译得很好,但我得到了这个错误:

项目...引发异常类“RunError(211)”。

然后它终止执行(我没有看到任何输出),并打开一个文件customform.inc。在该文件中,它显示了procedure TCustomForm.DoCreate;突出显示一行的过程:if Assigned(FOnCreate) then FOnCreate(Self);

我相信这是系统的文件之一。

我从来没有看到任何输出。这可能是什么?谢谢!

更多信息:

我已将错误范围缩小到这一行:

  dbQuery_Menu.SQL.Text:='Select * From "tblMenus"';

  dbQuery_Menu.Open;

执行 OPEN 语句时会触发异常。

顺便说一句,dbQuery_Menu 被定义为 TSQLQuery 组件。

没头没脑!:(

4

3 回答 3

2

尝试调用抽象方法时出现运行错误 211。从有关 FreePascal/Lazarus 运行时错误的更多信息中查看此链接。

由于您说所有内容都由代码完成并且您没有可视组件,因此问题可能在于您的代码试图使用尚未覆盖 Open 方法的祖先组件。您应该能够通过使用正确的后代组件来解决此问题。

尽管我强烈建议避免这种情况,但另一种可能性是自己覆盖 Open 方法。应该避免这种情况,因为如果您使用的是祖先组件,那么您可能必须覆盖更多的抽象方法。

高温高压

于 2012-10-30T13:11:00.290 回答
2

将近5天后,我找到了答案。非常感谢所有为他们的想法做出贡献的人,特别是 RRUZRBAGuillem Vicens。还有其他相关的帖子都与让 FIRST Lazarus 程序与 PostgreSQL 一起工作有关。

概括。

  1. 我在这里犯的最大错误是我使用了TSQLConnection组件。不要这样做。而是使用TPQConnection.

  2. 一切都是通过代码完成的。我们没有使用顶部选项卡中的任何可拖动组件。

  3. 至少不要依赖 Lazarus 文档 (wiki) 来处理 PG DB。它已经过时了。其中一些示例可能会产生误导。

  4. 确保这些字段具有一些默认值。例如,如果布尔字段没有设置真假 (t/f),这可能会导致错误。

就是这样!我希望许多 postgres+Lazarus 新手会发现这很有用。

于 2012-10-31T05:23:57.683 回答
1

这里- http://www.network-theory.co.uk/docs/postgresql9/vol2/SQLSTATEvsSQLCODE.html - -211 (ECPG_CONVERT_BOOL) 这意味着主机变量是 bool 类型,数据库中的数据既不是 ' t' 也不是 'f'。(SQLSTATE 42804)

于 2012-10-30T14:33:12.617 回答