ODBC-Datenbankzugriff unter Linux für Dummies

In dieser Linux-Ecke dürfen nur Themen rund um Linux geschrieben werden.
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
ccode_new
Beiträge: 1072
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

ODBC-Datenbankzugriff unter Linux für Dummies

Beitrag von ccode_new »

Geschichte:

Zitat:
iODBC Configuration Script
iODBC Driver Manager 3.52.9
Copyright (C) 1996-2014 OpenLink Software
Please report all bugs to <iodbc@openlinksw.com>

iodbc-config --libs
-L/usr/lib/x86_64-linux-gnu -liodbc -liodbcinst

Bei PureBasic bekomme ich immer nur:

/usr/bin/ld: cannot find -lodbc
collect2: error: ld returned 1 exit status

...

Ich habe das hier installiert:

sudo apt-get install libiodbc2-dev
______________________________
Ich habe ein paar Änderungen gemacht, da eine normale IODBC -Installation bei mir nicht funktioniert.

Im Verzeichnis "/usr/lib/x86_64-linux-gnu" habe ich die installierten Libs "iodbc" und "iodbcinst" einfach manuell in "odbc" und "odbcinst" umgenannt.

Jetzt kommt bei:

Debug UseODBCDatabase()

folgendes: 94740839224784
(Also keine Null und die Lib wird auch gefunden.)
Es wird aber leider immer per Standard-Installation auch eine Lib "odbc" im oben genannten Verzeichnis installiert (diese habe ich gelöscht (weil diese irgendwie nicht vom "ld" gefunden wird, obwohl diese genau so heißt) und gegen die umbenannte "iodbc"-Lib ersetzt.)

Jetzt habe ich mir mal eine Test-ODBC-Datenbank heruntergeladen, aber nach dem Öffnen hängt sich PureBasic auf.

Wenn ich es so versuche:
If CreateFile(0, DatabaseFile$)
...
If OpenDatabase(0, DatabaseFile$, "", "", #PB_Database_ODBC)
(Also eine leere Datenbank, oder ?)

kommt nur: Can't open database !


Hat jemand Tipps ?
Betriebssysteme: MX Linux 19 / Windows 10 / Mac OS 10.15.7 / Android 7.0 ;)

Manchmal muß das Rad neu erfunden werden.
ccode_new
Beiträge: 1072
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: ODBC-Datenbankzugriff unter Linux für Dummies

Beitrag von ccode_new »

Wie muss ich, bzw muss ich "/etc/odbcinst.ini" und/oder "/etc/odbc.ini" noch irgendwie konfigurieren ?

Wie muss das konfiguriert werden ?
Bsp:
[testing]
Description = Meine Datenbank
Driver = TestDriver
Server = 127.0.0.1
Database = tolleDB
UID = root
PWD = tolleDB
[TestDriver]
Description = TestDriver
Driver = /usr/lib/x86_64-linux-gnu/libodbc.so
Setup = /usr/lib/x86_64-linux-gnu/libodbc.so
Betriebssysteme: MX Linux 19 / Windows 10 / Mac OS 10.15.7 / Android 7.0 ;)

Manchmal muß das Rad neu erfunden werden.
Benutzeravatar
ts-soft
Beiträge: 22291
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: ODBC-Datenbankzugriff unter Linux für Dummies

Beitrag von ts-soft »

Linux hat früher IODBC genutzt, nutzt aber inzwischen UnixODBC, da IODBC nicht immer im Paketmanager verfügbar!
Ob diese jetzt Kompatibel sind oder es egal ist, welchen man nutzt, kann ich aber nicht sagen.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
mk-soft
Beiträge: 3287
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: ODBC-Datenbankzugriff unter Linux für Dummies

Beitrag von mk-soft »

Wollte mich auch mal wieder damit beschäftigen nach der Umstellung auf unixODBC

Zur installation der aktuellen Version
sudo apt-get install unixodbc-dev unixodbc-bin unixodbc
Link zu unixODBC und in diesen weitere link zu dem Datenbank Treibern

http://www.unixodbc.org/
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.7x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf My Webspace
ccode_new
Beiträge: 1072
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: ODBC-Datenbankzugriff unter Linux für Dummies

