2013-09-17 2 views
0

Я создал класс, который должен использовать SQL-код для проверки проверки из моей базы данных, но когда я пытаюсь запустить свою программу, он не использует ADOquery из моей формы. Я попытался исправить это, добавив свой основной блок в блок моего класса, но затем он дал ошибку циркуляции. Я также попытался добавить Form1 в использование (то есть имя моей формы, и у меня только одна форма), но тогда он не понимает Form1. Если кто-то может помочь, он будет очень признателен.Как использовать SQL-код В моем классе?

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

Можете ли вы показать код, который неисправен, и предоставить конкретные сообщения об ошибках, которые вы получаете? – David

+0

Сэн-парни, когда я разместил этот вопрос, я все еще программировал глупо и не думал строить свои запросы в своих классах, а затем просто возвращать его в свою основную программу. Спасибо всем за помощь, я действительно ценю это, и я буду помнить об этих советах. Кстати, я теперь код на C#, а не delphi, но принципы остаются неизменными. –

ответ

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; 

(Вы должны также изменить, чтобы использовать параметризованные запросы, а не вместо contatenation с +. Это намного безопаснее. Здесь есть много других вопросов, связанных с параметризованными запросами и Delphi; быстрый поиск по [delphi] parameter query должен найти их для вас.)

Смежные вопросы