Jest sobie kawałek przykładowego kodu:
sqlstring := '';
sqlstring := 'select sum(cena*ilosc) as wartosc, waluta from oferta';
sqlstring := sqlstring + ' where nr_oferty=' + inttostr(nr_oferty);
sqlstring := sqlstring + ' group by waluta';
q_tmp.CommandText := sqlstring;
q_tmp.Open;
if q_tmp.RecordCount>1 then
begin
showmessage('Oferta ma pozycje o różnej walucie.');
end;
Okazuje się, że RecordCount źle zlicza wynik zapytania, w którym jest "group by".
Przykładowo, jeśli mamy tabelkę z pozycjami:
+------+-----+--------+
| cena | ilosc| waluta |
+------+-----+--------+
| 5 | 2 | PLN |
| 7 | 2 | EUR |
| 23 | 1 | PLN |
| 34 | 1 | EUR |
| 33 | 1 | PLN |
+------+-----+--------+
i wynik powyższego zapytania to:
+---------+--------+
| wartosc | waluta |
+---------+--------+
| 66 | PLN |
| 48 | EUR |
+---------+--------+
...czyli liczba wierszy wynosi 2, to RecordCount i tak zwraca liczbę 5.
Pomyślałem więc, że można zrobić to w taki sposób:
sqlstring := '';
sqlstring := 'select distinct waluta from oferta';
sqlstring := sqlstring + ' where nr_oferty=' + inttostr(nr_oferty);
q_tmp.CommandText := sqlstring;
q_tmp.Open;
if q_tmp.RecordCount>1 then
begin
showmessage('Oferta ma pozycje o różnej walucie.');
end;
Okazuje się, że też nie!
Tutaj odpowiedzią na to zapytanie jest:
+--------+
| waluta |
+--------+
| EUR |
| PLN |
+--------+
Ale na linii "if q_tmp.RecordCount>1 then" Delphi wywala mi błąd:
[0x0005]: Operation Not Supported
Co źle robię?