【问题标题】:how to get rid of "ADOQuery Field name not found" error in Delphi? (Using MS Access, and ADOQuery)如何摆脱 Delphi 中的“ADOQuery Field name not found”错误? (使用 MS Access 和 ADOQuery)
【发布时间】:2021-04-27 01:28:42
【问题描述】:

我正在尝试显示一个(例如):用户代码和密码,该用户代码和密码已在我的德尔福 MS Access 数据库中设置 如果有任何解决方法,我将不胜感激。

这是我的代码的一部分,我用它来获取信息并将它们显示到 TLabels 中,并在其中返回我遇到的错误..

with DataModule5 do
  begin
  // using the following code should display credentials from ms-access database to label text (TESTING)
    ADOQuery1.SQL.Text := 'SELECT * FROM Credentials ' +
                          'WHERE (UserCode = :UserCode) ' +
                          'AND (Password = :Password) ' +
                          'AND (FirstName = :FirstName) ' +
                          'AND (LastName = :LastName) ' +
                          'AND (Age = :Age) ' +
                          'AND (Adminstrator = :Adminstrator) ';
   MyAccountPage.UsernameDetail.Caption := ADOQuery1.FieldByName('UserCode').asString;
   MyAccountPage.PasswordDetail.Caption := THashMD5.GetHashString(ADOQuery1.FieldByName('Password').AsString);
   ADOQuery1.Open;
   MyAccountPage.Show;
  end;

这就是我尝试访问“我的帐户”表单时得到的结果:

PS:不只是没有找到的“UserCode”,还有其余的详细信息(密码、名字..等)

提前感谢您的帮助!

【问题讨论】:

  • 您好,请查看documentation 如何使用参数化查询。
  • @whosrdaddy 是的,我试图检查 documentaion 是否已退出,但我坚持使用第一个 const ConnString...,它说 ADOConnection1 提供程序是 SQLOLEDB.1,但我的提供程序设置为 Microsoft.Jet。 OLEDB.4.0
  • 只需使用您当前的连接字符串。我试图说明的一点是您需要为参数设置一个值,这在文档 (ADOQuery.Parameters.ParamByName) 中进行了解释
  • @whosrdaddy 我确实使用了我当前的连接字符串,但它给我这个错误:“找不到可安装的 ISAM”
  • @whosrdaddy 这是我的“FormCreate”full code,就像在文档中一样。当我运行它时,我得到了我提到的错误代码“找不到可安装的 ISAM”

标签: database ms-access delphi delphi-10.3-rio tadoquery


【解决方案1】:

在获取值之前,您正在从 ADOQuery 中读取值

改变

MyAccountPage.UsernameDetail.Caption := ADOQuery1.FieldByName('UserCode').asString;
MyAccountPage.PasswordDetail.Caption := THashMD5.GetHashString(ADOQuery1.FieldByName('Password').AsString);
ADOQuery1.Open;

到这里

ADOQuery1.Open;
MyAccountPage.UsernameDetail.Caption := ADOQuery1.FieldByName('UserCode').asString;
MyAccountPage.PasswordDetail.Caption := THashMD5.GetHashString(ADOQuery1.FieldByName('Password').AsString);

编辑
但这不是您的代码的唯一问题。

正如 whosrdaddy 在 cmets 中所建议的,您的参数未设置。请阅读如何使用参数here

此外,切勿在数据库中以明文形式存储密码。更好地存储密码的哈希值,您可以按照 fpiette 在 cmets 中的建议将其与用户代码连接

【讨论】:

  • 我要补充一点,在数据库中以明文形式存储密码确实是个坏主意。最好将密码的哈希码与用户代码连接起来。
  • 第二个问题是他没有设置参数...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-23
  • 2021-11-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多