Lazarus - komponenty do MySQL

Lazarus - komponenty do MySQL
Kaska1988
  • Rejestracja:prawie 12 lat
  • Ostatnio:3 dni
  • Postów:186
0

Cześć,

od niedawna używam linuxa i bardzo podoba mi się ten system. Oczywiście nie mogłam pozostawić w tyle Delphi więc przesiadłam się na Lazarusa. I jakoś daję radę. Udało mi się również zainstalować komponenty Indy. Jednak chciałabym utworzyć aplikację, która łączy się z moją bazą danych na serwerze VPS. Widzę, że w lazarusie jest zakładka SQLDB a w niej kontrolki do baz danych. Śledziłam dwa filmiki na youtube jak się połączyć i wykonać operacje na bazie danych, ale coś mi to nie idzie. Poza tym trzeba użyć kilku komponentów z tej karty.

Moje pytanie brzmi - czy polecacie jakiś zewnętrzny komponent do łączenia i wykonywania operacji na bazach MySQL? Czy też znacie tutorial pokazujący jak krok-po-kroku połączyć się z bazą danych i wykonać na niej operacje? Dla jasności, ja śledziłam ten:

ale komponent TIBConnection1 wyrzucał mi błąd przy próbie zmiany właściwości "Connected" z false na true.

Generalnie płynnie łączę się z bazą za pomocą terminala i jestem nieco zaskoczona, że łączenie się z Lazarusa może być takie "karkołomne".

Pozdrawiam!


cerrato
Moderator Kariera
  • Rejestracja:około 7 lat
  • Ostatnio:około 9 godzin
  • Lokalizacja:Poznań
  • Postów:8802
5

katakrowa
  • Rejestracja:ponad 10 lat
  • Ostatnio:około 2 lata
  • Lokalizacja:Chorzów
  • Postów:1670
1
Kaska1988 napisał(a):

ale komponent TIBConnection1 wyrzucał mi błąd przy próbie zmiany właściwości "Connected" z false na true.

Zauważ, że na zakładce masz kontrolki dla różnych wersji serwera. Być może wybrałaś niepoprawną. Musisz mieć w katalogu bibliotekę limbysql.dll ( można pobrać ze strony MySQL dla odpowiedniej wersji serwerów ). Wersja DLL musi współpracować z wersją kontrolki.
Używałem domyślnych komponentów z Lazarusa i zawsze działały poprawnie. Lazarus to jednak nie Delphi ale w prostych programach nigdy mnie nie zawiódł.

Pokaż jaki komunikat pokazuje się podczas aktywowania połączenia.


Projektowanie i programowanie. Hobbystycznie elektronika i audio oszołom.
PD
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 7 godzin
4

komponent IBConnection służy do połączenia z Firebird. Do łączenia z MySql służą komponenty TMySqlConnection w różnych wersjach w zależności od wersji serwera.
Ale tak jak napisał @cerrato polecałbym użycie komponentów Zeos - najnowsza 7.3 beta do pobrania z: https://sourceforge.net/p/zeoslib/code-0/HEAD/tree/branches/testing-7.3/
Co do tutoriali, to możesz szukać przykładów dla delphi (oprócz wyglądu IDE różnic raczej nie ma), np.:


pozdrawiam
paweld
Kaska1988
  • Rejestracja:prawie 12 lat
  • Ostatnio:3 dni
  • Postów:186
0

Dziękuję, właśnie zainstalowałam komponenty ZEOS. Prześledzę tutorial od @Paweł Dmitruk i spróbuję swoich sił. Jakbym miała problemy to napiszę w tym poście. Dzięki!


Kaska1988
  • Rejestracja:prawie 12 lat
  • Ostatnio:3 dni
  • Postów:186
0

Mam pytanko - podczas uruchamiania programu z bibliotekami ZEOS pojawił mi się komunikat:

None of the dynamic libraries can be found or is not loadable: libmysqld.so.20, libmysqlclient.so.20, libmysqld.so.19, libmysqlclient.so.19, libmysqld.so.18, libmysqlclient.so.18, libmysqld.so.16, libmysqlclient.so.16, libmysqld.so.15, libmysqlclient.so.15, libmysqld.so.14, libmysqlclient.so.14, libmysqlclient.so, libmysqld.so, libmariadb.so !

Use TZConnection.LibraryLocation if the location is invalid.

Press OK to ignore and risk data corruption.
Press Abort to kill the program.

Skąd mam wiedzieć jakiej konkretnie biblioteki mi potrzeba i skąd ją pobrać? Pogooglowałam trochę ale biblioteki te są dołączane z klientami/serwerami MySQL i siedzą w katalogach systemowych Linuxa.

PS. Pobrałam plik libmariadb.so.3 i dodałam przed połączeniem kod:

Kopiuj
zconnection1.LibraryLocation:='libmariadb.so.3';

Jednak przy próbie połączenia z bazą otrzymuję komunikat:

An operating system call failed.

Press OK to ignore and risk data corruption.
Press Abort to kill the program.

Ten sam problem miałam gdy znalazłam plik libmysql.so. Co może być nie tak?


edytowany 2x, ostatnio: cerrato
Kaska1988
  • Rejestracja:prawie 12 lat
  • Ostatnio:3 dni
  • Postów:186
3

