sprawdzanie wyniku select (dbexpress)

0

przeszukałem forum ale nie moge znaleźć odpowiedniego kodu a sam juz nie mam pomsyłu.

potrzebuje kawałek kodu dzięki któremu bede sprawdzał czy istnieje rekord w bazie.

mam cos takiego

 Procedure Tform4.sprawdz;
begin
 
   with sqlquery1 do
    begin
    Close;
    SQL.Clear;
    SQL.Add('select * from przeglady where id_auta='+form4.panel2.caption+' 
    and id_user='+form4.panel1.caption+' 
    and data='''+DateToStr(form4.datetimepicker1.date)+''' ');
    if SQLQuery1.ExecSQL(true) = 1 then ...

    end;
end;

ale nie działa (wiem ze select powinno sie obsługiwać poleceniem sqlquery.open) ale kurde nie mam juz pomysłu [glowa]

chodzi o to ze jeżeli istnieje rekord w bazie o podanych parametrach to go edytuj jesli nie to dodaj.

0
domik napisał(a)

wiem ze select powinno sie obsługiwać poleceniem sqlquery.open

to po grzyba robisz inaczej?

domik napisał(a)

potrzebuje kawałek kodu dzięki któremu bede sprawdzał czy istnieje rekord w bazie.

hmm, przecież jak przeglądasz rekordy, które zostały pobrane to wiesz ile ich jest (i czy w ogóle jakieś są), ew. możesz dodać do SELECT'a count(*) AS ilosc, wtedy baza policzy za Ciebie

0
AklimX napisał(a)
domik napisał(a)

wiem ze select powinno sie obsługiwać poleceniem sqlquery.open

to po grzyba robisz inaczej?

po to zeby pokazać ze coś próbowałem i nie przychodze po gotową odpowiedź bez wcześniejszych prób.

AklimX napisał(a)
domik napisał(a)

potrzebuje kawałek kodu dzięki któremu bede sprawdzał czy istnieje rekord w bazie.

hmm, przecież jak przeglądasz rekordy, które zostały pobrane to wiesz ile ich jest (i czy w ogóle jakieś są), ew. możesz dodać do SELECT'a count(*) AS ilosc, wtedy baza policzy za Ciebie

z tego co widze to chyba problem niedostatecznie opisałem.
potrzebuje wiedzieć tylko czy taki rekord jest czy nie (powinen być tylko 1 na dzien). nie potrzebuje go nigdzie wyświetlać (i nie robie tego). próbowałem z execsql bo on zwraca wartości (true false) open chyba tego nie robi.

 SQL.Add('select * from przeglady where id_auta='+form4.panel2.caption+' 
and id_user='+form4.panel1.caption+' 
and data='''+DateToStr(form4.datetimepicker1.date)+'''

 count (*) as ilosc '); 

jeśli dam coś takiego to jak moge sprawdzić jaką wartość ma ilosc

tak nawiasem mówiąc uzywam mysql'a i nie wiem czy jest w nim taka opcja jak count. (powyzsze wyrazenie nie działa i nie potrafie nic wykombinować zeby działało)

0

Wykonaj select'a /SQLQuery1.Open/ i sprawdź co zwrócił:
if SQLQuery1.RecordCount > 0 then ...

0

dokładnie o to chodziło thx.

0
domik napisał(a)

z tego co widze to chyba problem niedostatecznie opisałem.
potrzebuje wiedzieć tylko czy taki rekord jest czy nie (powinen być tylko 1 na dzien). nie potrzebuje go nigdzie wyświetlać (i nie robie tego). próbowałem z execsql bo on zwraca wartości (true false) open chyba tego nie robi.

ano zwraca, ale zapewne nie doczytałeś co ona oznacza ...

 SQL.Add('select * from przeglady where id_auta='+form4.panel2.caption+' 
and id_user='+form4.panel1.caption+' 
and data='''+DateToStr(form4.datetimepicker1.date)+''' count (*) as ilosc '); 

jeśli dam coś takiego to jak moge sprawdzić jaką wartość ma ilosc

x := Query.FieldByName('ilosc').AsInteger;
i w x masz to co w polu ilość, czyli na dobrą sprawę ilość zwróconych przez zapytanie rekordów

tak nawiasem mówiąc uzywam mysql'a i nie wiem czy jest w nim taka opcja jak count. (powyzsze wyrazenie nie działa i nie potrafie nic wykombinować zeby działało)

bo count podaje się tam gdzie nazwy pól, czyli powinno to wyglądać tak (w dokumentacji jak i w KAŻDEYM podstawowym kursie SQLa to JEST!)

 SQL.Add('select count (*) as ilosc from przeglady where id_auta='+form4.panel2.caption+' and id_user='+form4.panel1.caption+' and data='''+DateToStr(form4.datetimepicker1.date)+'''); 
0

dzieki za bardzo wyczerpującą odpowiedź

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