Autor Thema: Import aus csv - maximale Zeilen  (Gelesen 3099 mal)

Offline Kaljamam

  • Aktives Mitglied
  • ***
  • Beiträge: 234
  • Geschlecht: Männlich
Import aus csv - maximale Zeilen
« am: 15.07.14 - 12:45:50 »
Hallo zusammen,

ich habe eine Datei(csv), die ich über einen Import Agent in meine DB importieren kann. Das hat bisher immer gut geklappt. Die Datei hat nun leider ca. 116000 Zeilen. Das scheint er wohl nicht mehr zu packen.

Gibt es da irgendeinen Trick, wie man die csv doch importiert bekommt?  :-:
Jemand eine Idee oder ist hier einfach die Grenze von einer Notes DB erreicht?

Beste Grüße
Christian

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Import aus csv - maximale Zeilen
« Antwort #1 am: 15.07.14 - 12:48:09 »
Hallo,

Zitat
Das scheint er wohl nicht mehr zu packen.
Koenntest Du dieses hier noch etwas naeher erlaeutern?
(Fehlermeldungen, usw.)

Ohne genau zu wissen, was der Agent macht, wird alles Weitere wahrscheinlich nur ein
gestochere im Neben sein.


Andreas

Offline Kaljamam

  • Aktives Mitglied
  • ***
  • Beiträge: 234
  • Geschlecht: Männlich
Re: Import aus csv - maximale Zeilen
« Antwort #2 am: 15.07.14 - 12:54:02 »
Hallo,

bis jetzt hat dieser Agent immer funktioniert. Nehm ich die gleiche csv mit 15.000 Zeilen liest der Agent alles ein. 116000 scheint zu viel zu sein?

Sub Initialize
   On Error Goto err_ImportExcel
   
   Dim tmpFic As Variant
   Dim sFic As String
   
   
   Dim xlsApp As Variant      
   Dim xlsWorkBook As Variant   
   Dim xlsSheet As Variant      
   Dim xlsLigne As Integer      
   Dim xlsColonne As Integer   
   
   
   tmpFic = OuvreXLS()
   sFic = tmpFic(0)
   
   
   Dim sLig() As String      
   Dim sCol() As String      
   
   
   Dim iCompteur As Integer
   Dim iCompteurLigne As Integer
   Dim iCompteurColonne As Integer
   
   
   Dim vVF As Variant
   
   Print "Connexion à Excel..."
   Set xlsApp = CreateObject("Excel.Application")   
   Print "Ouverture du fichier : " & sFic
   xlsApp.Workbooks.Open sFic               
   Set xlsWorkBook = xlsApp.ActiveWorkbook         
   Set xlsSheet = xlsWorkBook.ActiveSheet         
   xlsApp.Visible = False                  
   xlsSheet.Cells.SpecialCells(11).Activate
   xlsLigne = xlsApp.ActiveWindow.ActiveCell.Row   
   xlsColonne = xlsApp.ActiveWindow.ActiveCell.Column
   
   
   xlsSheet.Cells(1, 1).Select
   For iCompteurColonne = 1 To xlsColonne
      If iCompteurColonne = 1 Then
         Redim sCol(iCompteurColonne) As String
         sCol(iCompteurColonne) = xlsSheet.Cells(1, iCompteurColonne).Value
      Else
         Redim Preserve sCol(iCompteurColonne) As String
         sCol(iCompteurColonne) = xlsSheet.Cells(1, iCompteurColonne).Value
      End If
   Next
   
   
   For iCompteurLigne = 2 To xlsLigne
      xlsSheet.Cells(iCompteurLigne, 1).select
      For iCompteurColonne = 1 To xlsColonne
         If iCompteurColonne = 1 Then
            Redim sLig(iCompteurColonne) As String
            sLig(iCompteurColonne) = xlsSheet.Cells(iCompteurLigne, iCompteurColonne).Value
         Else
            Redim Preserve sLig(iCompteurColonne) As String
            sLig(iCompteurColonne) = xlsSheet.Cells(iCompteurLigne, iCompteurColonne).Value
         End If
      Next
      
      vVF = False
      For iCompteur = 1 To Ubound(sLig)
         If sLig(iCompteur) <> "" Then
            vVF = True
            Exit For
         Else
            vVF = False
         End If
      Next
      Print "Traitement de la ligne " & iCompteurLigne & " sur " & xlsLigne
      If vVF = True Then
         Call CreationDocument(sLig, xlsColonne, sCol())
      End If
   Next
   
   Print "Déconnexion d'Excel..."
   xlsWorkBook.Close False            
   xlsApp.Quit                        
   Set xlsApp = Nothing                  
   Print "Fin de l'importation du fichier Excel"
   Exit Sub
   
err_ImportExcel:
   Resume Next
End Sub

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Import aus csv - maximale Zeilen
« Antwort #3 am: 15.07.14 - 13:03:55 »
Du baust da ein Array mit 115000 Elementen auf, das fliegt Dir um die Ohren.

Sinngemäß so wird das aber gehen (Liste statt Array):

Dim sCol List As String
...

Kein Redim!!

sCol (iCompteurColonne) = xlsSheet.Cells(1, iCompteurColonne).Value

Das ist dann nur noch durch den Arbeitsspeicher begrenzt

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Import aus csv - maximale Zeilen
« Antwort #4 am: 15.07.14 - 13:05:14 »
Na ja... wer braucht schon ein error- Handling... total überbewertet... Ich würde aber mal schwer darauf tippen, dass es daran liegt, dass Du Deine Zähler alle als Integer definiert hast... Kuck mal in der Hilfe nach, welche Werte ein Integer annehmen kann... ach ja: Und natürlich die natürliche Begrenzung eines Arrays auf max. 64000 Werte, wie Peter geschrieben hat...
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline Kaljamam

  • Aktives Mitglied
  • ***
  • Beiträge: 234
  • Geschlecht: Männlich
Re: Import aus csv - maximale Zeilen
« Antwort #5 am: 16.07.14 - 07:42:17 »
Danke für die Antworten. As Long statt As String. Damit komm ich schon mal von 32767 auf 2147483647. Und die Array Begrenzung, da wie empfohlen List as String. Vielen Dank!

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz