Sprawdzanie danych w bazie mysql w Zeoslib

0

Witam mam problem z programem który piszę w Delphi przy użyciu komponentu ZeosLib do obsługi bazy danych mój problem jest następujący.

Mam tabelkę która wygląda naprzykład tak:

ID imie nazwisko
1 imie1 nazwisko1
2 imie2 nazwisko2
3 imie3 nazwisko3
4 imie4 nazwisko4

No i problem tkwi w tym że nie wiem w jaki sposób dodać petle (funkcję), która sprawdzi czy np: Użytkownik o imieniu1 ma takie same imię jak imię wprowadzone przez tego użytkownika z tą różnica że nazwisko jest inne. To oczywiście jest tylko przykład.
Aha proszę mnie nie odsyłać do kursów o SQL bo wiem że do tego może posłużyć taka linijka kodu jak:

ZQuery1.SQL.Add('UPDATE nazwa_bazy SET  Nazwisko =' +NazwiskoEdt.Text+ ' where =' +ImieEdt.Text); 

Chodzi mi tylko o to że nie wiem w jaki sposób zrobić sprawdzanie czy dane takie istnieją czy też nie.

Dodam jeszcze tylko że moję dane są wprowadzane do bazy mysql w ten sposób

ZQuery1.ParamByName('imie').AsString := ImieEdt.Text;
ZQuery1.ParamByName('Nazwisko').AsString := NazwiskoEdt.Text;

Może ta linika też się przyda:

ZQuery1.SQL.Add('INSERT INTO nazwa_bazy (id,imie,nazwisko) VALUES(0, :imie, :nazwisko)');

Trochę namotałem ale gdyby ktoś nie mógł sobie poradzić z rozszyfrowaniem o co mi chodzi to proszę pytać postaram się to jakoś w łatwiejszy sposób wytłumaczyć :d

0

Nie bardzo wiem co chcesz osiągnąć ale jeżeli chcesz nie dopuścić do tego żeby w bazie nie było użyszkodników o takim samym imieniu i nazwisku to po prostu w bazie zakładasz indeks na pola imie i nazwisko, wtedy sama baza nie pozwoli na wpisanie dubla.
Poniższe zapytanie sprawdzi ilu jest użyszkodników o podanym imieniu ale nazwisku innym niż poda użyszkodnik

 
ZQuery1.Close;
ZQuery1.Clear;
ZQuery1.SQL.Text := 'select count(imie) from tabelka where imie =:imie and nazwisko <>:nazwisko';
ZQuery1.ParamByName('imie').AsString := ImieEdt.Text;
ZQuery1.ParamByName('nazwisko').AsString := NazwiskoEdt.Text;
ZQuery1.Open;
0

myślę, że kurs SQLa to jednak to czego potrzebujesz bo pojęcia nie masz żadnego co robisz

0
Misiekd napisał(a)

myślę, że kurs SQLa to jednak to czego potrzebujesz bo pojęcia nie masz żadnego co robisz

A co w nosi ten post do tego tematu może ktoś mnie oświecić ??

0

@up ukierunkowuje autora wątku na właściwy kurs bo niestety autor nie bardzo wie co robi.

0
Masakrator napisał(a)
Misiekd napisał(a)

myślę, że kurs SQLa to jednak to czego potrzebujesz bo pojęcia nie masz żadnego co robisz

A co w nosi ten post do tego tematu może ktoś mnie oświecić ??

dokładnie to samo co próba pobierania danych z bazy updatem czy insertem. A jak sam nie potrafisz odpowiedzieć to po co się odzywasz?

0
Misiekd napisał(a)

Tak dla jasności wiem do czego służą wszystkie polecenia w SQL widzę że nie którzy mają z tym problem.

SELECT - służy do wybierania danych z tabeli.
INSERT - służy do wstawiania danych do tabeli.
UPDATE - służy do zmiany danych w tabeli.
DELETE - służy do usuwania danych z tabeli.

