SQLDataSet1 - sprawdzanie czy wartość SELECT'u jest "TR

0

Otóż mam kod:

procedure TForm4.Button1Click(Sender: TObject);
begin
SQLConnection1.Connected := TRUE;
SQLDataSet1.Active := TRUE;
query := 'SELECT * FROM char WHERE name='+Edit1.Text+' AND pass='+Edit2.Text;
SQLDataSet1.CommandText := query;
if SQLDataSet1 = True then
begin
Edit1.Text := 'jest';
end
else
begin
Edit1.Text := 'ni ma';
end;
end;

Otóż jak sprawdzić czy zapytanie SQLDataSet1 zwraca wartość TRUE?(bo jak wiadomo, select zwraca wartość bool)

0

Odświeżam.

0

nie jestem super biegły w delphi ale co to za komponent SQLDataSet ?
MIDAS, IBase ?? czy co ? bo ADO na pewno nie

edit:
sprawdziłem .... TDataSet w ADO ale ... może ktoś nieukowi przypomni SQLDataSet ?

0

zwracam honor ... pracuję ba MSSql2005expr
a D5 enterprise qrczaki tego nie znalazłem :)

EDIT:
a nie należołoby wspomnieć, że to D7 i dbExpress ...
nie fatygowałbym się ;-) :/

0

Czyli wiesz jak to sprawdzić?

0

NIE wiem ale zwykle dla tych kontrolek TRUE to właściwość Active
więc
SQLDataSet1.Active = true ??
ale to bez sensu bo to soft ustawia wartość ?
chętnie zapoznam się z opiniami bieglejszych w temacie
dla mnie to :
Query.eXEC (Open) ustawiam programowo a wynik wysyłam np. do DBGrid, jeśli wynikiem jest tabela

z niecierpliwością czekam na propozycje

edit:
a co ma Ci sygnalizować SQLDataSet1 = TRUE ?
chyba g00pi jestem [wstyd]

0

Active na pewno nie, bo to o ile wiem stan - czy zapytanie zostało już wysłane :)

0

ten kod na początku w ogóle Ci się kompiluje?

//ech... jak wiadomo zapytanie select nie zwraca żadnego bool, tylko tabelę. sprawdź czy został zwrócony chociaż jeden wiersz. dataset.recordcount>0

0
MagicHereos napisał(a)

Active na pewno nie, bo to o ile wiem stan - czy zapytanie zostało już wysłane :)

WŁAŚNIE ;-)
edit:
zdecydowanie jak @areksum

0
areksum napisał(a)

ten kod na początku w ogóle Ci się kompiluje?

//ech... jak wiadomo zapytanie select nie zwraca żadnego bool, tylko tabelę. sprawdź czy został zwrócony chociaż jeden wiersz. dataset.recordcount>0

Nie wiem jak w delphi, ale... w php select zwraca true or false - potem dopiero to się fetcha.

0

a czy nie mozna po prostu sprawdzić czy zapytanie zwróciło jaikeś rekordy?

SQLDataSet1.RecordCount

jeżeli więcej niż 0 to TRUE w przeciwnym razie FALSE

0

Nie znam tego komponentu, ktory uzywasz, ale dla mnie dziwnym jest, ze najpierw Aktywujesz DataSet, a następnie wprowadzasz zapytanie.

Większość komponentów jakie znam w tym momencie sie deaktywuje, unprepare-euje i robi całą masę rzeczy czyszczących DataSeta i przygotowujących do przyjęcia danych po ponownym aktywowaniu DataSeta.

u Ciebie nigdzie poźniej nie widzę uruchomienia wykonania zapytania (typu Execute, ExecSQL, czy Active:=TRUE)

W sensie - mam wrażenie, ze wykonujesz operacje w niewłaściwej kolejności.

poza tym ... obiekt SQLDataSet1 to instanacja jakiejś klasy - nie ma szans porównać jej do typu prostego Boolean. Chyba, że ja nie wiem czegoś istotnego o sensie Delphi.

Co do wyniku - ja bym zapytal dataset tak jak puchi: SQLDataSet1.RecordCount>0 = TRUE

Moim zdaniem popełniłeś dewa błędy: 1) zła kolejnośc wykonywania operacji, 2) zle skonstruowanie pytania o wynik

0
areksum napisał(a)

ten kod na początku w ogóle Ci się kompiluje?

//ech... jak wiadomo zapytanie select nie zwraca żadnego bool, tylko tabelę. sprawdź czy został zwrócony chociaż jeden wiersz. dataset.recordcount>0

Lepiej zrobić if not dataset.eof
bo w niektórych wypadkach będzie tak dużo szybciej

0

Racja.

0

Dzięki panowie, jesteście cudowni.
A teraz mam problem z zapytaniem, w php działa, a tu nie chce...

SQLConnection1.Connected := TRUE;
query := 'SELECT id FROM char WHERE nick="'+Edit1.Text+'" AND pass="'+Edit2.Text+'"';
//query := 'SELECT* FROM `char`';
SQLDataSet1.CommandText := query;
SQLDataSet1.Active := TRUE;

Zwraca error:
Exception class TDBXError with message 'You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'char WHERE nick="Nick" AND pass="Haslo"' at line 1'.

0

A ty masz w ogóle taka tabele "char"

Skoro zwraca ci ten błąd, to znaczy że moje poprzednie domysły były poprawne.

0

Poprawiłem to, co napisałeś, jednak mam taką tabelę - w php działa pięknie, tu nie chce.

0
MagicHereos napisał(a)

jednak mam taką tabelę - w php działa pięknie, tu nie chce.

Niewydajemniesię. Dostaję idealnie ten sam błąd, kiedy na swojej bazie MySQL próbuję odwołać się do nieistniejącej tabeli (żywcem odpaliłem w zapytanie: SELECT id FROM char WHERE nick="ddd" AND pass="xxxxx" = dokładnie ten sam błąd).

A weż w jakimkolwiek narzędziu typu Query (mowie o np. mysql.exe) na swojej bazie odpal zapytanie: SHOW TABLES i pokaż wynik (wystarczy wszystko na literę "c")

0

Cholera, php działało na starej bazie danych, bo się functions.php nie updatnęło. Sorka za kłopot [wstyd]

0

No cóż. Ktoś ci już to napisał: Najpierw pomyśl. Potem poszukaj, a na koniec pytaj.

Nikt za Ciebie tego nie zrobi.

0

Teraz mam bardzo dziwny błąd.
Gdy

query := 'SELECT * FROM wynik';

wtedy zapytanie jest wykonywane. Ale gdy...

query := 'SELECT * FROM char';

Mam błąd.
A tu wykaz z phpmyadmina(zainstalowanego przed chwilą xd)

magicmath (2)

* Struktura char
* Struktura wynik

#EDIT
Dziwne, zmieniłem nazwę i chula...;o

0

Wiesz co. Przeczytaj swojego posta i powiedz o co ci chodzi, bo mam wrazenie, ze mówisz połowy zdań.

Niestety - nie siedzę w Twojej głowie i nie widzę Twojego ekranu, zeby domyślec się drugiej połowy.

0
MagicHereos napisał(a)

#EDIT
Dziwne, zmieniłem nazwę i chula...;o

Oczywiście. Bo 'char' to nazwa typu prostego (jak INTEGER, DECIMAL i VARCHAR).

Chciałeś zrobić SELECTa z typu prostego, a nie z tabeli (a przynajmniej parser tak to zrozumiał)

P.S. nie 'chula' tylko 'hula'

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