Seite 2 von 2
Re: ODBC / SQLConfigDataSource schlägt fehl mit PB 5.61
Verfasst: 02.12.2017 06:06
von Pelagio
Danke

mk-soft,
ich hatte auch auf Google, Bing und anderen Suchmaschinen gesucht aber deine Antwort/Zitat nicht gefunden.
Jedenfalls Danke, Danke ich habe es ausprobiert und es funktioniert. Sehr Gut!
Code: Alles auswählen
Procedure.a File_Create(vFiles.s, vUser.s = #Null$, vCode.s = #Null$)
Shared mTreiber
Protected n.i, *pMemory, pResult.a, pAttributes.s
Protected pExt.s = UCase(GetExtensionPart(vFiles))
If (pExt="ACCDB")
pAttributes = "CREATE_DBV12=" + vFiles + " General;UID=" + vUser + ";PWD=" + vCode + ";"
ElseIf (pExt="MDB")
pAttributes = "CREATE_DB=" + vFiles + " General;UID=" + vUser + ";PWD=" + vCode + ";"
EndIf
If SQLConfigDataSource(#mDatabase, #mADD_DSN, #mTreiber1, @pAttributes)
pResult = #True
mTreiber = #mTreiber1
ElseIf SQLConfigDataSource(#mDatabase, #mADD_DSN, #mTreiber2, @pAttributes)
pResult = #True
mTreiber = #mTreiber2
EndIf
ProcedureReturn pResult
EndProcedure
Re: ODBC / SQLConfigDataSource schlägt fehl mit PB 5.61
Verfasst: 04.12.2017 12:07
von Pelagio
Und wieder steh ich wie der Ochs vorm Berg und weiß nicht weiter.
Diesmal wollte ich mich gerne mit einen SQL Server verbinden und manuell bekomme ich es auch, mit den Daten die ich im Code andeutend angebe, hin.
Aber wenn ich es über das Programm machen möchte wird mir folgende Fehlermeldung angezeigt:
1 ODBC : SQL SUCCESS = Allgemeiner Fehler des ODBC-Installationsprogramms
2 ODBC : SQL SUCCESS = Fehler bei ConfigDSN, Configdreiver oder ConfigTranslator
Ich gehe also davon aus das meine Attribute nicht korrekt, einen Fehler aufweisen.
Code: Alles auswählen
Enumeration
#mDatabase
#mADD_DSN ; Add Data source
#mCONFIG_DSN ; Configure (edit) Data source
#mREMOVE_DSN ; Remove Data source
#mADD_SYS_DSN ; Add a system DSN
#mCONFIG_SYS_DSN ; Configure a system DSN
#mREMOVE_SYS_DSN ; Remove a system DSN
#mREMOVE_DEFAULT_DSN ; Remove the default DSN
EndEnumeration
#mTreiber = "SQL Server"
#mDSN = "PBSQL_DSN"
#DBServer = IP-Adresse
#Datenbank= "Rauheit"
DSN_Create(#DBServer, #Datenbank)
Procedure.a DSN_Create(vServer.s, vDatabase.s)
Shared mCON
Protected pResult.a
mCON = "Server=" + vServer + ";DSN=" + #mDSN + ";Database=" + vDatabase + ";"
mCON + "Description=Description For Purebasic SQL-ODBC;TRUSTED_CONNECTION=Yes;"
If SQLConfigDataSource(#mDatabase, #mADD_DSN, #mTreiber, @mCON)
pResult = #True
EndIf
ProcedureReturn pResult
EndProcedure
aber leider komme ich nicht dahinter wo der Fehler sein könnte.

Re: ODBC / SQLConfigDataSource schlägt fehl mit PB 5.61
Verfasst: 04.12.2017 18:03
von mk-soft
Deine Konstanten und die übergäbe der Attribute stimmen nicht.
Schau Dir mal mein altes ExDatabase.pbi an...
Link:
http://www.purebasic.fr/english/viewtop ... 12&t=67180
Code: Alles auswählen
IncludeFile "source\ExDatabase.pbi"
Define.s dbName = "(local)\Master.MsSQL"
a = 3
Define.s dsn = AddDSN(dbName) ; DSN hinzufügen
Debug "DSN: " + dsn
Debug GetSQLInstallerError()
Version 1.10
Funktionsbeschreibung:
Result.l = ExamineTables(DSN.s [, USER.s, PASS.s])
Result.l = NextTable()
Result.s = GetTableName()
Result.s = GetTableType()
Result.s = AddDSN(databasename.s [, user.s, pass.s][, driver.s [, attributes]]]) - Result <- User DSN Name
Result.l = RemoveDSN(databasename.s [, driver.s])
Result.s = AddSystemDSN(databasename.s [, user.s, pass.s][, driver.s [, attributes]]]) - Result <- System DSN Name
Result.l = RemoveSystemDSN(databasename.s [, driver.s])
Result.l = RepairMDB(databasename.s [, user.s, pass.s])
Result.l = CompactMDB(databasename.s [, user.s, pass.s])
Result.l = CreateEmptyMDB(databasename.s [, user.s, pass.s])
Unterstützte Datenbanken und verwendete Standardtreiber:
*.MDB -> "Microsoft Access Driver (*.mdb)"
*.XLS -> "Microsoft Excel Driver (*.xls)"
*.DBF -> "Microsoft dBase Driver (*.dbf)"
*.CSV -> "Microsoft Text Driver (*.txt; *.csv)"
*.TXT -> "Microsoft Text Driver (*.txt; *.csv)"
*.FDB -> "Firebird/InterBase(r) driver"
*.MySQL -> "MySQL ODBC 3.51 Driver"
*.MsSQL -> "SQL Server"
*.db.SQLite -> "SQLite ODBC Driver"
*.db.SQLite3 -> "SQLite3 ODBC Driver"
Format für MySQL:
databasename = "[Host oder IP[:Port]\]Schema.MySQL", z.B. "InternetHost:3317\information_schema.mysql"
Bei fehlenden Host oder IP wird automatisch "localhost" gesetzt.
Format für SQL Server:
databasename = "SQLServer\Tabelle.MsSQL", z.B. "(local)\SQLEXPRESS\Master.MsSQL"
Format für Firebird
databasename = "[Host oder IP[/Port]:]Database.fdb", z.B. "Host/3317:c:Daten.fdb"
Beispiel für Firebird mit Client
Define.s dbName = "c:Test.fdb"
Define.s dsn = AddSystemDSN(dbName, "User", "Pass", "", "Client=C:\WINDOWS\system32\FBCLIENT.DLL") ; DSN hinzufügen
Muss ich mal aktuallisieren
Re: ODBC / SQLConfigDataSource schlägt fehl mit PB 5.61
Verfasst: 05.12.2017 13:59
von Pelagio
Hallo mk-soft,
ich danke Dir Du hast mir sehr geholfen, es klappt. Ich weiß nur nicht warum.
Code: Alles auswählen
Enumeration
#mDatabase
#mADD_DSN ; Add Data source
#mCONFIG_DSN ; Configure (edit) Data source
#mREMOVE_DSN ; Remove Data source
#mADD_SYS_DSN ; Add a system DSN
#mCONFIG_SYS_DSN ; Configure a system DSN
#mREMOVE_SYS_DSN ; Remove a system DSN
#mREMOVE_DEFAULT_DSN ; Remove the default DSN
EndEnumeration
#mTreiber = "SQL Server"
#mDSN = "PBSQL_DSN"
#DBServer = IP-Adresse
#Datenbank= "Rauheit"
DSN_Create(#DBServer, #Datenbank)
Procedure.a DSN_Create(vServer.s, vDatabase.s)
Shared mDSN, mCON
Protected n.i, pLen.i, pResult.a
Protected *pbuffer.Character
mDSN = #mDSN + "-"+ vDatabase
mCON = "DSN=" + mDSN + ";"
mCON + "DESCRIPTION=Description For Purebasic SQL-ODBC;"
mCON + "SERVER=" + vServer + ";"
mCON + "DATABASE=" + vDatabase + ";"
mCON + "Trusted_Connection=Yes;"
*pbuffer = @mCON
pLen = Len(mCON) - 1
For n=0 To pLen
If (*pbuffer\c=';'): *pbuffer\c = 0: EndIf
*pbuffer + SizeOf(Character)
Next n
If SQLConfigDataSource(#mDatabase, #mADD_DSN, #mTreiber, mCON)
pResult = #True
EndIf
ProcedureReturn pResult
EndProcedure
ich habe es erst hinbekommen als Ich deinen Code genau studiert habe und folgende Passage bei mir eingebaut hatte
Code: Alles auswählen
*pbuffer = @mCON
pLen = Len(mCON) - 1
For n=0 To pLen
If (*pbuffer\c=';'): *pbuffer\c = 0: EndIf
*pbuffer + SizeOf(Character)
Next n
Leider ist mir aber bis dato keine Erkenntnis gekommen warum dies so ist.
Vielleicht kannst Du mich ja aufklären.
Re: ODBC / SQLConfigDataSource schlägt fehl mit PB 5.61
Verfasst: 05.12.2017 14:14
von Rings
Die Api erwartet das alle Strings Null-Terminiert sind.
Um das ganze zu vereinfachen hat man das Semilkolon als Stringabschluss genommen
und in dieser Routine dann durch ein NULL ersetzt.
Ist schon ein paar Jahre her als ich das gemacht hatte........