Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.07.17;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.008 c
14-55809
Думкин
2003-06-30 06:43
2003.07.17
Окраины империи.


1-55615
Sandman25
2003-07-02 17:31
2003.07.17
Переменная окружения


1-55594
Брат
2003-07-03 12:13
2003.07.17
Как вызвать ошибку EOverFlow?


14-55814
SiJack
2003-06-30 15:59
2003.07.17
USB


14-55727
Fredericco
2003-07-02 14:08
2003.07.17
1 Gbit Ethernet.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский