gpt4 book ai didi

mysql - Delphi 2010,BDE 参数问题,AsString,AsAnsiString

转载 作者:行者123 更新时间:2023-11-29 23:47:53 25 4
gpt4 key购买 nike

我正在开发一个包含大量表单的大型项目,使用 BDE 和 ODBC 连接到 MySQL 数据库。

我可以在 Delphi 2009 中编译它并且工作正常。当我在 Delphi 2010 中编译它时,没有任何效果,因为 TQuery 无法正确传递参数值。

这是一个例子:

txtUsername.Text = 'Admin';
Query1.Close;
Query1.SQL.Text = 'Select Count(*) From Tbl_User where Username = :username';
Query1.ParamByName('username').AsString = txtUsername.Text;
Query.Open();

SQL 将被发送到 MySQL,如下所示:

Select Count(*) From Tbl_User where Username = 'A'

仅参数的第一个字符将发送到服务器:“A”而不是“Admin”

但是如果我使用

Query1.ParamByName('username').AsAnsiString , then 

它会正常工作并且参数将完整发送:

Select Count(*) From Tbl_User where Username = 'Admin'

项目中存在大量的TQuery和TTable,不可能将AsString的所有调用都更改为AsAnsiString。

有什么解决办法吗?有什么设置可以让它正常工作吗?可能是使用 Ansi 作为默认值而不是 Unicode?

我尝试在编译选项中找到一些设置,并更改 ODBC 参数,但没有一个起作用。

如有任何帮助,我们将不胜感激。谢谢

最佳答案

我理解快速而廉价的解决方案的压力,但有时它们只会在一开始就快速而廉价,然后(在不久的将来)会变成一个根本没有解决方案的怪物问题。

所以,第一步,我建议您阅读 Regex Replace 上的帖子。使用它可以将所有 .AsString 替换为 .AsAnsiString,并快速让您的应用程序再次按预期运行。

但是不要对此感到太自在,你还有长期的工作要做。我为您的应用程序提供更好设计的建议是:

  1. 从表单中删除数据集并将其放入 DataModule 中,这样就不会将持久性和业务代码与演示代码混合在一起;
  2. 停止在业务代码中使用特定数据集,转而使用 TClientDataset,它比任何其他数据集都要好,将为您提供更好的应用程序设计以及完全的数据库和中间件独立性;
  3. 创建一个新的数据库层,将所有数据库和中间件细节放在接口(interface)后面,这将为您提供令人难以置信的数据库抽象级别。

当然,这是一项耗时的工作,因此不是一个快速且肯定不是一个便宜的解决方案,但它会给您带来很多见解并提高您的技术。在此过程中,您的应用程序将以前所未有的方式发展。

关于mysql - Delphi 2010,BDE 参数问题,AsString,AsAnsiString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25822716/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com