Więc chyba gdy chce zamienić jakieś dane w mojej tabeli to należało by użyć UPDATE a nie SELECT tak jak napisał pytek.
Chcę tylko aby ktoś mi wyjaśnił w jaki sposób zrobić to, że jeżeli jakieś dane znajdujące się w mojej tabeli zostaną zamienione. A chodzi o coś takiego : Program sprawdzi czy użytkownik o imieniu (Adam) i nazwisku (Kowalski) istnieje w mojej tabeli i jeżeli istnieje użytkownik o imieniu Adam to zmienia tylko nazwisko wprowadzone przez użytkownika a jeżeli takich danych nie ma w mojej tabeli to zostaną dodane.

0
rioma1990 napisał(a)

nie wiem w jaki sposób dodać petle (funkcję), która sprawdzi czy np: Użytkownik o imieniu1 ma takie same imię jak imię wprowadzone przez tego użytkownika z tą różnica że nazwisko jest inne.

ZQuery1.SQL.Add('UPDATE nazwa_bazy SET  Nazwisko =' +NazwiskoEdt.Text+ ' where =' +ImieEdt.Text); 

no czyli wg Ciebie jak chcesz sprawdzić czy coś w tabeli istnieje to trzeba użyć UPDATE...

A jakbyś tak siadł chwilę i pomyślał, ale tak po prostu, po chłopsku, żadne tam czary z programowania czy inne fikuśne rzeczy - zwykłe "chłopskie" myślenie i zapytał sam siebie "co chcę w życiu robić i po prostu to zacznij robić", eee to chyba nie to. Znaczy pomyśl "w jaki sposób mogę sprawdzić czy jakieś dane są w tabeli". Mi nasuwają się od razu trzy sposoby - elegancki, dobry i taki całkiem "z d**y". Pierwszy to wykonanie

SELECT Count(*) ile FROM tabelka WHERE imie = 'coś' AND nazwisko = 'inne coś'

a następnie sprawdzić czy ile jest większe od zera. Dlaczego jest to elegancki sposób - bo nie generuje ruchu w sieci - nawet jak będziesz miał 100 takich nazwisk to dostaniesz tylko jeden rekord. Drugi to zrobić SELECT * FROM tabelka WHERE imie = 'coś' AND nazwisko = 'inne coś'

 i sprawdzić czy dostaniesz chociaż jeden rekord. Sposób poprawny ale jeśli tylko chcesz wiedzieć czy istnieją rekordy spełniające warunek w bazie to niepotrzebnie generujesz ruch. No i sposób z dupy - wykonać <code class="sql">SELECT * FROM tabelka

i sprawdzić po stronie programu, przelatując przez wszystkie dane, czy interesujące rekordy są w bazie. Wybór należy do Ciebie - prawie jak w "Idź na całość"

rioma1990 napisał(a)

Tak dla jasności wiem do czego służą wszystkie polecenia w SQL widzę że nie którzy mają z tym problem.
Jak na razie to problem masz Ty

Chcę tylko aby ktoś mi wyjaśnił w jaki sposób zrobić to, że jeżeli jakieś dane znajdujące się w mojej tabeli zostaną zamienione.
i jak widać nie tylko z programowaniem jako takim...

Program sprawdzi czy użytkownik o imieniu (Adam) i nazwisku (Kowalski) istnieje w mojej tabeli i jeżeli istnieje użytkownik o imieniu Adam to zmienia tylko nazwisko wprowadzone przez użytkownika a jeżeli takich danych nie ma w mojej tabeli to zostaną dodane.
no toż przecież sam sobie napisałeś co program ma zrobić - teraz tylko trzeba to zapisać (chyba) w delphi. Masz tutaj problem to powiedz (napisz) to ktoś Ci napisze krok po kroku każdą instrukcję.
BTW mysql ma jeszcze taką spryciule w zanadrzu ale do tego potrzeba spełnić pewne warunki aby to zadziałało http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

