ODBC / SQLConfigDataSource schlägt fehl mit PB 5.61

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Pelagio
Beiträge: 423
Registriert: 11.11.2004 17:52
Computerausstattung: Intel Core i3-4170 CPU 3,70 GHz
8,00 GB Arbeitsspeicher
WIN 10 Pro 64 Bit Betriebssystem
Wohnort: Bremen

Re: ODBC / SQLConfigDataSource schlägt fehl mit PB 5.61

Beitrag von Pelagio »

Danke :praise: 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!
:bounce:

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
Ohne Zeit kein Fleiß
Auf neustem Stand zu sein ist eine Kunst die nicht jeder perfektioniert [Win10Pro(64); PB6.03 LTS]. :allright:
Benutzeravatar
Pelagio
Beiträge: 423
Registriert: 11.11.2004 17:52
Computerausstattung: Intel Core i3-4170 CPU 3,70 GHz
8,00 GB Arbeitsspeicher
WIN 10 Pro 64 Bit Betriebssystem
Wohnort: Bremen

Re: ODBC / SQLConfigDataSource schlägt fehl mit PB 5.61

Beitrag von Pelagio »

Und wieder steh ich wie der Ochs vorm Berg und weiß nicht weiter. :angry:

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. :praise:
Ohne Zeit kein Fleiß
Auf neustem Stand zu sein ist eine Kunst die nicht jeder perfektioniert [Win10Pro(64); PB6.03 LTS]. :allright:
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: ODBC / SQLConfigDataSource schlägt fehl mit PB 5.61

Beitrag 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
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Pelagio
Beiträge: 423
Registriert: 11.11.2004 17:52
Computerausstattung: Intel Core i3-4170 CPU 3,70 GHz
8,00 GB Arbeitsspeicher
WIN 10 Pro 64 Bit Betriebssystem
Wohnort: Bremen

Re: ODBC / SQLConfigDataSource schlägt fehl mit PB 5.61

Beitrag 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.
Ohne Zeit kein Fleiß
Auf neustem Stand zu sein ist eine Kunst die nicht jeder perfektioniert [Win10Pro(64); PB6.03 LTS]. :allright:
Benutzeravatar
Rings
Beiträge: 971
Registriert: 29.08.2004 08:48

Re: ODBC / SQLConfigDataSource schlägt fehl mit PB 5.61

Beitrag 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........
Rings hat geschrieben:ziert sich nich beim zitieren
Antworten