Aktuelle Zeit: 19.04.2018 19:44

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 15 Beiträge ]  Gehe zu Seite 1, 2  Nächste
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: Erdgeschoß
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.62 (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.62 | SpiderBasic 2.10 | Windows 10 Pro (x64) | Linux Mint 18.3 (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: Erdgeschoß
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.62 (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.62].


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  
 Betreff des Beitrags: Re: ODBC / SQLConfigDataSource schlägt fehl mit PB 5.61
BeitragVerfasst: 28.11.2017 20:35 
Offline
Benutzeravatar

Registriert: 11.11.2004 17:52
Wohnort: Bremen
Hallo PB'ler,

jetzt wird es noch etwas seltsamer, Programme die schon einige Zeit auf dem Computer laufen, sie fragen Daten in einer Accessdatei (*.accdb) ab, laufen im Augenblick auch nicht mehr. Dies scheint mit mit dem Update auf Office 2016 eingetreten zu sein. Ich habe mir die Datenquellen mal angeschaut und den Treiber den ich immer benutzte ("Microsoft Access Driver (*.mdb, *.accdb)") war dort nicht mehr vorhanden. Desgleichen habe ich gesehen das in der Treibertabelle als Datei "ODBCJT32.dll" angegeben ist. Ich habe leider zu wenig Erfahrung und Wissen auf diesem Gebiet um mir einen Reim darauf machen zu können. Ich weiß nur, im Augenblick läuft nix mehr mit Access DB. >_< :bluescreen:

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


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

Registriert: 11.11.2004 17:52
Wohnort: Bremen
Danke mk-soft

für deinen Workaround aber ich stehe irgendwie auf dem Schlauch.
Ich komm einfach nicht dahinter wie ich mit deinem Workaround umzugehen habe.
Ein kleines Beispiel könnte mich sicherlich auf auf den rechten Weg führen. :praise:

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


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

Registriert: 24.11.2004 13:12
Wohnort: Germany
Einfach wie die externe Funktion aufrufen, aber nur ohne 'Unterstrich'

SQLConfigDataSource_(...) nach SQLConfigDataSource(...)
:wink:

Link ExDatabase.pbi
http://www.purebasic.fr/english/viewtop ... 12&t=67180

_________________
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  
 Betreff des Beitrags: Re: ODBC / SQLConfigDataSource schlägt fehl mit PB 5.61
BeitragVerfasst: 01.12.2017 19:07 
Offline
Benutzeravatar

Registriert: 11.11.2004 17:52
Wohnort: Bremen
Danke mk-soft,

ich komme wieder auf meine Daten in den Accessfiles,
allerdings musste ich erst noch den Treiber 'Microsoft Access Driver (*.mdb, *accdb)' installieren um das zu bewerkstelligen.
Allerdings hatte ich eben noch ein Problem wenn ich eine Access Datei erstellen will:
Code:
mTreiber = "Microsoft Access Driver (*.mdb, *.accdb)"
   Procedure.b File_Create(vFiles.s, vUser.s = #Null$, vCode.s = #Null$)
      Shared mTreiber
      Protected n.i, *pMemory, pResult.b
      Protected pAttributes.s = "CREATE_DB=" + vFiles + " General;UID=" + vUser + ";PWD=" + vCode + ";"

      If SQLConfigDataSource(#mDatabase, #mADD_DSN, mTreiber, @pAttributes)
         pResult = #True
      EndIf
      ProcedureReturn pResult
   EndProcedure
Ich kann sie zwar erstellen aber es wird immer automatisch '.mdb' mit angegeben zBsp. möchte ich eine Datei mit Namen 'Test.accdb' anlegen, angelegt wird eine Datei mit Namen 'Test.accdb.mdb'. :praise:

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


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

Registriert: 24.11.2004 13:12
Wohnort: Germany
Bei Google gesucht
Zitat:
char szDriverName[] = "Microsoft Access Driver (*.mdb, *.accdb)";
char szAttr[] = "CREATE_DBV12=c:\access2007.accdb";
SQLConfigDataSource(NULL, ODBC_ADD_DSN, szDriverName, szAttr);


Nicht getestet... :wink:

_________________
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  [ 15 Beiträge ]  Gehe zu Seite 1, 2  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 9 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