Lazarus - komponenty do MySQL

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!

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.

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.:

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!

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:

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?

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ł) :)

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:

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.
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.

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...

3

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

0

ja uzywalem Firebird + Lazarus na Win 10

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

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.