Uff udało mi się! Okazało się, że miałam trefną wersję biblioteki którą dołączałam więc pobierałam "na ślepo" i trafiłam w końcu na plik libmysqlclient.so.21 (pobrałam z https://repo.mysql.com/yum/mysql-8.0-community/el/7/aarch64/mysql-community-libs-8.0.21-1.el7.aarch64.rpm w razie gdyby ktoś kiedyś potrzebował) :)


Kaska1988
  • Rejestracja:prawie 12 lat
  • Ostatnio:3 dni
  • Postów:186
0

Słuchajcie, mam pytanko - stworzyłam w Lazarusie aplikację konsolową aby sprawdzić, czy połączenie z bazą danych będzie również działać w konsoli. Z mojego komputera działa. Ale problem jest z uruchomieniem apki na moim VPS'ie. Pokazuje się błąd o treści "An operating system call failed.". Czym może być to spowodowane i jak to naprawić? VPS też stoi na Linuxie. Błąd wywala przy instrukcji try...except. Poniżej umieściłam kod programu:

Kopiuj
program project1;

{$mode objfpc}{$H+}

uses
   {$IFDEF UNIX}{$IFDEF UseCThreads}
   cthreads,
   {$ENDIF}{$ENDIF}
   Classes, SysUtils, CustApp, ZConnection, ZDataset
   { you can add units after this };

type

   { TMyApplication }

   TMyApplication = class(TCustomApplication)
   protected
      procedure DoRun; override;
   public
   end;

{ TMyApplication }

procedure TMyApplication.DoRun;
var
   ErrorMsg: String;
   ZConnection1: TZConnection;
   ZQuery1: TZQuery;
begin
   zconnection1 := TZConnection.Create(self);
   ZQuery1 := TZQuery.Create(self);
   { add your program here }

      zconnection1.Disconnect;                                        writeln('rozlaczylem');
      zconnection1.Protocol:='mysql';                                 writeln('dodalem mysql jako protokol');
      zconnection1.LibraryLocation:='libmysqlclient.so.21.1.21';      writeln('dodalem biblioteke do wspolpracy');

      zconnection1.HostName:='adres hosta';                           writeln('ustawilem hosta');
      zconnection1.Port:=3306;                                        writeln('dodalem port');
      zconnection1.User:='user';                                      writeln('podalem usera');
      zconnection1.Password := 'haslo';                               writeln('podalem haslo');

      try
         zconnection1.Connect;                                        writeln('lacze sie');
      except
         on E : Exception do
         Writeln('BŁĄD: '+E.Message);
      end;
      if (zconnection1.Connected = true) then
      begin
        write('Połączono!');
        zconnection1.Disconnect;
      end
      else
      begin
        writeln('NIE POŁĄCZONO');
      end;



   // stop program loop
   ZConnection1.Free;
   ZQuery1.Free;
   Terminate;
end;

var
   Application: TMyApplication;

{$R *.res}

begin
   Application:=TMyApplication.Create(nil);
   Application.Title:='My Application';
   Application.Run;
   Application.Free;
end.

SK
Czy to są te same dystrybucje linuxa? Spróbuj ustalić jaka jest w VPS i skompiluj program pod nią.
AL
Jesteś w stanie ustalić jaki dokładnie syscall się kładzie? Ale ogólnie: pewnie systemowe wersje bibliotek się różnią. ldd Twoim przyjacielem ;)
Kaska1988
  • Rejestracja:prawie 12 lat
  • Ostatnio:3 dni
  • Postów:186
0

@alagner: co masz na myśli mówiąc ldd?

Dla sprostowania powiem, że błąd wywala się przy funkcji connect.

Jeśli chodzi o dystrybucje linuxa, to na moim komputerze aktualnie używam (wyniki z uname -a):

Linux kernel-acer-i7 5.4.0-47-generic #51-Ubuntu SMP Fri Sep 4 19:50:52 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

Jeżeli chodzi o VPS to używam:

Linux a413 2.6.32-042stab139.1 #1 SMP Tue Jun 18 12:51:14 MSK 2019 x86_64 x86_64 x86_64 GNU/Linux

VPS działa w konsoli (nie posiada GUI) więc nie wiem jak mogłabym przekompilować mój program.


edytowany 2x, ostatnio: Kaska1988
AL
  • Rejestracja:prawie 11 lat
  • Ostatnio:około 3 lata
  • Postów:1493
1

Dokładnie to https://man7.org/linux/man-pages/man1/ldd.1.html :) i sprawdzenie do czego binarka się linkuje.
EDIT: ale skoro pada na connect to może chodzić o coś totalnie innego...

edytowany 1x, ostatnio: alagner
Kaska1988
  • Rejestracja:prawie 12 lat
  • Ostatnio:3 dni
  • Postów:186
3

Słuchajcie, okazało się, że w systemie była nieaktualna biblioteka. Już poprawione i działa :D


flowCRANE
Nie przestajesz zaskakiwać. :D
K8
  • Rejestracja:ponad 10 lat
  • Ostatnio:2 dni
  • Lokalizacja:Małopolska
  • Postów:646
0

ja uzywalem Firebird + Lazarus na Win 10

problem jest u mnie taki ze baze wczytywalo do DBgrid jednak nie dalo sie edytowac

PD
prawdopodobnie we właściwościach DBGrid lub DataSet-u masz ustawione ReadOnly na True, lub masz wyłączoną edycję w opcjach DBGrid
K8
bawilem sie tym z rok temu ale raczej bym sie zorientowal
GS
  • Rejestracja:ponad 14 lat
  • Ostatnio:około 9 godzin
2

@krzychu82a:

problem jest u mnie taki ze baze wczytywalo do DBgrid jednak nie dalo sie edytowac

Do DBGrida nic się na da wczytać. DBGrid to tylko kontrolka wizualizująca treść podpiętego przez "datasource" datasetu

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.