Zeos zapytania MySQL

0

Witam,
Przestudiowałem z 4programmers artykuł o dbexpress i Mysql. Na wzór tego za
pomocą komponentów Zeos zrobiłem bazkę.
Mam dwa problemy i chciałbym poprosić o pomoc. Zeos w swoich przykładach
kożysta z komponentu DBNavigator, ale a nie chcę.
Zrobiłem zapytanie z pomocą zquery i działa. Mam problem tylko z usówaniem i
edytowaniem rekordów.

  1. Jak zadać pytanie do usunięcia rekordu?
    zap.SQL.ADD('DELETE FROM sys WHERE id=' DBGrid1. i tu nie wiem jak wybrać
    żeby usuną ten zaznaczony.
    I jak sprawdzić jeżli nie ma nic zaznaczonego.

  2. Jak ktos zaznaczy rekord w DBGrid i wybierze opcję edytuj to niech ten
    rekord wczyta się do odpowienich
    edit1.txt, edit2.txt itd....

Bardzo będę zobowiązany za pomoc lub link gdzie są Zeos i zapytania SQL

Pozdrawiam
Piotrek

0
  1. Jak zadać pytanie do usunięcia rekordu?
    zap.SQL.ADD('DELETE FROM sys WHERE id=' DBGrid1. i tu nie wiem jak wybrać
    żeby usuną ten zaznaczony.
    I jak sprawdzić jeżli nie ma nic zaznaczonego.

Musisz w OnClick Dbgrida zapisywać do zmiennej ID zaznaczonego wiersza.
Lub do jakiegoś Edita.

  1. Jak ktos zaznaczy rekord w DBGrid i wybierze opcję edytuj to niech ten
    rekord wczyta się do odpowienich
    edit1.txt, edit2.txt itd....

www.austrinus.prv.pl

0
RedbaK napisał(a)

Musisz w OnClick Dbgrida zapisywać do zmiennej ID zaznaczonego wiersza.
Lub do jakiegoś Edita.
oj, oj, oj jak nie wiemy o czym piszemy to nie piszemy wcale :)

Piotrek Redel napisał(a)
  1. Jak zadać pytanie do usunięcia rekordu?
    zap.SQL.ADD('DELETE FROM sys WHERE id=' DBGrid1. i tu nie wiem jak wybrać
    żeby usuną ten zaznaczony.
    zQuery.FieldByName('nazwa_pola_kluczowego').AsInteger zwróci Ci id aktualnie wybranego rekordu w DBGridzie podłączonym do tego Query

I jak sprawdzić jeżli nie ma nic zaznaczonego.
wybrany jest zawsze tylko nie zawsze widać to zaznaczenie w DBGridzie - w OI, w Options ustaw AlwaysShowSelection na True

Piotrek Redel napisał(a)
  1. Jak ktos zaznaczy rekord w DBGrid i wybierze opcję edytuj to niech ten
    rekord wczyta się do odpowienich edit1.txt, edit2.txt itd....
    ale jak się ma wczytać automagicznie? Musisz sam to zrobić, czyli np. nowa forma + odpowiednia ilość editów i labeli + przyciski OK / Anuluj + odpowiedni kod jak ten do pobrania ID tylko podajesz odpowienie nazw pól i odpowiednie typy (AsString, AsInteger, AsFloat, ...)
0

A jeżeli użyjesz kontrolek DBEdit to będzie się wczytywało automagicznie.

0

Misiekd naskrobał:

oj, oj, oj jak nie wiemy o czym piszemy to nie piszemy wcale :)

Przecież żeby usunąć zaznaczony wiersz to przeca trzeba pobrać jego ID gdzieś nie? :)

//Dopisane
No cóż. Widocznie nie wszyscy znają się na żartach i są..., o byle co denerwującymi się hehe :-D [glowa]

======
Ziomuś wyluzuj trochę i nie napinaj się tak :)

0
teles40 napisał(a)

