我正在尝试将我的Windows XP程序(Lazarus)连接到我的Ubuntu postgres服务器。
当Lazarus程序运行时,似乎编译正常,但我收到此错误:
Project ...引发异常类'RunError(211)'。
然后它终止执行(我看不到任何输出),并打开一个文件 customform.inc 。在该文件中,它会显示一个过程procedure TCustomForm.DoCreate;
,其中突出显示一行:if Assigned(FOnCreate) then FOnCreate(Self);
我相信这是系统的文件之一。
我永远不会看到任何输出。 这可能是什么?谢谢!
更多信息:
我已将错误缩小到这一行:
dbQuery_Menu.SQL.Text:='Select * From "tblMenus"';
dbQuery_Menu.Open;
执行OPEN语句时会触发异常。
BTW,dbQuery_Menu被定义为TSQLQuery组件。
没有线索! :(
答案 0 :(得分:2)
近5天后,我找到了答案。非常感谢所有人都为他们的想法做出了贡献,特别是 RRUZ , RBA 和 Guillem Vicens 。还有其他相关的帖子都与使用PostgreSQL的FIRST Lazarus程序有关。
概要
我在这里犯的最大错误是我使用了TSQLConnection
组件。不要这样做。而是使用TPQConnection
。
一切都是通过代码完成的。我们没有使用顶部标签中的任何可拖动组件。
至少不要依赖Lazarus docs(wiki)来处理PG DB ..它已经过时了。有些例子可能会产生误导。
确保字段具有一些默认值。例如,如果布尔字段没有设置true或false(t / f),则可能会导致错误。
就是这样!我希望很多postgres + Lazarus新手会觉得这很有用。
答案 1 :(得分:1)
运行错误211。从有关FreePascal / Lazarus运行时错误的更多信息中查看此link。
由于您说所有操作都是通过代码完成的,并且您没有可视组件,因此问题可能在于您的代码尝试使用未覆盖Open方法的祖先组件。您应该能够使用正确的后代组件来解决这个问题。
另一种可能性,虽然我强烈建议避免这个,但是要自己覆盖Open方法。应该避免它,因为如果你使用的是祖先组件,那么你可能必须覆盖更抽象的方法。
HTH
答案 2 :(得分:1)
从here - http://www.network-theory.co.uk/docs/postgresql9/vol2/SQLSTATEvsSQLCODE.html - -211(ECPG_CONVERT_BOOL)这意味着主变量的类型为bool,数据库中的数据既不是't'也不是'f'。 (SQLSTATE 42804)