ODBC Problem auf Mac OS

MAC OSX spezifisches Forum
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Jörg Burdorf
Beiträge: 23
Registriert: 14.12.2018 23:01

ODBC Problem auf Mac OS

Beitrag von Jörg Burdorf »

Hallo Gemeinde!

Hab ein Programm mit Zugriff auf DB2 mittels ODBC geschrieben. Unter Windows und Ubuntu / LInux
läuft das soweit.

Beim MAC OS bekomme ich aber anstelle des Datasource Namens nur den Anfangsbuchstaben der Datasource.
In meinem Fall heißt die Datasource SJB01, angezeigt wird in Purebasic aber nur S.
Wenn ich dann den dann mit dem richtigen Namen überschreibe, welcher mit iODBC Administrator64
verifiziert ist, bekomme ich eine Fehlermeldung, die nichts aussagt. Es steht einfach ein großes D als
Fehlertext.

Hat jemand eine Idee?
LG
Jörg
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: ODBC Problem auf Mac OS

Beitrag von ccode_new »

Halli Hallo Hallöchen Jörg Burdorf,

ich besitze zwar keinen Mac, aber meistens ist so ein beschriebenes Problem auf "Ascii versus Unicode" zurückzuführen.

Hier wird bestimmt irgendein "Pointer" falsch ausgelesen.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: ODBC Problem auf Mac OS

Beitrag von mk-soft »

Ist immer noch ein Bug unter MacOS... Wurde leider bis heute nicht repariert.

Unter ASCII funktioniert es, aber nicht unter Unicode

ODBC.LOG

ascii
[000000.000642]
PureBasic.0 1018FF5C0 ENTER SQLConnect
SQLHDBC 0x100419f20
SQLCHAR * 0x100424130
| myodbc-v53-x64-ansi |
SQLSMALLINT -3 (SQL_NTS)
SQLCHAR * 0x1004257a0
| developer |
SQLSMALLINT -3 (SQL_NTS)
SQLCHAR * 0x7fff5dde9d4c
| **** |
SQLSMALLINT -3 (SQL_NTS)

[000000.038373]
PureBasic.0 1018FF5C0 EXIT SQLConnect with return code 0 (SQL_SUCCESS)
SQLHDBC 0x100419f20
SQLCHAR * 0x100424130
SQLSMALLINT -3 (SQL_NTS)
SQLCHAR * 0x1004257a0
SQLSMALLINT -3 (SQL_NTS)
SQLCHAR * 0x7fff5dde9d4c
SQLSMALLINT -3 (SQL_NTS)
unicode
[000000.000705]
PureBasic.0 105CC25C0 ENTER SQLConnectW
SQLHDBC 0x100724dd0
SQLWCHAR * 0x100724d90
SQLSMALLINT -3 (SQL_NTS)
SQLWCHAR * 0x10072d130
SQLSMALLINT -3 (SQL_NTS)
SQLWCHAR * 0x7fff5dde7e50
| **** |
SQLSMALLINT -3 (SQL_NTS)

[000000.001245]
PureBasic.0 105CC25C0 EXIT SQLConnectW with return code -1 (SQL_ERROR)
SQLHDBC 0x100724dd0
SQLWCHAR * 0x100724d90
SQLSMALLINT -3 (SQL_NTS)
SQLWCHAR * 0x10072d130
SQLSMALLINT -3 (SQL_NTS)
SQLWCHAR * 0x7fff5dde7e50
SQLSMALLINT -3 (SQL_NTS)
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: ODBC Problem auf Mac OS

Beitrag von mk-soft »

Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Jörg Burdorf
Beiträge: 23
Registriert: 14.12.2018 23:01

Re: ODBC Problem auf Mac OS

Beitrag von Jörg Burdorf »

Hi !

Ja, super! Bin mal gespannt, ob sich da was tut. Würde meinen Wirkungskreis
stark erweitern. Wäre dann wirklich Plattform übergreifend!
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: ODBC Problem auf Mac OS

Beitrag von mk-soft »

Was ich noch schreiben werde ist eine dll/so/dylib, das man unter Unicode auch ASC Datenbanktreiber ansprechen kann...
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: ODBC Problem auf Mac OS

Beitrag von mk-soft »

Hier erst mal eine Lösung die ASCII Treiber zu verwenden.
Dazu wird eine Library erstellt der den ASCII ODBC-Treiber aufruft.

