Edycja bazy MySQL w Delphi [zeoslib]

Edycja bazy MySQL w Delphi [zeoslib]
ME
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 13 lat
  • Postów:6
0

Witam!
Przygotowuję program zarządzający bazą danych MySQL, korzystający z komponentów Zeos. Ponieważ to mój pierwszy projekt tego typu mam kilka problemów z którymi nie mogę sobie poradzić:

  1. Wyświetlam zawartość bazy w DBGridzie. Znalazłem już na tym forum, że edycja rekordów bazy przez grid'a jest raczej karkołomna. Jakie rozwiązanie najlepiej zastosować, żeby możliwa była edycja wybranego rekordu przez komponent który go wyświetla? (klikam w jakieś pole już istniejącego rekordu, wprowadzam modyfikacje i pole jest update'owane w bazie, po wyświetleniu message box'a z pytaniem czy chcę zapisać zmiany).

  2. (pytanie, o ile mam nadal używać Grida) Czytałem na forum, że po odświeżeniu bazy z użyciem poleceń ZQuery.Close, ZQuery.Open, aby uniknąć automatycznego przejścia do pierwszego rekordu, trzeba zapamiętać indeks rekordu "używanego" ostatnio i po komendzie open przywrócić ten indeks. Niestety nie zostało podane jak to zrobić, a sam nie potrafię tego opanować.

  3. Jaka jest różnica między poleceniami ZQuery1.Open a ZQuery.Active := true?

  4. Czy jest jakaś szansa, żeby w Delphi7 wpisywać i wyświetlać polskie znaki przy edycji bazy i te znaki wciąż pozostawały polskimi po zapisaniu w bazie? Ustawienie kodowania zajęło mi troszkę czasu i teraz mogę wpisywać w programie polskie znaki, wszystko wyświetla się jak trzeba, jednak kiedy oglądam bazę przez PhpMyAdmin widzę same "krzaczki".

Proszę o pomoc!
Pozdrawiam
m.

edytowany 1x, ostatnio: meliton
Misiekd
  • Rejestracja:ponad 21 lat
  • Ostatnio:ponad 12 lat
  • Postów:7923
0
  1. poczytaj o bookmark
  2. żadna
  3. w phpmyadminie ustaw sobie kodowanie wyświetlania zgodne z kodowaniem bazy

- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij
MG
  • Rejestracja:ponad 19 lat
  • Ostatnio:około 7 lat
  • Postów:29
0
  1. Podpinasz DBGrid pod DataSet i następnie w zdarzeniach tego drugiego odpowiednio ustalasz co chcesz.

"Jeżeli miałbyś 1.000.000.000 komputerów, które próbkowałyby 1.000.000.000 klawiszy na sekundę, to znalezienie klucza kodowania trwałoby dłużej niż istnieje wszechświat"
Patryk27
Twój nick nie pasuje do stopki...
ME
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 13 lat
  • Postów:6
0
MacGyver76 napisał(a)
  1. Podpinasz DBGrid pod DataSet i następnie w zdarzeniach tego drugiego odpowiednio ustalasz co chcesz.

Rozumiem, że dane powinny się aktualizować w bazie z wykorzystaniem zdarzenia 'OnUpdateData'. Zauważyłem jednak już wcześniej, że bez obsługi tego zdarzenia, edytując dane w gridzie, raz zmieniały się one w bazie a raz nie (nie mam pojęcia czemu tak jest- może ktoś mógłby wytłumaczyć?) Wobec tego jak zabezpieczyć bazę przed przypadkową edycją?

edit: Co do bookmark'ów - wiem już jak ustawić wskaźnik na dany wiersz, ale nie mam pojęcia czy i jak można wyłuskać z tego wiersza dane. Gdyby to mi się udało, to byłoby po problemie. Czy ktoś wie jak można to zrobić?

edytowany 1x, ostatnio: meliton
AL
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 12 lat
  • Postów:4
0
meliton napisał(a)

edit: Co do bookmark'ów - wiem już jak ustawić wskaźnik na dany wiersz, ale nie mam pojęcia czy i jak można wyłuskać z tego wiersza dane. Gdyby to mi się udało, to byłoby po problemie. Czy ktoś wie jak można to zrobić?

To powinno pomóc:

Kopiuj
DBGrid1.DataSource.DataSet.GotoBookmark(Pointer(DBGrid1.SelectedRows.Items[i])); 
s := DBGrid1.DataSource.DataSet.FieldByName('nazwa').AsString;

Pracuję aktualnie nad podobnym projektem w Delphi&Mysql i mam spory problem z kodowaniem znaków. Czy rozwiązałeś już swój problem? Jeśli tak to czy mógłbyś zamieścić tutaj rozwiązanie?

Jeśli w Delphi wpiszę polskie znaki to w bazie danych są wyświetlane jako 'krzaki' co uniemożliwia sortowanie przez bazę danych. Jeśli w bazie danych wpiszę polskie znaki to w Delphi są interpretowane jako znaki zapytania. Próbowałem różnych kodowań w Mysqlu (utf-8 general/polish, latin2 general, jakiśtam iso), zmieniałem CHARSET we właściwościach FONT w Delphi. Nic nie pomogło.
Próbowałem też napisać funkcję w delphi konwertującą polskie znaki z mysqla, jednak delphi wszystkie te znaki odczytuje jako '?' o tym samym kodzie.