Beitrag von ccode_new »

Hallo mk-soft!

Ich hatte es auch erst mit "unixodbc" probiert, da lieferte PureBasic aber nur haufen Fehlermeldungen das es Funktion "xyz" nicht finden kann.

Mit den umgenannten "iodbc" - Libs ging es dann.
PureBasic konnte die Lib finden und linken.
Aber eine Erstellung/Verbindung zu einer Datenbank war unmöglich.

Ich habe dann mal komplett aufgeräumt und jetzt auch teilweise manuell Pakete aus dem Verzeichnis "/var/lib/dpkg/info" gelöscht, weil Synaptic sich absolut weigerte Abhängigkeiten aufzulösen/ bzw. Pakete auch nicht mehr mit "--force" deinstallierte.
Ich habe dann fehlerhafte "odbc-Dateien" manuell gelöscht und alles was mit ODBC zutuen hat.

Danach habe ich "sudo apt-get install unixodbc-dev unixodbc-bin unixodbc" installiert und es scheint zu funktionieren.

Trotzdem brauche ich eigentlich kein ODBC unter Linux.
(Ist schon ganz schön nervig mit dieser Treiber-Geschichte)

100% zufrieden bin ich aber noch nicht, weil ich bis jetzt nur bis zu dieser Fehlermeldung gekommen bin:
"Can't open database !"
Betriebssysteme: MX Linux 19 / Windows 10 / Mac OS 10.15.7 / Android 7.0 ;)

Manchmal muß das Rad neu erfunden werden.
Benutzeravatar
mk-soft
Beiträge: 3287
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: ODBC-Datenbankzugriff unter Linux für Dummies

Beitrag von mk-soft »

Ist schon nervig das mit den Datenbanken zum zu laufen bekommen (Bis jetzt noch nicht hin bekommen)

Bis jetzt habe ich das auch nicht gebraucht und verwende in der Regel SQLite.

Dafür funktioniert jetzt aber MySQL mit "libmariadb.so" für Linux und "libmariadb.dylib" für MacOS, sowie "libmariadb.dll".
Ich habe ein Buffalo-NAS mit MySQL Datenbank. Funktioniert super schnell.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.7x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf My Webspace
ccode_new
Beiträge: 1072
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: ODBC-Datenbankzugriff unter Linux für Dummies

Beitrag von ccode_new »

Hallo mk-soft,

ja das klingt interessant.

Warum gibt es eigentlich laut Hilfe eine Konstante "#PB_Database_MySQL", die PureBasic aber garnicht kennt ?
Betriebssysteme: MX Linux 19 / Windows 10 / Mac OS 10.15.7 / Android 7.0 ;)

Manchmal muß das Rad neu erfunden werden.
Benutzeravatar
ts-soft
Beiträge: 22291
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: ODBC-Datenbankzugriff unter Linux für Dummies

Beitrag von ts-soft »

Warum gibt es eigentlich laut Hilfe eine Konstante "#PB_Database_MySQL", die PureBasic aber garnicht kennt ?
Da hat wohl jemand geschlafen :mrgreen:
PB sollte die eigentlich kennen. Dient der Nutzung der MySQL Datenbank, wenn OpenDatabase()
Wird wahrscheinlich = 4 sein.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
mk-soft
Beiträge: 3287
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: ODBC-Datenbankzugriff unter Linux für Dummies

Beitrag von mk-soft »

Es ist Vier...

Code: Alles auswählen

;-TOP

;IncludeFile "mysql.pbi"

; ---------------------------------------------------------------------------------------

