Domino 9 und frühere Versionen > ND6: Entwicklung

Per LS CSV-Datei importieren

<< < (3/10) > >>

lotus blue:
Hi Leute,

habe mir mal Codes angeschaut und mit nem Tipp von Thomas Schulte (danke nochmals :-*) einfach mal rumprobiert.
Angemerkt sei, dass LS derzeit bei mir "noch" nicht richtig angekommen ist.
Der Grund-Kurs schafft hoffentlich Abhilfe.

Dennoch hoffe ich auf Hilfe, wo ich was komplett falsch codiert hab.

Es soll eine csv-Datei mit dem Namen test1.csv vom Laufwerk C: importiert werden. Die Datei enthält beliebig viele Infos über Nutzer.
Die Felder im csv sowie in der Maske "Main" lauten: sn, gn und l
Für jede Zeile soll ein neues Dok angelegt werden.

Hier der Code:
Sub Initialize
   Dim session As New notessession
   Dim db As notesdatabase
   Dim doc As notesdocument
   Dim fileNum As Integer, cells As Integer, k As Long
   Dim fileName As String
   Dim InputStr As String, delimiter As String
   Dim FieldArray As Variant
   
   If resp% = 6 Then     
      fileNum% = Freefile()
             fileName$ = "C:\test1.csv"
     
      delimiter = ","

      'Hier habe ich noch keine Ahnung
      cells = 14 + 1
      k = 0
      
      Open fileName$ For Input As fileNum%
      Do While Not Eof(fileNum%)
       
      Line Input #1,  InputStr$
         
              Print Cstr(k) + " Alle Nutzer wurden angelegt."
      Loop
      Close fileNum%
   Else
      Exit Sub
   End If
   
End Sub

Function CreateDocument(FieldArray As Variant) As Integer
   Dim session As New notessession
   Dim db As notesdatabase
   Set db = session.currentdatabase
   Dim doc As New notesdocument(db)
   
   doc.Form = "Main"
   doc.sn = FieldArray(1)
   doc.gn = FieldArray(2)
   doc.l = FieldArray(3)
   
   Call doc.save(1,0)
   
End Function

Thomas Schulte:
Hier der Code:
Sub Initialize
   Dim session As New notessession
   Dim db As notesdatabase
   Dim doc As notesdocument
   Dim fileNum As Integer, cells As Integer, k As Long
   Dim fileName As String
   Dim InputStr As String, delimiter As String
   Dim FieldArray As Variant

Hier macht das Sinn und nicht da unten in der Createdocument Routine

   Set db = session.currentdatabase
   


Du erwartest hier eine Antwort auf eine Frage, doch wo ist die Frage???
   If resp% = 6 Then     

      fileNum% = Freefile()
             fileName$ = "C:\test1.csv"
     
      delimiter = ","

      'Hier habe ich noch keine Ahnung

ich auch nicht. cells verwendest du gar nicht und k nur für die Print Ausgabe, die in einem Background Agent nichts verloren hat. Also ersatzlos streichen

      cells = 14 + 1
      k = 0
      
      Open fileName$ For Input As fileNum%
      Do While Not Eof(fileNum%)
       
      Line Input #1,  InputStr$

Hier fehlt was Schließlich muss du dein FieldArray ja auch irgendwie füllen
         FieldArray = Split(InputStr$Text$,delimiter)
Und das hier fehlt auch Irgendwie solltest du deiner Createdocument Version ja schließlich auch mitteilen was du von ihr willst.
         call CreateDocument(db, FieldArray)
Und außerdem ergänzt du die Übergabe der db in Createdocument



Kann man machen, sollte man aber bei background agents nicht tun. denn erstens werden die langsamer und zweitens müllt diese Ausgabe dann das Logfile vom Server zu.
              Print Cstr(k) + " Alle Nutzer wurden angelegt."

      Loop
      Close fileNum%
   Else
      Exit Sub
   End If
   
End Sub

Eine Function ist nur dann ein Funktion wenn sie auch einen Wert zurückgibt. Das tut deine
Function CreateDocument(FieldArray As Variant) As Integer
nicht, also ist sie eine
Sub CreateDocument(db as notesdatabase, FieldArray As Variant)
und wenn wir schon dabei sind, das ist hier nicht notwendigerweise performance fördernd
Entweder deklarierst du das als Global und initialisierst die DB nur einmal.
oder du löscht das hier und übergibst die db an die Sub
   Dim session As New notessession
   Dim db As notesdatabase
   Set db = session.currentdatabase

   Dim doc As New notesdocument(db)
   
   doc.Form = "Main"
   doc.sn = FieldArray(1)
   doc.gn = FieldArray(2)
   doc.l = FieldArray(3)
   
   Call doc.save(1,0)

und logischerweise gibt es hier auch keine
End Function
sondern eine
End Sub

lotus blue:
Danke. Werds am Montag versuchen.


Mann, ich muss noch so lange auf den Kurs warten :'(.
ABer vielleciht kann ich mich danach mal revanchieren  ;D (nur a Späßle)

Danke. Nun nerv ich Euch nicht mehr und wünsch ein schönes WE.

lotus blue:
Hallöchen liebe Forumgemeinde.

Import der Datei tut, aber mit den zu füllenden Felder habe ich noch Probleme.
Iregendwie hab ich noch wo einen Fehler. Momentan übernimmt er alles bis auf die jeweils Ersten Werte (a).

Die CSV ist wie folgt aufgebaut:
a,b,c,d,
Mustermann,Berlin,1234,Dirk,
Test,Bern,1234,Michael,
usw.
zur Info (a=name,b=Standort,c=Durchwahl, d=Vorname)

und hier der Code:
Sub Initialize
   Dim session As New notessession
   Dim db As notesdatabase
   Dim doc As notesdocument
   Dim fileNum As Integer, cells As Integer, k As Long
   Dim fileName As String
   Dim InputStr As String, delimiter As String
   Dim FieldArray As Variant
   Set db = session.currentdatabase
   
   fileNum% = Freefile()
   
       ' Dateipfad
   fileName$ = "C:\test1.csv"
   
 ' Trennzeichen
   delimiter = ","
   
   Open fileName$ For Input As fileNum%
   Do While Not Eof(fileNum%)
      
  ' Zeile für Zeile einlesen
      Line Input #1,  InputStr$       
      FieldArray = Split(InputStr$,delimiter)
      Call CreateDocument(db, FieldArray)
      
   Loop
   Close fileNum%
   Exit Sub
   
End Sub

Sub CreateDocument(db As notesdatabase, FieldArray As Variant)
   Dim doc As New notesdocument(db)
   
   doc.Form = "Memo"
   doc.a = FieldArray(1)
   doc.b = FieldArray(2)
   doc.c = FieldArray(3)
   doc.d = FieldArray(4)
   
   
   Call doc.save(1,0)
   
End Sub

DAU-in:
ääää

wenn du die Basis nicht explizit auf 1 gesetzt hast, beginnt der Array bei 0 zu zählen.
array(1) ist dann schon der zweite Wert.


grüsse

Dau-in

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln