PureBoard
https://www.purebasic.fr/german/

ODBC-Datenbankzugriff unter Linux für Dummies
https://www.purebasic.fr/german/viewtopic.php?f=21&t=31250
Seite 1 von 2

Autor:  ccode_new [ 09.01.2019 21:26 ]
Betreff des Beitrags:  ODBC-Datenbankzugriff unter Linux für Dummies

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 ?

Autor:  ccode_new [ 09.01.2019 22:04 ]
Betreff des Beitrags:  Re: ODBC-Datenbankzugriff unter Linux für Dummies

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

Wie muss das konfiguriert werden ?
Bsp:

Zitat:
[testing]
Description = Meine Datenbank
Driver = TestDriver
Server = 127.0.0.1
Database = tolleDB
UID = root
PWD = tolleDB


Zitat:
[TestDriver]
Description = TestDriver
Driver = /usr/lib/x86_64-linux-gnu/libodbc.so
Setup = /usr/lib/x86_64-linux-gnu/libodbc.so

Autor:  ts-soft [ 10.01.2019 00:24 ]
Betreff des Beitrags:  Re: ODBC-Datenbankzugriff unter Linux für Dummies

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.

Autor:  mk-soft [ 10.01.2019 01:57 ]
Betreff des Beitrags:  Re: ODBC-Datenbankzugriff unter Linux für Dummies

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

Zur installation der aktuellen Version
Zitat:
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/

Autor:  ccode_new [ 11.01.2019 19:15 ]
Betreff des Beitrags:  Re: ODBC-Datenbankzugriff unter Linux für Dummies

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 !"

Autor:  mk-soft [ 11.01.2019 19:51 ]
Betreff des Beitrags:  Re: ODBC-Datenbankzugriff unter Linux für Dummies

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.

Autor:  ccode_new [ 12.01.2019 00:04 ]
Betreff des Beitrags:  Re: ODBC-Datenbankzugriff unter Linux für Dummies

Hallo mk-soft,

ja das klingt interessant.

Warum gibt es eigentlich laut Hilfe eine Konstante "#PB_Database_MySQL", die PureBasic aber garnicht kennt ?

Autor:  ts-soft [ 12.01.2019 00:36 ]
Betreff des Beitrags:  Re: ODBC-Datenbankzugriff unter Linux für Dummies

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

Autor:  mk-soft [ 12.01.2019 02:36 ]
Betreff des Beitrags:  Re: ODBC-Datenbankzugriff unter Linux für Dummies

Es ist Vier...
Code:
;-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

Autor:  ccode_new [ 12.01.2019 14:02 ]
Betreff des Beitrags:  Re: ODBC-Datenbankzugriff unter Linux für Dummies

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.

Seite 1 von 2 Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/