Ilość wyników zwróconych przez zapytanie

0

Napisałem łączenie z baza danych MySQL za pomoca dbExpress tak jak to omawia ten artykuł http://4programmers.net/Delphi/Artykuły/MySQL_w_Delphi .

Pytanie mam następujące: jak obliczyć ilość wierszy zwróconych przez zapytanie?

Próbowałem to zrobić i napisałem nastepujacy kod:

DM.Statystyki.CommandText := 'SELECT prdc.materialcode, prdc.description, SUM(dats.qty) AS ilosc, SUM(dats.cost) AS cost, SUM(dats.invalue) AS invalue';
   DM.Statystyki.CommandText := DM.Statystyki.CommandText + ' FROM reportsproducts AS prdc';
   DM.Statystyki.CommandText := DM.Statystyki.CommandText + ' LEFT JOIN reportsdata AS dats';
   DM.Statystyki.CommandText := DM.Statystyki.CommandText + ' ON prdc.materialcode=dats.materialcode';
   DM.Statystyki.CommandText := DM.Statystyki.CommandText + ' JOIN handlowiecvat';
   DM.Statystyki.CommandText := DM.Statystyki.CommandText + ' ON handlowiecvat.vat=dats.vat';
   DM.Statystyki.CommandText := DM.Statystyki.CommandText + ' WHERE handlowiecvat.id=''' + inttostr(HandlowcyArray[ComboBox1.ItemIndex]);
   DM.Statystyki.CommandText := DM.Statystyki.CommandText + ''' GROUP BY dats.materialcode;';
  end;
  DM.Statystyki.Open;
  Showmessage('znaleziono ' + InttoStr(DM.Statystyki.RecordCount));

Po wykonaniu kody pojawiają się dwa błędy:

  • Database Server Error: Unkown table 'handlowiecvat' in where clause
  • [0x0005]: Operation Not Supported

Zapytanie jest na pewno dobrze skonstruowane, poniewaz sprawdzam je w MySQLFront i jest wykonywane poprawnie.
Dziwna że kiedy usunę ostatnia linijke Showmessage('znaleziono ' + InttoStr(DM.Statystyki.RecordCount));
to bład się nie pojawia i wszystko wykonuje się poprawnie. Dlaczego tak się dzieje?

0

pewnie dlatego, że "Operation Not Supported"

BTW słyszałeś kiedyś o with?

0

A o co chodzi z tym with i jak to sie stosuje?

0

Instrukcja wiążąca with. Zamiast robić ciągle:

DM.Statystyki.Foo...
DM.Statystyki.Bar...

możesz zrobić:

with DM.Statystyki do
begin
  Foo...
  Bar...
end;
0

Mały Off-Topic. Możesz formatować stringi za pomocą funkcji Format(). Więcej w helpie.

// sam wybierz bardziej czytelna wersję
SQL.Text := Format('INSERT INTO tabela VALUES (%d, %d, "%s");', 
[Liczba1, Liczba2, Napis1]);

SQL.Text := 'INSERT INTO tabela  VALUES('+
 IntToStr(Liczba1)+','+
 IntToStr(Liczba2)+','+
 Napis1+');';

1 użytkowników online, w tym zalogowanych: 0, gości: 1