Es sind zwei Dateien
Die myodbca.pb um die Library zu erstellen und die myodbca_include um die Funktionen aufzurufen.

Die Datenbank Funktionen werden dann mit den Anhängsel "A" für ASCII aufgerufen.

Ich hoffe das bald auch Unicode auf MacOS funktioniert.

Achtung! Purebasic v5.46 erforderlich um die Library in Ascii zu erstellen

Library

Code: Alles auswählen

;-TOP

; Comment : Use AscII Database Helper (dll, so, dylib)
; Author  : mk-soft
; Create  : 17.01.2019
; Version : v0.3

; *****************************************************************************

CompilerIf #PB_Compiler_Unicode
  CompilerError "Disable compiler option unicode!"
CompilerEndIf
  
CompilerIf Not #PB_Compiler_Thread
  CompilerError "Enable compiler option threadsafe!"
CompilerEndIf

; *****************************************************************************

EnableExplicit

Threaded Result$
Threaded dblVal.d
Threaded fltVal.f
Threaded llVal.q

; *****************************************************************************

ProcedureDLL UseODBCDatabaseA()
  ProcedureReturn UseODBCDatabase()
EndProcedure
; ---------------------------------------------------------
ProcedureDLL AffectedDatabaseRowsA(Database)
  ProcedureReturn AffectedDatabaseRows(Database)
EndProcedure
; ---------------------------------------------------------
ProcedureDLL CheckDatabaseNullA(Database, Column)
  ProcedureReturn CheckDatabaseNull(Database, Column)
EndProcedure
; ---------------------------------------------------------
ProcedureDLL CloseDatabaseA(Database)
  ProcedureReturn CloseDatabase(Database)
EndProcedure
; ---------------------------------------------------------
ProcedureDLL DatabaseColumnIndexA(Database, ColumnName$)
  ProcedureReturn DatabaseColumnIndex(Database, ColumnName$)
EndProcedure
; ---------------------------------------------------------
ProcedureDLL DatabaseColumnNameStrA(Database, Column)
  Result$ = DatabaseColumnName(Database, Column)
  ProcedureReturn @Result$
EndProcedure
; ---------------------------------------------------------
ProcedureDLL DatabaseColumnSizeA(Database, Column)
  ProcedureReturn DatabaseColumnSize(Database, Column)
EndProcedure
; ---------------------------------------------------------
ProcedureDLL DatabaseColumnTypeA(Database, Column)
  ProcedureReturn DatabaseColumnType(Database, Column)
EndProcedure
; ---------------------------------------------------------
ProcedureDLL DatabaseColumnsA(Database)
  ProcedureReturn DatabaseColumns(Database)
EndProcedure
; ---------------------------------------------------------
ProcedureDLL DatabaseDriverDescriptionStrA()
  Result$ = DatabaseDriverDescription()
  ProcedureReturn @Result$
EndProcedure
; ---------------------------------------------------------
ProcedureDLL DatabaseDriverNameStrA()
  Result$ = DatabaseDriverName()
  ProcedureReturn @Result$
EndProcedure
; ---------------------------------------------------------
ProcedureDLL DatabaseErrorStrA()
  Result$ = DatabaseError()
  ProcedureReturn @Result$
EndProcedure
; ---------------------------------------------------------
ProcedureDLL DatabaseIDA(Database)
  ProcedureReturn DatabaseID(Database)
EndProcedure
; ---------------------------------------------------------
ProcedureDLL DatabaseQueryA(Database, Request$, Flags = 0)
  ProcedureReturn DatabaseQuery(Database, Request$, Flags)
EndProcedure
; ---------------------------------------------------------
ProcedureDLL DatabaseUpdateA(Database, Request$)
  ProcedureReturn DatabaseUpdate(Database, Request$)
EndProcedure
; ---------------------------------------------------------
ProcedureDLL ExamineDatabaseDriversA()
  ProcedureReturn ExamineDatabaseDrivers()
EndProcedure
; ---------------------------------------------------------
ProcedureDLL FinishDatabaseQueryA(Database)
  ProcedureReturn FinishDatabaseQuery(Database)
EndProcedure
; ---------------------------------------------------------
ProcedureDLL FirstDatabaseRowA(Database)
  ProcedureReturn FirstDatabaseRow(Database)
EndProcedure
; ---------------------------------------------------------
ProcedureDLL GetDatabaseBlobA(Database, Column, *Buffer, Bufferlength)
  ProcedureReturn GetDatabaseBlob(Database, Column, *Buffer, Bufferlength)