0

Niestety mam ten sam problem ale niestety żadna z tych wypowiedzi mi nie pomogła :(

0
Misiekd napisał(a)

Masz tutaj problem to powiedz (napisz) to ktoś Ci napisze krok po kroku każdą instrukcję.

No i właśnie problem tkwi w tym że jakoś sobie nie daję rady czy mógł by mi to ktoś napisać tak jak napisał Misekd krok po kroku :d

0
  1. sprawdzasz czy jest już taki rekord w bazie (jak masz wyżej)
  2. jak jest to robisz update
  3. jak nie ma to robisz insert
    co chcesz więcej????
0

Tylko jedna rzecz mi się na suwa na myśl bo dane do mysql przechowywane są w programie delphi co zrobić albo w jaki sposób zrobić program aby te dane nie mogły by być odczytane przez osoby nie powołane. Może ktoś ma jakieś pomysły jak to zrobić. Przepraszam że w tym temacie no ale nie chciałem zakładać nowego tematu. Aha tak swoja drogą dzięki Misiekd za podpowiedz jak sobie z tym poradzić ale dałem sobie radę z tym wcześniej :d

0

Jeśli chcesz aby hasło i login do bazy były w aplikacji Delphi i żeby nikt nie mógł tego rozczytać to praktycznie nie jest to możliwe. Zawsze znajdzie się jakiś spryciarz który zdekompiluje exe i dostanie twoje hasło. Jedynie co możesz zrobić to założyć np. dwóch uzytkowników MySQL i nadać im odpowiednie uprawnienia. Np.

User1 - moze tylko korzystac z SELECT oraz UPDATE
root - dostęp do wszystkich zapytań.

0
Piotruch88 napisał(a)

Jeśli chcesz aby hasło i login do bazy były w aplikacji Delphi i żeby nikt nie mógł tego rozczytać to praktycznie nie jest to możliwe. Zawsze znajdzie się jakiś spryciarz który zdekompiluje exe i dostanie twoje hasło. Jedynie co możesz zrobić to założyć np. dwóch uzytkowników MySQL i nadać im odpowiednie uprawnienia. Np.

User1 - moze tylko korzystac z SELECT oraz UPDATE
root - dostęp do wszystkich zapytań.

Niestety w ten sposób nie mogę zrobić ponieważ użytkownik w dalszym ciągu będzie mógł przeglądać dane w bazie mysql. Chyba że ten User1 nie bd miał dostępu do przeglądania, jeżeli istnieje taka możliwość to proszę mnie oświecić jak bo ja na prawdę nie wiem.

0

Teraz nie mam zainstalowanego MySQL ale jeśli mnie pamięć nie myli to sobie możesz wybrać z jakich tabel ma korzystać dany user.

0

W dalszym ciągu to nie rozwiąże mojego problemu. Ma ktoś inne pomysły jak zabezpieczyć dane przed włamaniem do bazy danych i kradzieżą danych.

0

Odpowiadając na Twój komentarz to ja bym to zrobił tak, że zapisywał bym hasła do bazy w postaci nie jawnej np. algorytmem md5. Oczywiście to też nie da Ci zabezpieczenia w 100% ale wydaje mi się, że jak na takie domowe eksperymenty to bardzo przyzwoite zabezpieczenie. Do tego dał bym jeszcze jakieś szyfrowanie hasła (do MySQL-a) w kodzie programu, żeby trochę utrudnić sprawę potencjalnemu włamywaczowi. Algorytm md5 masz np. tutaj:
http://irsoft.de/web/Delphi-MD5
Działa on tak, że szyfruje on dany string w jedną stronę, musisz wiec porównywać czy hasło "ala ma kota" to dany ciąg znaków.

Nie wiem czy z tej strony to działa bo nie testowałem. Jak coś to podrzucę Ci coś z moich kodów Delphi.

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