Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.17;
Скачать: CL | DM;

Вниз

Ввод функции   Найти похожие ветки 

 
Status_I   (2003-06-22 19:47) [0]

Господа помогите новичку в SQL!
Требуется задать функцию, в теле которой в виде параметра SQL-запрос с COUNT.Т.е. требуется подсчет записей по разным полям(Paradox).То что сочинил выдаёт непонятный результат.Помогите, если не сложно.


Interface
………….
Type
………….
…………
function Numbercount(Query1:TQuery;AText1:String):Integer;

implementation


uses UDataM;

{$R *.dfm}
function TMainForm.Numbercount(Query1:TQuery;AText1:String):Integer;
begin
with DataM.Query1 do
begin
if Active then Close;
SQL.Clear;
SQL.Add(AText1);
Open;

end;
end;

procedure TMainForm.LMDShapeButtonConnectClick(Sender: TObject);
var
AText1:String;
Query1:TQuery;
Begin
AText1:="";
AText1:="SELECT COUNT(Number) FROM Control.DB";
StatusBar1.Panels[0].Text:=IntToStr(Numbercount(Query1,AText1));
End;
End;
Сообщения компилятора:
Return value of function:"TMainForm.Numbercount" might be undefind;
Variable "Query1" might not have been initialiized


 
sniknik ©   (2003-06-22 21:56) [1]

> Return value of function:"TMainForm.Numbercount" might be undefind;
возврашаемое значение функции неопределено. напиши в теле функции
Numbercount:= 5; //значение
или
Result:= 17; //другое значение //но вобще поставь нужное

Variable "Query1" might not have been initialiized
передаваемое в функцию Query1 возможно не инициализирована. убери вообще, у тебя используется из модуля DataM.Query1.


 
Status_I   (2003-06-22 22:58) [2]

Вставил в тело Result:=0, дак и в StatusBar теперь 0. И от куда убрать Query1? Извините за непонятливость.


 
sniknik ©   (2003-06-23 01:37) [3]

function TMainForm.Numbercount(AText1:String):Integer; <- в заголовке не нужно
begin
Result:=0
with DataM.Query1 do begin <- пользуешся из модуля DataM
if Active then Close;
SQL.Clear;
SQL.Add(AText1);
Open;
Result:= Fields[0].AsInteger; <- нужное значение
end;
end;

примерный запрос
StatusBar1.Panels[0].Text:= IntToStr(Numbercount("SELECT COUNT(*) FROM Control.DB"));
да и то, нафига весь запрос передавать? уж если для многих таблиц выводится передавай в функцию только имя таблици, и составляй его внутри.

а вот эта кверя
procedure TMainForm.LMDShapeButtonConnectClick(Sender: TObject);
var
AText1:String;
Query1:TQuery;
Begin
...
первое не нужна, второе неинициализирована (компилятор пропустит, с предупреждением, а на этапе выполнения при обращении ошибка вывалится)


 
Status_I   (2003-06-23 10:45) [4]

Большое спасибо все получилось!Вот только если есть время,нельзя ли пояснить оператор,Result:= Fields[0].AsInteger; что здесь происходит?И почему Fields[0]?
Еще раз большое спасибо за помощь!


 
sniknik ©   (2003-06-23 11:44) [5]

полное представление
Result:= DataM.Query1.Fields[0].AsInteger
происходит выборка значения из результатов запроса, из первого поля, в возвращаемую функцией переменную (вернее в этом случае регистр, но это неважно). почему ноль? до потому что возвращается единственное поле а смещение идет с нуля.
если бы запрос был с именем "SELECT COUNT(*)AS CountNum FROM Control.DB" то можно былобы попонятнее DataM.Query1.FieldByName("CountNum").AsInteger, но так как имя поля неизвестно (подставится чтонибудь вроде Expr1000) то берем по смещению (с нуля, и кстати быстрее немного на больших таблиицах/циклах заметно).


 
Status_I   (2003-06-23 16:57) [6]

Огромное спасибо!Кажется всё понял.



Страницы: 1 вся ветка

Текущий архив: 2003.07.17;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.013 c
14-55742
Кен
2003-07-01 04:55
2003.07.17
Как вы думаете, в какую сторону развивается GLScene ? Чего автор


1-55609
Mishenka
2003-07-03 17:04
2003.07.17
Как в Memo записать текстовый файл?


14-55808
NailMan
2003-06-30 15:56
2003.07.17
Фрактальный генератор случайных чисел


6-55682
keymaster
2003-05-11 11:47
2003.07.17
Как 100% узнать есть ли в данный момент соединение с инетом?


1-55518
DM.OMen
2003-07-04 17:30
2003.07.17
WinExec ???