EndProcedure
; ---------------------------------------------------------
ProcedureDLL GetDatabaseDoublePtrA(Database, Column)
  dblVal = GetDatabaseDouble(Database, Column)
  ProcedureReturn @dblVal
EndProcedure
; ---------------------------------------------------------
ProcedureDLL GetDatabaseFloatPtrA(Database, Column)
  fltVal = GetDatabaseFloat(Database, Column)
  ProcedureReturn @fltVal
EndProcedure
; ---------------------------------------------------------
ProcedureDLL GetDatabaseLongA(Database, Column)
  ProcedureReturn GetDatabaseLong(Database, Column)
EndProcedure
; ---------------------------------------------------------
ProcedureDLL GetDatabaseQuadA(Database, Column)
  ProcedureReturn GetDatabaseQuad(Database, Column)
EndProcedure
; ---------------------------------------------------------
ProcedureDLL GetDatabaseQuadPtrA(Database, Column)
  llVal = GetDatabaseQuad(Database, Column)
  ProcedureReturn @llVal
EndProcedure
; ---------------------------------------------------------
ProcedureDLL GetDatabaseStringStrA(Database, Column)
  Result$ = GetDatabaseString(Database, Column)
  ProcedureReturn @Result$
EndProcedure
; ---------------------------------------------------------
ProcedureDLL IsDatabaseA(Database)
  ProcedureReturn IsDatabase(Database)
EndProcedure
; ---------------------------------------------------------
ProcedureDLL NextDatabaseDriverA()
  ProcedureReturn NextDatabaseDriver()
EndProcedure
; ---------------------------------------------------------
ProcedureDLL NextDatabaseRowA(Database)
  ProcedureReturn NextDatabaseRow(Database)
EndProcedure
; ---------------------------------------------------------
ProcedureDLL OpenDatabaseA(Database, DatabaseName$, User$, Password$ , Plugin = 1)
  ProcedureReturn OpenDatabase(Database, DatabaseName$, User$, Password$ , Plugin)
EndProcedure
; ---------------------------------------------------------
ProcedureDLL OpenDatabaseRequesterA(Database, Plugin = 0)
  ProcedureReturn OpenDatabaseRequester(Database, Plugin)
EndProcedure
; ---------------------------------------------------------
ProcedureDLL PreviousDatabaseRowA(Database)
  ProcedureReturn PreviousDatabaseRow(Database)
EndProcedure
; ---------------------------------------------------------
ProcedureDLL SetDatabaseBlobA(Database, StatementIndex, *Buffer, BufferLength)
  ProcedureReturn SetDatabaseBlob(Database, StatementIndex, *Buffer, BufferLength)
EndProcedure
; ---------------------------------------------------------
ProcedureDLL SetDatabaseDoubleA(Database, StatementIndex, Value.d)
  ProcedureReturn SetDatabaseDouble(Database, StatementIndex, Value.d)
EndProcedure
; ---------------------------------------------------------
ProcedureDLL SetDatabaseFloatA(Database, StatementIndex, Value.f)
  ProcedureReturn SetDatabaseFloat(Database, StatementIndex, Value.f)
EndProcedure
; ---------------------------------------------------------
ProcedureDLL SetDatabaseLongA(Database, StatementIndex, Value.l)
  ProcedureReturn SetDatabaseLong(Database, StatementIndex, Value.l)
EndProcedure
; ---------------------------------------------------------
ProcedureDLL SetDatabaseNullA(Database, StatementIndex)
  ProcedureReturn SetDatabaseNull(Database, StatementIndex)
EndProcedure
; ---------------------------------------------------------
ProcedureDLL SetDatabaseQuadA(Database, StatementIndex, Value.q)
  ProcedureReturn SetDatabaseQuad(Database, StatementIndex, Value.q)
EndProcedure
; ---------------------------------------------------------
ProcedureDLL SetDatabaseStringA(Database, StatementIndex, Value$)
  ProcedureReturn SetDatabaseString(Database, StatementIndex, Value$)
EndProcedure
; ---------------------------------------------------------

; *****************************************************************************
[/size]

Include

Code: Alles auswählen

;-TOP
;-TOP

; Comment : Use AscII Database Helper (include)
; Author  : mk-soft
; Create  : 17.01.2019
; Version : v0.3

; *****************************************************************************

; *****************************************************************************

