Połączenie odbc z MySQL

Połączenie odbc z MySQL
KA
  • Rejestracja:prawie 21 lat
  • Ostatnio:około miesiąc
  • Postów:700
0

Cześć,
walcze z połączeniem serwera, który napisałem w Lazarusie, z bzą danych MySQL na maszynie z Ubuntu.
Zainstalowałem wszystko zdaje mi się poprawnie. Konfiguracja ODBC wygląda tak:

odbcinst.ini:

Kopiuj
[myodbc_mysql]
Description     = ODBC for MySQL
Driver          = /usr/lib/i386-linux-gnu/odbc/libmyodbc.so
Setup           = /usr/lib/i386-linux-gnu/odbc/libodbcmyS.so
UsageCount      = 1

odbc.ini:

Kopiuj
[myodbc_mysql_dsn]                         # this is your system DSN
Description = description of your DSN
Driver      = myodbc_mysql                 # custom driver name
Server      = localhost                    # or external IP if needed
Port        = 3306                         # or custom port if needed
Socket      = /var/run/mysqld/mysqld.sock  # socket, see above
Database    =                      # MySQL DB name or empty
Option      = 3
ReadOnly    = No

Kiedy w terminalu wpisuje

Kopiuj
isql -v user password

otrzymuje poprawne połączenie za pomocą ODBC i mogę działać na bazie z poziomu terminala.

Kopiuj
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL>

Kiedy jednak tworzę połączenie w mojej aplikacji nie może się ona połączyć z bazą. Połączenie tworze w ten sposób:

Kopiuj
with AConnection do
 begin
      Driver := 'myodbc_mysql_dsn'; //roznie juz probowalem, wpisywalem tez "myodbc_mysql" - jak musi byc?;)
      Params.Add('Trusted_Connection=Yes');
      Params.Add('DATABASE=mydb');
      Params.Add('HostName=MyHost');
      Params.Add('UserName=root');
      Params.Add('Password=password');
 end;

Próbowałem już na tuzin różnych sposobów modyfikować te parametry połączenia ale ciągle brak rezultatu. Możecie mi podpowiedzieć jak prawidłowo sparametryzować takie połączenie? Na Windowsie z poprawnie skonfigurowanym ODBC takie połączenie śmiga bez zarzutu. Na Ubuntu coś dalej jest nie tak:(

Dzieki!


Kto nigdy nie zrobił var dupa niech pierwszy rzuci kamień.
edytowany 3x, ostatnio: flowCRANE
abrakadaber
abrakadaber
  • Rejestracja:ponad 12 lat
  • Ostatnio:8 miesięcy
  • Postów:6610
2

Ale dlaczego ODBC? Przecież lazarus ma natywne komponenty do MySQLa http://wiki.lazarus.freepascal.org/MySQLDatabases


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
KA
  • Rejestracja:prawie 21 lat
  • Ostatnio:około miesiąc
  • Postów:700
0

Dzieki!
Nie zaglebialem sie jeszcze w to ale widze ze tam jest napisane ze to "visual components" - ja mam aplikacje konsolowa.


Kto nigdy nie zrobił var dupa niech pierwszy rzuci kamień.
abrakadaber
abrakadaber
  • Rejestracja:ponad 12 lat
  • Ostatnio:8 miesięcy
  • Postów:6610
3

no a kto Ci zabroni ich używać z kodu?


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
KA
  • Rejestracja:prawie 21 lat
  • Ostatnio:około miesiąc
  • Postów:700
0

Dzieki, zamienilem polaczenie odbc na zwykle TSQLConnection i moge polaczyc sie z baza. Pojawil sie jednak inny problem. Kiedy wykonuje polecenie AQuery.Open dostaje komunikat: My application raised exception class 'RunError (211).

Cale polaczenie konfiguruje w ten sposob:

Kopiuj
AConnection:=TSQLConnection.Create(nil);
ATransaction:=TSQLTransaction.Create(nil);
AQuery:=TSQLQuery.Create(nil);


with AConnection do
 begin
 HostName:='localhost';
 DatabaseName:='baza';
 Username:='root';
 Password:='haslo';
 end;

AConnection.Transaction:=ATransaction;
ATransaction.DataBase:=AConnection;
AQuery.DataBase:=AConnection;

Na moim kompie dzialalo to bez problemu. Jak odpalam to na serwerze to dostaje taki blad :( Prosze o pomoc.

Zapytanie przygotowuje standardowo:

Kopiuj
 AQuery.SQL.Text := 'select * FROM users where user = :USER and pass= :PASS';
 AQuery.Params.ParamByName('USER').AsString:=user.Text;
 AQuery.Params.ParamByName('PASS').AsString:=pass.Text;

Zaczyna powoli mnie przerastac proba odpalenia swojego serwera na jakies wirtualnej maszynie...


Kto nigdy nie zrobił var dupa niech pierwszy rzuci kamień.
edytowany 2x, ostatnio: karpov
abrakadaber
abrakadaber
  • Rejestracja:ponad 12 lat
  • Ostatnio:8 miesięcy
  • Postów:6610
1

ale dlaczego jesteś taki uparty nie nie skorzystasz z komponentów wprost przeznaczonych do MySQLa??? Przecież masz tam TMySQLConnection


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
KA
  • Rejestracja:prawie 21 lat
  • Ostatnio:około miesiąc
  • Postów:700
0

Dzięki za pomoc.
Walczyłem z tym kilka dni....

Faktycznie okazało się, że jakieś cuda w stylu ODBC są zbyteczne. Próbowałem użyć TMySQLConnection ale pojawiały się ciągle jakieś błędy. W końcu doszedłem do wniosku, że problem leży po stronie samego Lazarusa. Przeinstalowałem wszystko jeszcze raz, ściągnąłem pliki ręcznie i zainstalowałem najnowszą wersję bo korzystając z komend w terminalu ubuntu ściągały się jakieś starsze (poza tym był problem w konfiguracji środowiska)...

Śmiga jak marzenie :)


Kto nigdy nie zrobił var dupa niech pierwszy rzuci kamień.

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.