edytowany 2x, ostatnio: alatar
ME
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 13 lat
  • Postów:6
0

Sprawdzę to rozwiązanie. Póki co próbowałem StringGrida zamiast DBGrida i udaje mi się wczytywanie, modyfikacja i nawet "sortowanie" rekordów. Niestety problem kodowania wciąż nierozwiązany :( dlatego sortowanie nie działa tak jak powinno. Nie mam pojęcia jak to rozwiązać. Ponawiam prośbę o pomoc!

Misiekd
  • Rejestracja:ponad 21 lat
  • Ostatnio:ponad 12 lat
  • Postów:7923
0

może zamiast jęczeć dałbyś coś, co da jakiekolwiek pojęcie o twojej bazie. Daj DDLa jakiejś tabeli np.


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij
AsYlum
  • Rejestracja:prawie 19 lat
  • Ostatnio:około miesiąc
  • Postów:29
0

Co do kodowania to ustaw na komponencie TZConnection w Properties: codepage=WIN1250 . Zeos dalej sam zajmie się konwersją znaków z kodowania klienta na kodowanie bazy.


<uninitialized object="object">
ME
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 13 lat
  • Postów:6
0

Próbuję tak:

Kopiuj
ZConnection1.Database := 'klienci';
ZConnection1.Connect;
ZQuery1.SQL.Clear;
zQuery1.SQL.Add('SET NAMES `utf8` COLLATE `utf8_polish_ci`');
ZQuery1.ExecSQL;
ZQuery1.SQL.clear;
ZQuery1.SQL.Add('select * from osoby' );
ZQuery1.Active := true;

I przy pobieraniu
StringGrid1.Cells[1,i] := ZQuery1.FieldByName('imię').AsString;
wyskakuje error:
'ZQuery1:Field 'imię' not found.'
W bazie, w tabeli, mam wszędzie ustawioną metodę porównywania na utf8_polish_ci. Nazwa pola to 'imię' - w bazie mam polski znak a nie żaden krzaczek.

2
Kopiuj
procedure TDM.DataBaseAfterConnect(Sender: TObject);
begin
  with qX do   //qX = ZQuery
    begin
      Close;
      SQL.Clear;
      SQL.Text := 'set names cp1250';
      Prepare;
      ExecSQL;
      Close;
    end;
end;
ME
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 13 lat
  • Postów:6
0

Działa! Bardzo dziękuję za pomoc i serdecznie pozdrawiam! :)

Misiekd
  • Rejestracja:ponad 21 lat
  • Ostatnio:ponad 12 lat
  • Postów:7923
0

NIE NADAJE SIĘ KOLUMNOM/TABELOM/CZEMUKOLWIEK NAZW ZE ZNAKAMI NARODOWYMI!!!!!


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij
ME
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 13 lat
  • Postów:6
0

Dlaczego? To na przykład w DBGridzie powinienem nadawać ręcznie nazwy wszystkim kolumnom żeby mieć tam polskie znaki? Nie znam się na tym za bardzo, więc będę mądrzejszy na przyszłość, dzięki! :)

AL
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 12 lat
  • Postów:4
0

Również dziękuję za pomoc z polskimi znakami. :) Zadziałał sposób pytka. Akurat dzisiaj trochę wcześniej znalazłem ten sposób gdzieś na forum, ale musiałem coś pokręcić bo wydawało mi się, że dalej nie działa.

Odnośnie DBGrida to wygląda na to, że trzeba będzie ręcznie dopisać funkcję nadającą polskie nazwy kolumnom. Tak samo będę musiał coś takiego wymyślić, żeby zmieniało szerokość kolumn, ponieważ wczytuje mi domyślnie maksymalny rozmiar ustawiony w bazie.

Na pierwszej stronie topicu pojawiło się jeszcze pytanie bez odpowiedzi dlaczego edycja pola w DBGridzie czasem ma odwzorowanie w bazie, a czasem nie. Również mam taką sytuację, że raz działa a raz nie. Czy ktoś wie dlaczego tak jest? Wolałbym uniknąć tworzenia kolejnych funkcji...

Edit: Pojawiła się jeszcze jedna wątpliwość. Nie wiem teraz czy rozumiem jak działa Zquery.Close (czy też ZQuery.Active := false). Czy przed każdym wywołaniem ZQuery.ExecSQL powinienem dać ZQuery.Close, a potem dać na nowo ZQuery.Clear, ZQuery.SQL.Add('SELECT * FROM cos) i ZQuery.Open?
Poza tym chyba najlepiej by było mieć w większości czasu kolejkę zamkniętą co jest średnio możliwe w przypadku DBGrida, a przeciwnie w przypadku StringGrida.

edytowany 1x, ostatnio: alatar
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)