dbExpress gubi połączenie do zdalnej bazy MySQL

dbExpress gubi połączenie do zdalnej bazy MySQL
LO
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 3 lata
  • Postów:17
0

witam,

Męczę się z ustaleniem przyczyny rozłączania się programu z bazą MySQL. Do łączenia używam dbExpress. Użytkownik kompletuje zamówienie a następnie je zapisuje do bazy. Wystarczy kilka minut przerwy w kompletowaniu i podczas próby zapisu do bazy pojawia się komunikat "MySQL has gone away". Mam kopię bazy na localhost i tutaj nic takiego się nie dzieje. Zostawiłem program na ok. godzinę, a nawet system przeszedł w stan uśpienia (brakło zasilania w laptopie) i po przywróceniu kliknąłem Zapisz i zamówienie zostało zapisane prawidłowo. Myślę, że nie jest to problem serwera MySQL (timeout ustawiony na 8 godzin). Szukałem w necie informacji i z uwagi na to, że nie ma w dbExpress czegoś takiego jak autoconnect to jedyną sugestią było regularne odpytywanie bazy prostym selectem w Timerze. No ale dlaczego na localhost działa prawidłowo? Czy ktoś doświadczył takich problemów?

pozdrawiam.

0

Taki sam problem miewamy z Delphi dbGo (ADO) i bazą na m$ sql. My go rozwiązujemy stosując named pipe. Ale bywa także i na odwrót. Zdarza się że to właśnie połączenie przez named pipe jest zrywane. Wtedy ustawiamy normalne połączenie. Tak już mamy od 15 lat. I nie mam pojęcia dlaczego named pipe niekiedy się wywala. Bo w większości przypadków działa OK.

woolfik
  • Rejestracja:ponad 17 lat
  • Ostatnio:44 minuty
  • Postów:1596
1

Jest tyle lepszych narzędzi do bazy danych (zarówno darmowych jak i płatnych), że nie ma sensu babrać się z ADO DBExpress itp. Polecam FireDAC, UniDAC lub z darmowych ZeosLib i nie będziecie mieć żadnych problemów z połączeniem.

0

@wolfik nie doczytałeś. @Lookze używa MySQL i DBExpress. Czyli raczej nie używa ADO. A nawet zdaje mi się, że przy DBExpress nie da się użyć ADO. No przynajmniej ja nie wiem, jak to zrobić. I @Lookze ma kłopot z połączeniem. Zdaje mi się, że ten kłopot nie jest związany z Delphi. Ale może tylko mi się zdaje. Ale ja używam ADO. I dbGo do tego ADO. I też miewam kłopoty z połączeniem z bazą danych. Choć to nie jest MySQL, jak u @Lookze, a m$ SQL.

Dodam jeszcze, że często spotykam się, że ludzie nie lubią ADO. No cóż... Zazwyczaj nie umieją go używać. I potem krążą jakieś dziwne oceny. Dla mnie ADO ma jedną bardzo dużą zaletę. Jest pieruńsko stabilne. Nadal. Od 15 lat. Oczywiście to może się zmienić.

MY
  • Rejestracja:ponad 9 lat
  • Ostatnio:dzień
  • Postów:1083
0
sadam2 napisał(a):

Dodam jeszcze, że często spotykam się, że ludzie nie lubią ADO. No cóż... Zazwyczaj nie umieją go używać. I potem krążą jakieś dziwne oceny. Dla mnie ADO ma jedną bardzo dużą zaletę. Jest pieruńsko stabilne. Nadal. Od 15 lat. Oczywiście to może się zmienić.
A dla mnie ADO jest po prostu wolne. Używam w pracy Firebirda. Testowałem połączenie poprzez ADO oraz standardowe komponenty IBX. Niestety w niektórych przypadkach różnica była kolosalna, nie muszę mówić, że na korzyść IBX'ów? Chcesz to poszukaj na forach jest sporo informacji na ten temat. Więc to nie jest tak, że ludzie nie umieją korzystać.

