Seite 1 von 1

Problem beim Anlegen einer DSN

Verfasst: 16.03.2016 10:45
von Pelagio
Ich habe Probleme eine SQL Datenbank zu öffnen, genauer gesagt eine DSN zu erstellen.
Es kommt immer die Fehlermeldung: '1 ODBC: SQL Success = k'.
Allerdings hatte ich mit diesem Source schon eine Exe unter PB 5.30 erstellt und diese Exe funktioniert.
Ich wollte jetzt kleinere Änderungen vornehmen und bekomme unter PB 5.42 die oben genannte Fehlermeldung.
Ich dachte erst das Problem liege am Computer, da ich einen neuen gestellt bekommen habe (Umrüstung von XP auf Win7)
und in diesem Zusammenghang auch meine lokalen Adminrechte verloren habe.
Aber sollte das Problem wirklich daran liegen, so dürfte die Exe-Datei auch nicht funktionieren.
Ich gehe deshalb davon aus das PB5.42 das Problem verursacht.
Im Augenblick bin ich :bluescreen: >_< und brauche Eure Hilfe :praise:

Re: Problem beim Anlegen einer DSN

Verfasst: 16.03.2016 10:48
von ts-soft
Nutzt Du vielleicht 64-Bit? Die meisten ODBC-Treiber liegen nur in einer 32-Bit Version vor und lassen sich demnach nur
mit der 32-Bit Version von PureBasic öffnen!

Re: Problem beim Anlegen einer DSN

Verfasst: 16.03.2016 11:04
von Pelagio
Hallo ts-soft,

hätte ich vorab schon sagen sollen, habe ich nicht daran gedacht, Tschuldigung.
Ich benutze weiterhin 32-Bit.

Re: Problem beim Anlegen einer DSN

Verfasst: 16.03.2016 14:03
von Pelagio
Ich habe hier und da etwas ausprobiert und dabei herausgefunden das die Fehlermeldung doch Umpfangreicher ist.
Sie Besagt: 'ODBC: SQL Success = Komponente wurde in der Registrierung nicht gefunden.'
Ich habe auch versucht ein weiteres Programm zu aktivieren das mit ODBC eine Exceltabelle ausliest.
Bei der alten Exe klappt es wenn ich aber eine neue Exe erstelle geht es nich mehr und es kommt der genannte Fehler.
Als Beispiel:

Code: Alles auswählen

#Treiber  = "Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)"
Enumeration
	#Database
	#ADD_DSN             ; Add Data source
	#CONFIG_DSN          ; Configure (edit) Data source
	#REMOVE_DSN          ; Remove Data source
	#ADD_SYS_DSN         ; Add a system DSN 
	#CONFIG_SYS_DSN      ; Configure a system DSN 
	#REMOVE_SYS_DSN      ; Remove a system DSN 
	#REMOVE_DEFAULT_DSN  ; Remove the default DSN
EndEnumeration

Define.c mNKS = 2
Define.s mCON, mDSN = "PBExcel_DSN"

Procedure.a DSN_Create(vFiles.s)
	Shared mDSN, mCON
	Protected pResult.a

	mDSN = ReplaceString(GetFilePart(vFiles),".","_")
	mDSN = Left(ReplaceString(mDSN," ","-"), 25)
	mCON = "Server=SomeServer; Description=Description For Purebasic Excel-ODBC;DSN=" + mDSN + ";DBQ=" + vFiles + ";UID=;PWD=;"
	If SQLConfigDataSource_(#Database, #ADD_DSN, #Treiber, mCON)
		pResult = #True
	EndIf
	ProcedureReturn pResult
EndProcedure 
Ansonsten bin ich noch keinen Schritt weiter :coderselixir:.

Re: Problem beim Anlegen einer DSN

Verfasst: 16.03.2016 14:26
von Kiffi
ich benutze das hier (von srod?) ohne Probleme:

Code: Alles auswählen

#ODBC_ADD_DSN    = 1
#ODBC_CONFIG_DSN = 2
#ODBC_REMOVE_DSN = 3

Procedure.i AddConnection(driver$, connectString$) 
  Protected result, base, *mem.CHARACTER, *ptr.CHARACTER, len, i
  If driver$ And connectString$
    len = Len(connectString$)
    base = AllocateMemory((len + 2)<<(SizeOf(CHARACTER)-1))
    If base
      *mem = base
      *ptr = @connectString$
      ;Switch all ; for nulls.
      For i = 1 To len
        If *ptr\c <> ';'
          *mem\c = *ptr\c
        EndIf
        *mem + SizeOf(CHARACTER)
        *ptr + SizeOf(CHARACTER)
      Next
      result = SQLConfigDataSource_(0, #ODBC_ADD_DSN, driver$, base) 
      FreeMemory(base)
      If result 
        ProcedureReturn 1 
      EndIf 
    EndIf
  EndIf
EndProcedure 
Procedure.i RemoveConnection(Driver.s,DSN.s) 
  Protected Result
  Result=SQLConfigDataSource_(0,#ODBC_REMOVE_DSN,Driver,"DSN="+DSN) 
  If Result 
    ProcedureReturn 1 
  EndIf 
EndProcedure 
Grüße ... Peter