A jeżeli użyjesz kontrolek DBEdit to będzie się wczytywało automagicznie.
ale na 99% i automagicznie się wysypie przy zmianie danych (query is read only) (nie piszę, że się tego nie da naprawić ale tez się to samo nie zrobi) to raz a dwa było wyraźnie napisane "rekord wczyta się do odpowienich edit1.txt, edit2.txt itd...."

RedbaK napisał(a)

Przecież żeby usunąć zaznaczony wiersz to przeca trzeba pobrać jego ID gdzieś nie? :)
to ci wyżej napisałem jak się pobiera ID aktualnego rekordu i na pewno nie jest to w onClick DBGrida ... [glowa]

0
RedbaK napisał(a)

Przecież żeby usunąć zaznaczony wiersz to przeca trzeba pobrać jego ID gdzieś nie? :)
to ci wyżej napisałem jak się pobiera ID aktualnego rekordu i na pewno nie jest to w onClick DBGrida ... [glowa]</quote>

No i lipa znalazłem dzięki koledze który na początku podał linka, ale nadal mam problem z popraniem ID z DBGRID-a.
Robię tak:
zap.SQL.Clear;
zap.SQL.Add('Delete from sys where id='+IntToStr(zap.ParamByName('id').AsInteger));
zap.ExecSQL;
Dostaję komunikat że id not fund? Hmm nadal nie rozumiem jak pobrać id z grida ;-(
Pomóżcie

0

Po pierwsze to

Piotrek Redel napisał(a)

Dostaję komunikat że id not fund? Hmm nadal nie rozumiem jak pobrać id z grida ;-(

robisz

zap.SQL.Clear;

a zaraz potem chcesz zrobić

zap.ParamByName('id').AsInteger);

i jak to ma wg Ciebie zadziałac?

To wygląda dokładnie tak jakbyś nalał wody do wiadra, potem ją wylał (zap.SQL.Clear;) a potem chciał z tego wiadra zaczerpnąć szklankę wody (zap.ParamByName('id').AsInteger);)

Są dwa rozwiązania

  1. albo masz dwa różne Query (jedno z SELECT a druge z DELEETE)
  2. albo przed zamknięciem Query (zap.SQL.Clear; min to robi) pobierasz ID do jakiejś zmiennej

A po drugie jak masz taka konstrukcję

zap.SQL.Add('Delete from sys where id='+IntToStr(zap.ParamByName('id').AsInteger));

to niepotrzebnie dokonujesz konwersji zap.SQL.Add('Delete from sys where id=' + zap.ParamByName('id').AsString);

poczytaj też o parametrach
0

Bardzo dziękuję wszystkim za pomoc.
Jesteście super [browar] .

Postaram się poskładać wszystko do kupy.

Dzięki jeszcze raz wszystkim

Piotrek Redel

0

Oki to już zakumałem, mam pytanko
Dlaczego pokazuje mi cały czas tylko jeden rekord?
Zrobiłem tak

Edit1.Clear;
zap.SQL.Add('SELECT * From sys');
Zap.Open;
edit1.Text:= IntToStr(zap.FieldByName('id').AsInteger);

I pomimo zmian mam cały czas 48 ID?

Dzięki

0
piotrr napisał(a)

Oki to już zakumałem, mam pytanko
Dlaczego pokazuje mi cały czas tylko jeden rekord?
Zrobiłem tak

Edit1.Clear;
zap.SQL.Add('SELECT * From sys');
Zap.Open;
edit1.Text:= IntToStr(zap.FieldByName('id').AsInteger);

I pomimo zmian mam cały czas 48 ID?

Dzięki

zmian czego??
przecież ten kod wywołuje się tylko RAZ. Jak chcesz mieć w edicie ID aktualnie wybranego rekordu to ten kod

edit1.Text:= IntToStr(zap.FieldByName('id').AsInteger);

daj do AfterScroll query

BTW jak grochem o ścianę

edit1.Text:= IntToStr(zap.FieldByName('id').AsInteger);

po co Ci ta dodatkowa konwersja?edit1.Text:= zap.FieldByName('id').AsString;

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