Aktuelle Zeit: 18.11.2017 12:12

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: ODBC / SQLConfigDataSource schlägt fehl mit PB 5.61
BeitragVerfasst: 15.09.2017 17:51 
Offline
Moderator
Benutzeravatar

Registriert: 15.06.2008 18:22
Wohnort: vorhanden
Hallo,

ich möchte auf eine Access-Datenbank per ODBC zugreifen und verwende folgenden Code, der unter PB 5.60 und früher
tadellos funktioniert hat:

Code:
EnableExplicit

#ODBC_ADD_DSN = 1

Procedure StringChangeChar(*pzString, piLen.i, pcSuch.c, pcErsetz.c)
  Protected.i i = 0         
  Protected *cChar.Character = *pzString
 
  For i = 0 To piLen
    If *cChar\c = pcSuch
      *cChar\c = pcErsetz
    EndIf
    *cChar + SizeOf(Character)
  Next i

EndProcedure

Procedure.i DB_Open() 
  Protected.i iHandle
  Protected.s zErr,
              zFile,
              zName,
              zDriver,
              zExt,
              zAttributes,
              zUser,
              zPass
  Protected.l lErr
  Protected   *ErrMsg
 
  zFile = GetTemporaryDirectory() + "TEST.MDB"
  zName = GetFilePart(zFile)
  zExt  = GetExtensionPart(zFile)
  zName = Left(zName, Len(zName) - Len(zExt) - 1)
  zDriver = "Microsoft Access Driver (*.mdb)"

  If FileSize(zFile) = -1
    zAttributes = "CREATE_DB=" + zFile + " General"
    zAttributes + ";UID=" + zUser
    zAttributes + ";PWD=" + zPass + ";"
    StringChangeChar(@zAttributes, Len(zAttributes), ';', 0)
    iHandle = SQLConfigDataSource_(0, #ODBC_ADD_DSN, zDriver, zAttributes)   
  EndIf
 
  zAttributes = "Server=APServer;Description=" + zName
  zAttributes + ";DSN=" + zName
  zAttributes + ";DBQ=" + zFile
  zAttributes + ";UID=" + zUser
  zAttributes + ";PWD=" + zPass + ";"
  StringChangeChar(@zAttributes, Len(zAttributes), ';', 0)
  iHandle = SQLConfigDataSource_(0, #ODBC_ADD_DSN, zDriver, zAttributes)
 
  If iHandle
    iHandle = OpenDatabase(#PB_Any, zName, zUser, zPass, #PB_Database_ODBC)
    If iHandle = 0
      Debug DatabaseError()
      ProcedureReturn 0
    EndIf
  Else
    *ErrMsg = AllocateMemory(256)
    SQLInstallerError_(1, @lErr, *ErrMsg, 255, #Null)
    Debug PeekS(*ErrMsg, -1, #PB_Ascii)
    FreeMemory(*ErrMsg)
    ProcedureReturn 0
  EndIf
 
  ProcedureReturn iHandle
 
EndProcedure

UseODBCDatabase()

DB_Open()


Mit PB 5.61 schlägt SQLConfigDataSource mit Komponente wurde in der Registrierung nicht gefunden fehl.
Ich verwende die x86er Version von PB auf Windows 10.

Weiß jemand Rat?

_________________
Win10 x64 | PB 5.61 (x86 und x64)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: ODBC / SQLConfigDataSource schlägt fehl mit PB 5.61
BeitragVerfasst: 15.09.2017 18:07 
Offline
Benutzeravatar

Registriert: 08.09.2004 00:57
Wohnort: Berlin
Sollte unter 5.60 auch nicht funktioniert haben, da kein Unicode:
Code:
Import "odbccp32.lib"
  SQLConfigDataSource(Handle, Type, strDriver.s, strAttribtues.s) As "_SQLConfigDataSourceW@16" , Unicode Version erforderlich
EndImport

sollte helfen, nicht getested!

Ansonsten den hier:
Code:
Import "odbccp32.lib"
  SQLConfigDataSource(Handle, Type, strDriver.p-Ascii, strAttribtues.p-Ascii)
EndImport


Gruß
Thomas

_________________
PureBasic 5.61 | SpiderBasic 2.10 | Windows 10 Pro (x64) | Linux Mint 18.2 (x64)
"Ich möchte gerne die Welt verändern, doch Gott gibt den Quellcode nicht frei."
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: ODBC / SQLConfigDataSource schlägt fehl mit PB 5.61
BeitragVerfasst: 15.09.2017 18:43 
Offline
Moderator
Benutzeravatar

Registriert: 15.06.2008 18:22
Wohnort: vorhanden
Ah, Unicode mal wieder... danke, funktioniert.

Da obiger Code aber mit 5.60 tatsächlich funktioniert, hatte ich in der Richtung
gar nicht weiter geforscht.

_________________
Win10 x64 | PB 5.61 (x86 und x64)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: ODBC / SQLConfigDataSource schlägt fehl mit PB 5.61
BeitragVerfasst: 07.11.2017 10:12 
Offline
Benutzeravatar

Registriert: 11.11.2004 17:52
Wohnort: Bremen
Ich habe gerade diesen Beitrag gelesen, da ich auch vor dem gleichen Problem stehe.
Allerdings weiß ich nicht wie ich das gelesene bei mir umsetzen könnte.
Ich habe sowieso meine Probleme mit den :bluescreen: der unterschiedlichen Formaten.
Code:
 #mTreiber = "SQL Server"
#mDSN =  "PBSQL_DSN"

 Procedure.a DSN_Create(vServer.s, vDatabase.s, vDSNArt.a = #False)
      Shared mDSN, mCON, mArt
      Protected pArt.i, pResult.i

      If OpenLibrary(#mDatabase, "ODBCCP32.DLL")
         If vDSNArt: pArt = #mADD_SYS_DSN: Else: pArt = #mADD_DSN: EndIf
         mDSN  = #mDSN + "-" + vDatabase
         mCON  = "Server=" + vServer + "; DSN=" + mDSN + "; Database=" + vDatabase + "; "
         mCON  + "Description=Description For Purebasic SQL-ODBC; TRUSTED_CONNECTION=Yes; LANGUAGE=German;"
         pResult = GetFunction(#mDatabase, "SQLConfigDataSource")
         If pResult
            If SQLConfigDataSource_(#mDatabase, pArt, #mTreiber, @mCON)
               pResult = #True
               mArt = vDSNArt
            Else
               pResult = #False
            EndIf
         EndIf
         CloseLibrary(#mDatabase)
      EndIf
      ProcedureReturn pResult
   EndProcedure

Die Frage wäre wie kann ich, in diesem Fall, #mTreiber und #mCon in Unicode umwandeln.
p-Ascii sagt mir leider nix.

_________________
Ohne Zeit kein Fleiß
Auf neustem Stand zu sein ist eine Kunst die nicht jeder perfektioniert [Win10Pro(64); PB5.61].


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: ODBC / SQLConfigDataSource schlägt fehl mit PB 5.61
BeitragVerfasst: 07.11.2017 11:41 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Ist ein Bug und gemeldet...

Link: http://www.purebasic.fr/english/viewtop ... =4&t=69462

Kannst erst mal den Workaround von mir nehmen.

Code:
; -----------------------------------------------------------------------------
; Bugfix ASCII, Unicode PB v5.4x and PB v5.6x
; By mk-soft version v1.02

Import "odbccp32.lib"
  CompilerIf #PB_Compiler_Unicode
    CompilerIf #PB_Compiler_Processor = #PB_Processor_x86
      SQLInstallerError(iError, *pfErrorCode, *ErrorMSGBuf, cbErrorMsgMax, *ErrorMSGLen) As "_SQLInstallerErrorW@20"
      SQLConfigDataSource(Handle, Type, strDriver.s, *strAttribtues) As "_SQLConfigDataSourceW@16"
    CompilerElse
      SQLInstallerError(iError, *pfErrorCode, *ErrorMSGBuf, cbErrorMsgMax, *ErrorMSGLen) As "SQLInstallerErrorW"
      SQLConfigDataSource(Handle, Type, strDriver.s, *strAttribtues) As "SQLConfigDataSourceW"
    CompilerEndIf
  CompilerElse
    SQLInstallerError(iError, *pfErrorCode, *ErrorMSGBuf, cbErrorMsgMax, *ErrorMSGLen)
    SQLConfigDataSource(Handle, Type, strDriver.s, *strAttribtues)
  CompilerEndIf
EndImport

Import "odbc32.lib"
  CompilerIf #PB_Compiler_Unicode
    CompilerIf #PB_Compiler_Processor = #PB_Processor_x86
      SQLConnect(ConnectionHandle, ServerName.s, NameLength1, UserName.s, NameLength2, Authentication.s, NameLength3) As "_SQLConnectW@28"
      SQLTables(StatementHandle, *CatalogName, NameLength1, *SchemaName, NameLength2, *TableName, NameLength3, *TableType, NameLength4) As "_SQLTablesW@36"
    CompilerElse
      SQLConnect(ConnectionHandle, ServerName.s, NameLength1, UserName.s, NameLength2, Authentication.s, NameLength3) As "SQLConnectW"
      SQLTables(StatementHandle, *CatalogName, NameLength1, *SchemaName, NameLength2, *TableName, NameLength3, *TableType, NameLength4) As "SQLTablesW"
    CompilerEndIf
  CompilerElse
    SQLConnect(ConnectionHandle, ServerName.s, NameLength1, UserName.s, NameLength2, Authentication.s, NameLength3)
    SQLTables(StatementHandle, *CatalogName, NameLength1, *SchemaName, NameLength2, *TableName, NameLength3, *TableType, NameLength4)
  CompilerEndIf
EndImport
; -----------------------------------------------------------------------------

_________________
Alles ist möglich, fragt sich nur wie...
Projekte EventDesigner v1.x / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf Webspace


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 5 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye