Sprawdzanie danych w bazie mysql w Zeoslib

Sprawdzanie danych w bazie mysql w Zeoslib
R1
  • Rejestracja:około 16 lat
  • Ostatnio:ponad 8 lat
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:

Kopiuj
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

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

Może ta linika też się przyda:

Kopiuj
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

edytowany 2x, ostatnio: rioma1990
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

Kopiuj
 
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;
Misiekd
  • Rejestracja:ponad 21 lat
  • Ostatnio:ponad 12 lat
  • Postów:7923
0

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


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij
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.

Misiekd
  • Rejestracja:ponad 21 lat
  • Ostatnio:ponad 12 lat
  • Postów:7923
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?


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij
edytowany 1x, ostatnio: Misiekd
R1
  • Rejestracja:około 16 lat
  • Ostatnio:ponad 8 lat
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.

edytowany 2x, ostatnio: rioma1990
Misiekd
  • Rejestracja:ponad 21 lat
  • Ostatnio:ponad 12 lat
  • Postów:7923
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.

Kopiuj
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

Kopiuj
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ś'

Kopiuj
 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


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij
0

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

R1
  • Rejestracja:około 16 lat
  • Ostatnio:ponad 8 lat
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

Misiekd
  • Rejestracja:ponad 21 lat
  • Ostatnio:ponad 12 lat
  • Postów:7923
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????

- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij
R1
  • Rejestracja:około 16 lat
  • Ostatnio:ponad 8 lat
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

Piotruch88
  • Rejestracja:ponad 15 lat
  • Ostatnio:około 13 lat
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ń.

R1
  • Rejestracja:około 16 lat
  • Ostatnio:ponad 8 lat
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.

Piotruch88
  • Rejestracja:ponad 15 lat
  • Ostatnio:około 13 lat
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.

R1
  • Rejestracja:około 16 lat
  • Ostatnio:ponad 8 lat
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.

Piotruch88
To jest nie możliwe, żeby w 100% ukryć hasło w programie. Każdy Tobie to potwierdzi.
R1
A czy istnieje możliwość że np program delphi będzie pobierał dane do połączenia z pliku php z serwera www?
Piotruch88
Jak miałem taki sam problem jak Ty teraz to też tak samo kombinowałem :) Da się oczywiście tak zrobić, tylko po co skoro można jakimś sniferem i tak to wszystko oblukać. Napisz lepiej dlaczego według Ciebie to co napisałem nie rozwiąże twojego problemu to może wtedy będzie jakoś łatwiej Ci pomóc.
R1
Ponieważ dane które zostaną dodane do bazy przez delphi będą odczytywane na stronie www przy pomocy php bedą sie tam znajdować hasla oraz inne dane uzytkownikum i muszę zrobić to tak aby nikt poza mną nie znal hasla do bazy mysql.
Piotruch88
  • Rejestracja:ponad 15 lat
  • Ostatnio:około 13 lat
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.

R1
To ten sposób też odpada co z tego ze dane będą szyfrowane w md5 skoro inne dane takie jak adres zamieszkania i inne rzeczy będą widoczne dla użytkowników.
Piotruch88
Cóż, nie wiem jak ma sobie wymyśliłeś ten Twój program, ale nie możesz zrobić tak, że takie poufne dane będą trzymane w osobnej tabeli. Ta tabela była by do odczytu przez http natomiast login i hasło do bazy tez w osobnej tabeli i to by służyło do logowania.
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)