Excel 10 über ODBC Auslesen
Verfasst: 23.06.2013 14:01
Hallo,
in einem Programm erstelle ich eine DSN für eine Exceldatei (2003) die ich dann auslese, was auch bis dato gut Funktionierte. Seid einiger Zeit habe ich aber eine neuere Version von Excel (2010) und habe diesbezüglich meine Exceldatei (*.xls) in das neue Format (*.xlsx) geändert.
Leider kann ich seitdem die Daten nicht mehr auslesen. Ich habe das Problem bis dahin Analysiert, das es nicht funktioniert da keine DSN erstellt wird. Vielleicht kann mir jemand diesbezüglich erklären wieso es nicht mehr funktioniert. 
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