in einem Programm erstelle ich eine DSN für eine Exceldatei (2003) die ich dann auslese, was auch bis dato gut Funktionierte.
Code: Alles auswählen
#DLL = "ODBCCP32.DLL"
#Treiber = "Microsoft Excel Driver (*.xls)
#Function = "SQLConfigDataSource"
Enumeration
#Database
#ADD_DSN ; Add Data source
#CONFIG_DSN ; Configure (edit) Data source
#REMOVE_DSN ; Remove Data source
EndEnumeration
Procedure.a DSN_Create(vFiles.s)
Protected n.i, pAttributes.s, *pMemory, pResult.a
Protected pTreiber.s = #Treiber
If OpenLibrary(1, #DLL)
pAttributes = "Server=SomeServer; Description=Description For Purebasic Excel-ODBC;DSN=PBExcel_DSN;DBQ=" + vFiles + ";UID=;PWD=;"
*pMemory = AllocateMemory(Len(pAttributes))
CopyMemory(@pAttributes,*pMemory,Len(pAttributes))
For n=1 To Len(pAttributes)
If PeekB(*pMemory+n-1)=Asc(";"): PokeB(*pMemory+n-1, #False): EndIf
Next n
If CallFunction(1, #Function, #False, #ADD_DSN, @pTreiber, *pMemory)
pResult = #True
SQLConfigDataSource_(0, #ADD_DSN, pTreiber, *pMemory)
EndIf
FreeMemory(*pMemory): CloseLibrary(1)
Else
Debug "ERROR"
EndIf
ProcedureReturn pResult
EndProcedure
DSN_Create(Test.xls) ; DSN wird erstellt und ich kann die Daten der Exceldatei lesenLeider kann ich seitdem die Daten nicht mehr auslesen. Ich habe das Problem bis dahin Analysiert, das es nicht funktioniert da keine DSN erstellt wird.
Code: Alles auswählen
#DLL = "ODBCCP32.DLL"
#Treiber = "Microsoft Excel Driver (*.xls,*.xlsx,*.xlsm,*.xlsb)" ;(*.xls)->Funktioniert auch nicht
#Function = "SQLConfigDataSource"
Enumeration
#Database
#ADD_DSN ; Add Data source
#CONFIG_DSN ; Configure (edit) Data source
#REMOVE_DSN ; Remove Data source
EndEnumeration
Procedure.a DSN_Create(vFiles.s)
Protected n.i, pAttributes.s, *pMemory, pResult.a
Protected pTreiber.s = #Treiber
If OpenLibrary(1, #DLL)
pAttributes = "Server=SomeServer; Description=Description For Purebasic Excel-ODBC;DSN=PBExcel_DSN;DBQ=" + vFiles + ";UID=;PWD=;"
*pMemory = AllocateMemory(Len(pAttributes))
CopyMemory(@pAttributes,*pMemory,Len(pAttributes))
For n=1 To Len(pAttributes)
If PeekB(*pMemory+n-1)=Asc(";"): PokeB(*pMemory+n-1, #False): EndIf
Next n
If CallFunction(1, #Function, #False, #ADD_DSN, @pTreiber, *pMemory)
pResult = #True
SQLConfigDataSource_(0, #ADD_DSN, pTreiber, *pMemory)
EndIf
FreeMemory(*pMemory): CloseLibrary(1)
Else
Debug "ERROR"
EndIf
ProcedureReturn pResult
EndProcedure
DSN_Create(Test.xlsx) ; CallFunction Rückgabewert = 0