CompilerIf #PB_Compiler_OS = #PB_OS_MacOS

  Procedure.s GetAppPath()
    Protected bundlePathPtr = CocoaMessage(0,CocoaMessage(0,CocoaMessage(0,0,"NSBundle mainBundle"),"bundlePath"),"UTF8String")
    If bundlePathPtr
      Protected bundlePath.s = PeekS(bundlePathPtr,-1,#PB_UTF8) + "/"
    EndIf
    ProcedureReturn bundlePath
  EndProcedure
  
  ; ---------------------------------------------------------------------------------------
  
  Procedure.s GetResourcePath()
    Protected bundlePathPtr = CocoaMessage(0,CocoaMessage(0,CocoaMessage(0,0,"NSBundle mainBundle"),"resourcePath"),"UTF8String")
    If bundlePathPtr
      Protected bundlePath.s = PeekS(bundlePathPtr,-1,#PB_UTF8) + "/"
    EndIf
    ProcedureReturn bundlePath
  EndProcedure
  
  ; ---------------------------------------------------------------------------------------
  
  
  libdb.s = GetAppPath() + "Contents/Library/libmariadb.dylib"
  
  
  If UseMySQLDatabase(libdb) = 0
    Debug "Error MySQL"
    End
  EndIf
  
CompilerElse
  
    If UseMySQLDatabase() = 0
    Debug "Error MySQL"
    End
  EndIf
  
CompilerEndIf


UseSQLiteDatabase()

Procedure CheckDatabaseUpdate(Database, Query$)
  Result = DatabaseUpdate(Database, Query$)
  If Result = 0
    Debug "Error Update: " + DatabaseError() + #LF$ + Query$
  EndIf
  
  ProcedureReturn Result
EndProcedure

Procedure CheckDatabaseQuery(Database, Query$)
  Result = DatabaseQuery(Database, Query$)
  If Result = 0
    Debug "Error Query: " + DatabaseError() + #LF$ + Query$
  EndIf
  
  ProcedureReturn Result
EndProcedure

database.s = "host=server port=3306 dbname=developer"
user.s = "developer"
pass.s = "purebasic"

CompilerIf Defined(PB_Database_MySQL, #PB_Constant) = 0
  #PB_Database_MySQL = 4
CompilerEndIf
    
If OpenDatabase(0, database, user, pass, #PB_Database_MySQL)
  CheckDatabaseUpdate(0, "CREATE TABLE IF NOT EXISTS food (name CHAR(50), weight INT)")
  CheckDatabaseUpdate(0, "DELETE FROM food")
  
  CheckDatabaseUpdate(0, "INSERT INTO food (name, weight) VALUES ('apple', '12')")
  CheckDatabaseUpdate(0, "INSERT INTO food (name, weight) VALUES ('pear', '5')")
  CheckDatabaseUpdate(0, "INSERT INTO food (name, weight) VALUES ('banana', '25')")
  
  If CheckDatabaseQuery(0, "SELECT * FROM food WHERE weight > 0")
    While NextDatabaseRow(0)
      Debug "Food = " + GetDatabaseString(0, 0) + " Weight = " + GetDatabaseLong(0, 1)
    Wend
    FinishDatabaseQuery(0)
  EndIf
  
  CloseDatabase(0)
Else
  Debug "Can't open database !"
  CallDebugger
EndIf
P.S.
Ach ja,
Für MacOS verwende ich das Tool MyAppData um die Lib mit in die App zu packen...
Link: https://www.purebasic.fr/english/viewto ... 19&t=61638
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.7x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf My Webspace
ccode_new
Beiträge: 1072
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: ODBC-Datenbankzugriff unter Linux für Dummies

Beitrag von ccode_new »

Hallo!

Ja 4 stimmt!

Das mit dem MySQL /MariaDB ist toll, weil es funktioniert und schneller ist als SQLLite.

Aber auch viel umständlicher mit der Konfigurierung.

Ich musste erst ein Passwort für den Benutzer "root" setzten, weil sonst kein Zugriff möglich war.
Auch konnte ich keine Verbindung über "localhost" herstellen, sondern musste "host=127.0.0.1" schreiben. (Was eigentlich das selbe ist, oder ?)
Mit einem anderen angelegten Benutzer (außer root) konnte ich bisher noch keine Verbindung aufbauen.

Aber ich kann jetzt wenigstens ohne "sudo " einfach nur per "mysql" auf das "Config-Tool" zugreifen.
Betriebssysteme: MX Linux 19 / Windows 10 / Mac OS 10.15.7 / Android 7.0 ;)

Manchmal muß das Rad neu erfunden werden.
Antworten