błędne zapytania SQL w ZeosLib

0

Witam

Mam następujące pytanie:
Dlaczego (kiedy próbuje wysłać zapytanie SQL do ZeosLIB) wywala mi się program i pokazują się następujące błędy:

user image

user image

Dodam tylko że pierwsze zapytanie realizowane jest bez żadnego problemu, a więc samo połączenie jest na pewno poprawne. Problem pojawia się kiedy próbuje wysłać drugie zapytanie.

0

Wyświetl sobie to co przekazujesz do MySql'a w MessageBox'ie przed zapytaniem i zauważysz że twoje drugie zapytanie ma dwa wiersze, o czym (między wierszami - at line 2) mówi komunikat.

0

Ja tu nie widze żadnych dwóch linii.
A Tak wygląda kod pod przyciskiem do wysyłania zapytań SQL:

procedure TForm1.Button2Click(Sender: TObject);

const
  SELECT_SQL = 'Select * From ';

  dodatkowa_dlugosc = 10 ;
var
  PNode: PVirtualNode;
  PData: PVirtualRec;

  pomoc, n: Integer;
  max_dlugosc: array [0..30] of Integer;

  QueryStr: string;
begin
  //sprawdza ktore sa zaznaczone
PNode:= VirtualStringTree1.GetFirstChecked(csCheckedNormal, True);
PData:= VirtualStringTree1.GetNodeData(PNode);
      //ShowMessage(PData.Caption);   //SPRAWDZENIE - w puźniwjazym etapie do usunięcia

      PNode:= VirtualStringTree1.FocusedNode;
      PData:= VirtualStringTree1.GetNodeData(PNode); //pobieramy dane
      //ShowMessage(PData.Caption);                    //wyswietlenie etykiety podswietlonej na niebiesko
      form1.Label1.Caption:=(PData.Caption);  //SPRAWDZENIE - w puźniwjazym etapie do usunięcia


if PData.Caption= 'Karty Muzyczne' then
  begin
      PData:= VirtualStringTree1.GetNodeData(PNode);  //Nadanie nazwy tabeli do zapytania SQL
      PData.TableName:= 'NB_KartyMuzyczne';

      QueryStr:= SELECT_SQL + PData.TableName; //teraz w QueryStr masz cale zapytanie i robisz z nim co chcesz
      ShowMessage(QueryStr);                   //ja je dla przykladu wyswietle
      DM.ZReadOnlyQuery1.SQL.Add(QueryStr);
      DM.ZReadOnlyQuery1.Active:=true;

      DM.ZQuery1.SQL.Add(QueryStr);
      DM.ZQuery1.Active := true;
  end;

if PData.Caption= 'Dyski Twarde' then
  begin
      PData:= VirtualStringTree1.GetNodeData(PNode);
      PData.TableName:= 'NB_HDD_SATA';         //Nadanie nazwy tabeli do zapytania SQL

      QueryStr:= SELECT_SQL + PData.TableName; //teraz w QueryStr masz cale zapytanie i robisz z nim co chcesz
      ShowMessage(QueryStr);                   //ja je dla przykladu wyswietle
      DM.ZReadOnlyQuery1.SQL.Add(QueryStr);
      DM.ZReadOnlyQuery1.Active:=true;

      DM.ZQuery1.SQL.Add(QueryStr);
      DM.ZQuery1.Active := true;
  end;



//-------------------ustawienie szerokosci kolumn------------------

begin
  with form1.DBGrid1 do
  begin
    Canvas.Font := Font;
    //zapamiętanie długości napisów w tytułach kolumn
    for n := 0 to Columns.Count - 1 do
      max_dlugosc[n] := Canvas.TextWidth(Fields[n].FieldName) +  dodatkowa_dlugosc;
    DataSource.DataSet.First;
    //jeśli pole jest dłuższe niż długość kolumny, to ustawiamy nowy max_dlugosc
    while not DataSource.DataSet.EOF do
    begin
      for n := 0 to Columns.Count - 1 do
      begin
        pomoc := Canvas.TextWidth(trim(Columns[n].Field.DisplayText)) +
                                                  dodatkowa_dlugosc;
        if pomoc > max_dlugosc[n] then max_dlugosc[n] := pomoc;
      end;
      DataSource.DataSet.Next;
    end;
    //ustawiamy nową szerokość kolumn
    DataSource.DataSet.First;
    for n := 0 to Columns.Count - 1 do
      if max_dlugosc[n] > 0 then
        Columns[n].Width := max_dlugosc[n];
  end;
end;




end;
0

przeczytaj dokładnie co robi w tym DM.ZReadOnlyQuery1.SQL.Add(QueryStr) metoda Add.

0

przeczytaj dokładnie co robi w tym DM.ZReadOnlyQuery1.SQL.Add(QueryStr) metoda Add.

a można jaśniej bo dalej nie rozumiem. Według mnie ta metoda wysyła zapytania do bazy danych

0

daj showMessage po wywołaniu Add ale przed Active, coś w ten deseń

DM.ZReadOnlyQuery1.SQL.Add(QueryStr);
ShowMessage(DM.ZReadOnlyQuery1.SQL.Text);
 
1

A nie trzeba przypadkiem, przed:

DM.ZReadOnlyQuery1.SQL.Add(QueryStr);

dać, coś w rodzaju

DM.ZReadOnlyQuery1.SQL.Clear;
0

A to co ma być :)

PData.TableName:= PData.TableName;        //<-- Tu od razu 
0

DM.ZReadOnlyQuery1.SQL.Text:=QueryStr;

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