Prototype protoUseODBCDatabaseA()
Prototype protoAffectedDatabaseRowsA(Database)
Prototype protoCheckDatabaseNullA(Database, Column)
Prototype protoCloseDatabaseA(Database)
Prototype protoDatabaseColumnIndexA(Database, ColumnName.p-ascii)
Prototype protoDatabaseColumnNameStrA(Database, Column)
Prototype protoDatabaseColumnSizeA(Database, Column)
Prototype protoDatabaseColumnTypeA(Database, Column)
Prototype protoDatabaseColumnsA(Database)
Prototype protoDatabaseDriverDescriptionStrA()
Prototype protoDatabaseDriverNameStrA()
Prototype protoDatabaseErrorStrA()
Prototype protoDatabaseIDA(Database)
Prototype protoDatabaseQueryA(Database, Request.p-utf8, Flags = 0)
Prototype protoDatabaseUpdateA(Database, Request.p-utf8)
Prototype protoExamineDatabaseDriversA()
Prototype protoFinishDatabaseQueryA(Database)
Prototype protoFirstDatabaseRowA(Database)
Prototype protoGetDatabaseBlobA(Database, Column, *Buffer, Bufferlength)
Prototype protoGetDatabaseDoublePtrA(Database, Column)
Prototype protoGetDatabaseFloatPtrA(Database, Column)
Prototype protoGetDatabaseLongA(Database, Column)
Prototype protoGetDatabaseQuadA(Database, Column)
Prototype protoGetDatabaseQuadPtrA(Database, Column)
Prototype protoGetDatabaseStringStrA(Database, Column)
Prototype protoIsDatabaseA(Database)
Prototype protoNextDatabaseDriverA()
Prototype protoNextDatabaseRowA(Database)
Prototype protoOpenDatabaseA(Database, DatabaseName.p-ascii, User.p-ascii, Password.p-ascii , Plugin = 1)
Prototype protoOpenDatabaseRequesterA(Database, Plugin = 0)
Prototype protoPreviousDatabaseRowA(Database)
Prototype protoSetDatabaseBlobA(Database, StatementIndex, *Buffer, BufferLength)
Prototype protoSetDatabaseDoubleA(Database, StatementIndex, Value.d)
Prototype protoSetDatabaseFloatA(Database, StatementIndex, Value.f)
Prototype protoSetDatabaseLongA(Database, StatementIndex, Value.l)
Prototype protoSetDatabaseNullA(Database, StatementIndex)
Prototype protoSetDatabaseQuadA(Database, StatementIndex, Value.q)
Prototype protoSetDatabaseStringA(Database, StatementIndex, Value.p-utf8)

; *****************************************************************************

