我创建了一个必须使用SQL代码从我的数据库进行验证检查的类,但是当我尝试运行我的程序时,它不使用我的表单中的ADOquery。我试图通过将我的主单元添加到我班级的单元来修复它,但它会给出循环错误。我还试图将Form1添加到用途(这是我的表单的名称,我只有一个表单),但它不理解Form1。如果有人能提供帮助,我们将非常感激。
orait这是我班上的:
procedure TCheckA.CheckIfAdmin;
var iRecordA : Integer;
begin
qryInfo.Active := False;
qryInfo.SQL.Clear;
qryInfo.SQL.Add(' Select [Lid Naam], [Lid Wagwoord], Adminustrateur ');
qryInfo.SQL.Add(' From [CATSA Lede] ');
qryInfo.SQL.Add(' Where [Lid Naam] = "'+fgebruikernaam+'"and [Lid Wagwoord] = "'+fpassword+'" and Adminustrateur = True ');
qryInfo.Active := True;
iRecordA := qryinfo.recordcount;
if iRecordA = 1
then begin
fAdminAnswer := True;
end
else begin
fAdminAnswer := False;
end;
end;
然后它通过了这个错误:[Error] IntekenCheck.pas(29): Undeclared identifier: 'qryInfo'
然后,如果我尝试将我的主要单位放在我班级的单位中,如:
unit IntekenCheck;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls, Buttons, jpeg, ExtCtrls, XPMan, Grids,
DBGrids, DB, ADODB, Math, AdminCheck, Chairmin_u{main unit};
然后错误是:[Fatal Error] IntekenCheck.pas(7): Circular unit reference to 'IntekenCheck'
答案 0 :(得分:1)
将查询传递到您的班级,并在那里使用:
procedure TCheckA.CheckIfAdmin(const Query: TAdoQuery);
begin
AQuery.Active := False;
AQuery.SQL.Clear;
AQuery.SQL.Add(' Select [Lid Naam], [Lid Wagwoord], Adminustrateur ');
AQuery.SQL.Add(' From [CATSA Lede] ');
AQuery.SQL.Add(' Where [Lid Naam] = "' + fgebruikernaam +
'"and [Lid Wagwoord] = "'+ fpassword +
'" and Adminustrateur = True ');
AQuery.Active := True;
fAdminAnswer := (AQuery.RecordCount = 1);
end;
(您还应该更改为使用参数化查询而不是使用+
进行连接。它更加安全。此处还有许多与参数化查询和Delphi相关的问题;快速搜索[delphi] parameter query
应该找到它们。)