ADO Excel XLSx create [erledigt]

Nutzung, Komponenten, .NET

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

ADO Excel XLSx create [erledigt]

Beitrag von AUGE_OHR »

hi,

wie man mit ADO ein XLSx , ohne Excel, lesen kann hab ich hier beschrieben viewtopic.php?f=16&t=11657&p=134652

nun wollte ich den umgekehrten Weg gehen und mit ADO ein XLSx erzeugen.
ich habe versuch mit CREATE TABLE ein XLSx zu erzeugen aber das funktioniert "so" nicht.

dann fand ich heraus das ich erst eine "Table" im "Catalog" erzeugen muss ... ähnlich wie bei PostgreSQL

Code: Alles auswählen

   oConnect := CreateObject( "ADODB.Connection" )
   oCatalog := CreateObject( "ADOX.Catalog" )
   oTable   := CreateObject( "ADOX.Table" )
   FOR ii := 1 TO iMax
      cField := aStructure[ ii ] [ DBS_NAME ]
      cType  := aStructure[ ii ] [ DBS_TYPE ]

      oColumn  := CreateObject( "ADOX.Column")
      oColumn:Name := cField

      DO CASE
         CASE cType = "C" ; oColumn:Type := adVarWChar
         CASE cType = "M" ; oColumn:Type := adLongVarWChar
         CASE cType = "N" ; oColumn:Type := adDouble
         CASE cType = "D" ; oColumn:Type := adDate
         CASE cType = "L" ; oColumn:Type := adBoolean
      ENDCASE

      oTable:Columns:Append(oColumn)
   NEXT
   oCatalog:Tables:Append(oTable)
jetzt konnte ich meine INSET INTO absetzten und bekam ein XLSx was Excel öffnen kann :D
CREXLSX.ZIP
(11.21 KiB) 266-mal heruntergeladen
soweit so gut.

nun habe ich versucht mit ADO, wie in der Wissensbasis beschrieben, die XLSx wieder zu öffnen und bekomme das
AdoXLSx.jpg
AdoXLSx.jpg (27.74 KiB) 4624 mal betrachtet
mir ist nicht klar was damit gemeint ist :?

ich habe die XLSx in Excel geöffnet, was angehängt und abgespeichert.
bei der XLSx Datei bekomme ich mit ADO trotzdem die selbe Meldung ...

wer hat eine Idee :idea:

ADO : https://www.microsoft.com/de-de/downloa ... x?id=13255
wer dann die Meldung bekommt "missing VCOMP1xx.DLL" braucht das
https://www.microsoft.com/de-DE/downloa ... x?id=48145

p.s. einiges ist anders in dem Code wie MsgInfo() -> MsgBox() oder DBORDERINFO( DBOI_KEYCOUNT )
weil aber activeX ist der Code zu 99% kompatible zu Xbase++
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: ADO Excel XLSx create [erledigt]

Beitrag von AUGE_OHR »

hi,

gelöst :D

statt

Code: Alles auswählen

      cSql := "INSERT INTO [Sheet1$] "+ cSelect + "VALUES ( "
use

Code: Alles auswählen

      cSql := "INSERT INTO [Sheet1] "+ cSelect + "VALUES ( "
es war das "$" Zeichen was das Problem machte
Anmerkung : das "$" Zeichen wurde beim lesen verwendet
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: ADO Excel XLSx create [erledigt]

Beitrag von AUGE_OHR »

hi,

ich habe ADO "INSERT INTO" vs. RecordSet um ein XLSx zu erstellen getest

DBF 3 MB, 16 Fields, 220134 Records
INSERT INTO -> 160 Sec.
RecordSet -> 40 Sec
libxlsxwriter.dll -> 20 Sec
das die reine "C" DLL am schnellsten ist wundert mich nicht.
das INSERT INTO aber so viel langsamer ist als RecordSet hab ich nicht erwartet.

hm ... kann man PostgreSQL per ADO betreiben ... :-"
gruss by OHR
Jimmy
Antworten