WL
ADO nie jest wolne, tylko sterowniki do Firebirda są z pupy. Poza tym ADO domyślnie działa z kursorem po stronie klienta, co implikuje pobranie wszystkich danych z serwera - a to trwa i żre pamięć. Jeśli uważasz że IBX jest szybkie, to porównaj go z FibPLUS, FireDAC, IBDac (UniDAC), UIB czy ZEOS i zapewniam Cię, że zmienisz zdanie...
MY
@wloochacz Faktycznie możesz mieć rację, że to była wina sterowników. Jednak nie miałem za dużo czasu na testy, więc zarzuciłem używanie tego rozwiązania. Co do łączenia się z Firebirdem za pomocą IBX'ów też mam podobne zdanie. To nie jest najlepsze rozwiązanie. Z pewnych względów nie mogę przeforsować zmiany w firmie zmiany na inne komponenty, nawet jakieś darmowe. Osobiście testowałem Zeos i bardziej mi się podobało niż IBX, jednak co ja mogę...
0

Baza ma około ośmiuset tabel. U największego klienta backup bazy zajmuje już ponad 21 GB. I nie przeniesiemy tego na firebirda. Zresztą na nic innego także nie przeniesiemy. Bo nikt za taką robotę nie zapłaci. A co do wydajności to nie wiem nawet z czym porównać ... Ale gdybym jednak miał przenosić, to na Oracla. Tam można wątkować. I nadal byłoby ADO. Wątkujące.

MY
  • Rejestracja:ponad 9 lat
  • Ostatnio:dzień
  • Postów:1083
0

Ale nie zrozumiałeś mnie. Chodzi mi o to, że na tym samym serwerze bazodanowym, ta sama baza danych. Jednak inna metoda dostępu miałem różne czasy wykonania tych samych zapytań. Mowa np. o 1 000 000 insertów do tabeli. Niestety ADO poległo tu na całej linii.

LO
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 3 lata
  • Postów:17
0

No tak... Chyba trochę odbiegacie od tematu. Wkurza mnie to, że dysponuję narzędziem za kilkanaście tyś. złotych (RAD Studio Professional), a gdy trzeba napisać soft współpracujący z bazą danych to mam jeszcze coś dokupywać tak jak to proponował woolfik wyżej. Nie lubię używać komponentów firm trzecich bo różnie z tym bywa. Używałem kiedyś AnyDAC i co teraz? Sprzedali się a darmowych, nowych wersji już nie ma. Martwi mnie to co napisał sadam2, że tego typu problemy pojawiają się przy ADO i MS SQL. Tyle linii kodu i przerabiać na ZEOSa? Ech...

WL
RAD Studio Pro kosztuje kilkanaście tys? Chyba pojechałeś ciut za mocno na fali elokwencji... A przerobienie kodu na inne komponenty DAL wcale nie jest takie trudne, aczkolwiek wszystko zależy od tego czy to jest wyklikane czy napisane oraz jak napisane.
LO
No tak tyle kosztuje. Embarcadero RAD Studio 10 Seattle Professional 2 763,81 €, przy kursie PLN 4,41 daje ok. 12 180,00 zł.
WL
OK, racja zagalopowałem się - wybacz. Na swoje usprawiedliwienie powiem, że nigdy nie patrze na cę RAD Studio, bo albo piszę w jednym albo w drugim języku. zawsze zastanawiałem się, dla kogo jest ten produkt? Wychodzi, że dla Ciebie; ale po co Ci RAD Studio a nie Delphi lub C++ Builder, które są o połowę tańsze?
abrakadaber
abrakadaber
  • Rejestracja:ponad 12 lat
  • Ostatnio:8 miesięcy
  • Postów:6610
1

nie bardzo wiem o czym mówisz. AnyDac ma do tej pory wersję darmową, która nazywa się FreeDac (albo AnyDac 1.2.11). Potem przez długi czas miało wersję płatną a teraz po prostu jest częścią Embarcadero i jest w RAD Studio w pakiecie (chyba od wersji XE4).
W firmie używaliśmy płatnej wersji a teraz tej z RadStudio. Prywatnie nadal korzystam z FreeDac mimo jego braków.

Wg mnie w ADO, z dużymi, nowymi projektami, ładują się tylko ci, którzy nie wiedzą co czynią. BTW ADO to nie jest "wymysł" Borlanda a jedynie nakładka na MS ActiveX Data Objects. Więc jeśli masz z tym problemy to źle skierowałeś swoje kroki.


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
woolfik
  • Rejestracja:ponad 17 lat
  • Ostatnio:44 minuty
  • Postów:1596
0
Lookze napisał(a):

Tyle linii kodu i przerabiać na ZEOSa? Ech...