Procedure OpenMyODBCA(Path.s = "")
  Protected myodbclib.s, lib
  
  If Bool(Path)
    CompilerIf #PB_Compiler_OS = #PB_OS_Windows
      If Right(Path, 1) <> "\" : Path + "\" : EndIf
    CompilerElse
      If Right(Path, 1) <> "/" : Path + "/" : EndIf
    CompilerEndIf
  EndIf
  
  CompilerSelect #PB_Compiler_OS
    CompilerCase #PB_OS_Windows
      myodbclib = Path + "myodbca.dylib"
    CompilerCase #PB_OS_Linux
      myodbclib = Path + "myodbca.so"
    CompilerCase #PB_OS_MacOS
      myodbclib = Path + "myodbca.dylib"
  CompilerEndSelect
  
  lib = OpenLibrary(#PB_Any, myodbclib)
  If Not lib
    ProcedureReturn 0
  EndIf
  
  ;
  
  Global UseODBCDatabaseA.protoUseODBCDatabaseA = GetFunction(lib, "UseODBCDatabaseA")
  Global AffectedDatabaseRowsA.protoAffectedDatabaseRowsA = GetFunction(lib, "AffectedDatabaseRowsA")
  Global CheckDatabaseNullA.protoCheckDatabaseNullA = GetFunction(lib, "CheckDatabaseNullA")
  Global CloseDatabaseA.protoCloseDatabaseA = GetFunction(lib, "CloseDatabaseA")
  Global DatabaseColumnIndexA.protoDatabaseColumnIndexA = GetFunction(lib, "DatabaseColumnIndexA")
  Global DatabaseColumnNameStrA.protoDatabaseColumnNameStrA = GetFunction(lib, "DatabaseColumnNameStrA")
  Global DatabaseColumnSizeA.protoDatabaseColumnSizeA = GetFunction(lib, "DatabaseColumnSizeA")
  Global DatabaseColumnTypeA.protoDatabaseColumnTypeA = GetFunction(lib, "DatabaseColumnTypeA")
  Global DatabaseColumnsA.protoDatabaseColumnsA = GetFunction(lib, "DatabaseColumnsA")
  Global DatabaseDriverDescriptionStrA.protoDatabaseDriverDescriptionStrA = GetFunction(lib, "DatabaseDriverDescriptionStrA")
  Global DatabaseDriverNameStrA.protoDatabaseDriverNameStrA = GetFunction(lib, "DatabaseDriverNameStrA")
  Global DatabaseErrorStrA.protoDatabaseErrorStrA = GetFunction(lib, "DatabaseErrorStrA")
  Global DatabaseIDA.protoDatabaseIDA = GetFunction(lib, "DatabaseIDA")
  Global DatabaseQueryA.protoDatabaseQueryA = GetFunction(lib, "DatabaseQueryA")
  Global DatabaseUpdateA.protoDatabaseUpdateA = GetFunction(lib, "DatabaseUpdateA")
  Global ExamineDatabaseDriversA.protoExamineDatabaseDriversA = GetFunction(lib, "ExamineDatabaseDriversA")
  Global FinishDatabaseQueryA.protoFinishDatabaseQueryA = GetFunction(lib, "FinishDatabaseQueryA")
  Global FirstDatabaseRowA.protoFirstDatabaseRowA = GetFunction(lib, "FirstDatabaseRowA")
  Global GetDatabaseBlobA.protoGetDatabaseBlobA = GetFunction(lib, "GetDatabaseBlobA")
  Global GetDatabaseDoublePtrA.protoGetDatabaseDoublePtrA = GetFunction(lib, "GetDatabaseDoublePtrA")
  Global GetDatabaseFloatPtrA.protoGetDatabaseFloatPtrA = GetFunction(lib, "GetDatabaseFloatPtrA")
  Global GetDatabaseLongA.protoGetDatabaseLongA = GetFunction(lib, "GetDatabaseLongA")
  Global GetDatabaseQuadA.protoGetDatabaseQuadA = GetFunction(lib, "GetDatabaseQuadA")
  Global GetDatabaseQuadPtrA.protoGetDatabaseQuadPtrA = GetFunction(lib, "GetDatabaseQuadPtrA")
  Global GetDatabaseStringStrA.protoGetDatabaseStringStrA = GetFunction(lib, "GetDatabaseStringStrA")
  Global IsDatabaseA.protoIsDatabaseA = GetFunction(lib, "IsDatabaseA")
  Global NextDatabaseDriverA.protoNextDatabaseDriverA = GetFunction(lib, "NextDatabaseDriverA")
  Global NextDatabaseRowA.protoNextDatabaseRowA = GetFunction(lib, "NextDatabaseRowA")
  Global OpenDatabaseA.protoOpenDatabaseA = GetFunction(lib, "OpenDatabaseA")
  Global OpenDatabaseRequesterA.protoOpenDatabaseRequesterA = GetFunction(lib, "OpenDatabaseRequesterA")
  Global PreviousDatabaseRowA.protoPreviousDatabaseRowA = GetFunction(lib, "PreviousDatabaseRowA")
  Global SetDatabaseBlobA.protoSetDatabaseBlobA = GetFunction(lib, "SetDatabaseBlobA")
  Global SetDatabaseDoubleA.protoSetDatabaseDoubleA = GetFunction(lib, "SetDatabaseDoubleA")
  Global SetDatabaseFloatA.protoSetDatabaseFloatA = GetFunction(lib, "SetDatabaseFloatA")
  Global SetDatabaseLongA.protoSetDatabaseLongA = GetFunction(lib, "SetDatabaseLongA")
  Global SetDatabaseNullA.protoSetDatabaseNullA = GetFunction(lib, "SetDatabaseNullA")
  Global SetDatabaseQuadA.protoSetDatabaseQuadA = GetFunction(lib, "SetDatabaseQuadA")
  Global SetDatabaseStringA.protoSetDatabaseStringA = GetFunction(lib, "SetDatabaseStringA")  
  
  ;
  
  ProcedureReturn 1
  
EndProcedure

; *****************************************************************************

Macro DatabaseColumnNameA(Database, Column)
  PeekS(DatabaseColumnNameStrA(Database, Column), -1, #PB_UTF8)
EndMacro

Macro DatabaseDriverDescriptionA()
  PeekS(DatabaseDriverDescriptionStrA(), -1, #PB_UTF8)
EndMacro

Macro DatabaseErrorA()
  PeekS(DatabaseErrorStrA(), -1, #PB_UTF8)
EndMacro

Macro DatabaseDriverNameA()
  PeekS(DatabaseDriverNameStrA(), -1, #PB_UTF8)
EndMacro

Macro GetDatabaseDoubleA(Database, Column)
  PeekD(GetDatabaseDoublePtrA(Database, Column))
EndMacro

Macro GetDatabaseFloatA(Database, Column)
  PeekF(GetDatabaseFloatPtrA(Database, Column))
EndMacro

Macro GetDatabaseQuad32A(Database, Column)
  PeekQ(GetDatabaseQuadPtrA(Database, Column))
EndMacro

Macro GetDatabaseStringA(Database, Column)
  PeekS(GetDatabaseStringStrA(Database, Column), -1, #PB_UTF8)
EndMacro

; *****************************************************************************
[/size]
Zuletzt geändert von mk-soft am 25.06.2019 20:32, insgesamt 8-mal geändert.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: ODBC Problem auf Mac OS

Beitrag von mk-soft »

Beispiel

Code: Alles auswählen

;-TOP

IncludeFile "myodbca_include.pb"

If Not OpenMyODBCA()
  Debug "Error open libray myodbca"
  End
EndIf


UseODBCDatabaseA()

Procedure CheckDatabaseUpdate(Database, Query$)
  Result = DatabaseUpdateA(Database, Query$)
  If Result = 0
    Debug DatabaseErrorA()
  EndIf
  
  ProcedureReturn Result
EndProcedure

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

Global.s database, user, pass

;database = "myodbc-v53-x64-unicode"
database = "myodbc-v53-x64-ansi"
user = "developer"
pass = "purebasic"

If OpenDatabaseA(0, database, user, pass)
  CheckDatabaseUpdate(0, "CREATE TABLE food (name CHAR(50), weight INT)")
  
  CheckDatabaseUpdate(0, "INSERT INTO food (name, weight) VALUES ('apple', '10')")
  CheckDatabaseUpdate(0, "INSERT INTO food (name, weight) VALUES ('pear', '5')")
  CheckDatabaseUpdate(0, "INSERT INTO food (name, weight) VALUES ('banana', '20')")
  
  If DatabaseQueryA(0, "SELECT * FROM food WHERE weight > 2")
    
    While NextDatabaseRowA(0)
      Debug GetDatabaseStringA(0, 0)
    Wend
    
    FinishDatabaseQueryA(0)
  EndIf
  
  CloseDatabaseA(0)
Else
  Debug "Can't open database !"
EndIf
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Jörg Burdorf
Beiträge: 23
Registriert: 14.12.2018 23:01

Re: ODBC Problem auf Mac OS

Beitrag von Jörg Burdorf »

Hallo noch mal. Habe versucht, die PB Version 5.46 zu finden. Im "Museum" gibts aber nur 5.45 oder 5.50.
Kannst du mir die dylib irgendwie zukommen lassen, damit ich das mal testen kann?

LG
Jörg
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: ODBC Problem auf Mac OS

Beitrag von mk-soft »

Einfach den Link zu v5.45 kopieren und im Link die Version ändern.

Ausserdem habe ich die Library auf meinen Webserver hinterlegt. Ordner mycodes -> pb5 -> odbc.

Ach ja...
Unter Safari geht ftp so einfach nicht mehr. Ein anderen Browser verwenden oder Benutzer "gast" Password "1234" selber eingeben.

Schau Dir mal das PB-Tool MyAppData an. Somit bekommst du die Library direkt in Deine App kopiert und kann aus Der App direkt die Library laden
Link: https://www.purebasic.fr/english/viewto ... 19&t=61638

Beispiel

Code: Alles auswählen

;-TOP

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
  
  ; ---------------------------------------------------------------------------------------
  
CompilerEndIf

IncludeFile "myodbca_include.pb"

CompilerIf #PB_Compiler_OS = #PB_OS_MacOS
  libpath.s = GetAppPath() + "Contents/Library/"
  If Not OpenMyODBCA(libpath)
    Debug "Error open libray myodbca"
    End
  EndIf
CompilerElse
  If Not OpenMyODBCA()
    Debug "Error open libray myodbca"
    End
  EndIf
CompilerEndIf

UseODBCDatabaseA()
...
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Antworten