Wcale nie musisz dużo robić jest na to kilka sposóbów.

  1. Refaktoring
  2. Podmiana unita chyba ADOClient na własny. Takie rozwiązanie powoduje, że w twoich unitach dalej używasz TADQuery a w rzeczywistości jest TZQuery
  3. Używając WriteProcessMemory podmieniasz klasę w locie. - najbardziej zamotane ale równie skuteczne rozwiązanie co pkt 2.
sadam2 napisał(a):

Jest pieruńsko stabilne. Nadal. Od 15 lat. Oczywiście to może się zmienić.

:D
podobnie jak pierwsze koło czy to znaczy, że do dziś mamy go używać?

edytowany 1x, ostatnio: woolfik
MY
  • Rejestracja:ponad 9 lat
  • Ostatnio:dzień
  • Postów:1083
0
Lookze napisał(a):

Wkurza mnie to, że dysponuję narzędziem za kilkanaście tyś. złotych (RAD Studio Professional), a gdy trzeba napisać soft współpracujący z bazą danych to mam jeszcze coś dokupywać tak jak to proponował woolfik wyżej. Nie lubię używać komponentów firm trzecich bo różnie z tym bywa.
Ale pamiętaj, że polityka twórcy RAD Studio jest bardzo dziwna i potrafią zmienić komponenty czy dodatkowe narzędzia. Kiedyś do raportów był QuickReport. W firmie tego używali, napisali dużo bo zaczynali jeszcze w C++ Builder 5. Zachciało się migracji na 2009 i co? Okazuje się, że albo przepisywać dużą ilość raportów na jakieś inne narzędzie albo kupić pełną wersję QuickReport. Zgadnij co zrobili w firmie? Kupili pełną wersję. Tak więc każdy kij ma dwa końce.

abrakadaber napisał(a):

Wg mnie w ADO, z dużymi, nowymi projektami, ładują się tylko ci, którzy nie wiedzą co czynią. BTW ADO to nie jest "wymysł" Borlanda a jedynie nakładka na MS ActiveX Data Objects. Więc jeśli masz z tym problemy to źle skierowałeś swoje kroki.
Zgodzę się z tym w pełni.

woolfik napisał(a):
  1. Refaktoring
    Tylko, że w C++ refactoring nie działa wcale, więc trzeba uciec się do zewnętrznego narzędzia :]
woolfik napisał(a):
  1. Podmiana unita chyba ADOClient na własny. Takie rozwiązanie powoduje, że w twoich unitach dalej używasz TADQuery a w rzeczywistości jest TZQuery
    A najlepiej by było pisać tak aby aplikacja była wielowarstwowa. Wtedy nie ma problemu z tym. Dane mogą być pobierane z pliku tekstowego, bazy danych, czy nawet serwera www. Jednak tu już trzeba pisać aplikację w takiej architekturze.
sadam2 napisał(a):

podobnie jak pierwsze koło czy to znaczy, że do dziś mamy go używać?
Zdziwiłbys się ilu ludzi ma takie podejście, że jak coś działa od nastu lat, to nie ma co ruszać czy ulepszać.

woolfik
C++? Ale tu jest rozmowa o Delphi :)
MY
Tak, jednak z tego co kojarzę, to komponenty są takie same i też potrafią się zmieniać z wersji na wersję.
LO
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 3 lata
  • Postów:17
0

Ok, podjąłem decyzję. Zrobiłem wczoraj konwersję bazy MySQL do MS SQL (nawet szybko poszło i na razie nie widzę żadnych błędów). Zamiast dbExpress użyję FireDACa. Pierwszy raz z tym robię więc zobaczymy jak mi pójdzie. Przez chwilę zastanawiałem się nad ADO ew. ZEOSem ale spróbuję z FireDAC. Kiedyś używałem AnyDAC więc powinno być ok.

abrakadaber
abrakadaber
pogratulować podjęcia męskiej decyzji :)
LO
@abrakadaber dzięki... trzeba zrobić poradnik pt. "Zalecane technologie dostępu do wybranych baz danych" :)
WL
Jest taki poradnik w wersji eng. A co do FireDAC, to jak nie będziesz próbował go używać jak dbExpress, to powinno być OK. Jest jednocześnie prostszy i zdecydowanie bardziej zaawansowany niż dDBX.
LO
Daj proszę namiar na ten poradnik
WL
Matko, nie pamiętam - nie było tam dla mnie nic interesującego. Ale OK, poszukam... specjalnie dla Ciebie ;-)
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)