Achtung Anfänger - Versuch Import Script

  • Hallo an alle,


    ich habe ein kleines Problem. Ich habe in einer Datenbank eine Importansicht in die ich Datensätze aus einer csv Datei einlesen will.


    Die Datei die ich einlesen ist folgendermaßen aufgebaut.


    "Rechnername","Softwarebezeichnung"


    Also ungefähr so:


    "Rechner1","OfficeXP"
    "Rechner1","Acrobat Reader"
    "Rechner1","LotusNotes"
    "Rechner2","Office2000"
    "Rechner2","irgendwas"
    usw


    Sind auf einem Rechner also 10 verschiedene Programme installiert, würde der Rechner 10 Zeilen in meiner CSV Datei einnehmen. Immer zuerst die Rechnerbezeichnung dann die Softwarebzeichnung.


    Das ganz normale einlesen habe ich auch schon hinbekommen. Ich benötige die Daten allerdings in einer anderen Form und zwar so:


    Rechner1, OfficeXP, Acrobat Reader, LotusNotes,
    Rechner2, Office2000, Irgendwas,


    Also immer die Bezeichung vom Rechner und dann die entsprechende Software durch ein Komma getrennt dahinter.


    Mein Script sieht momentan so aus:


    Sub Initialize
    Dim ws As New NotesUIWorkspace
    Dim Session As New NotesSession
    Dim db As NotesDatabase
    Dim View As NotesView
    Dim doc As NotesDocument
    Dim suchdoc As NotesDocument
    Dim Profildoc As NotesDocument
    Dim collection As NotesDocumentCollection
    Dim afile As String
    Dim txt As String
    Set db =Session.CurrentDatabase
    Set view = db.GetView("Import versuch")

    aFile= Inputbox("Bitte geben Sie den Pfad ein")

    fileNum% = Freefile() '1. Datei einlesen
    Open aFile For Input As fileNum%
    Line Input #fileNum%,vtxt$ 'Zeile lesen
    txt = ""
    Do While Not Eof(fileNum%)
    If Not Eof(FileNum%) Then
    Set doc=db.CreateDocument 'Dokument generieren
    doc.Form="import"

    For n01% = 1 To Len(vtxt$)
    If Mid(vtxt$,n01%,1) <> Chr(34) Then
    txt = txt + Mid(vtxt$,n01%,1)
    End If
    Next
    software = ""
    varfw = ""
    trenner% = Instr(txt,",")
    doc.fwnummer = Left(txt,trenner% - 1)
    varfw = Left(txt,trenner% - 1)
    software = Strright(txt, ",")

    Do While abfrage = 1
    Line Input #fileNum%,vtxt$ 'Zeile lesen

    txt = ""
    For n01% = 1 To Len(vtxt$)
    If Mid(vtxt$,n01%,1) <> Chr(34) Then
    txt = txt + Mid(vtxt$,n01%,1)
    End If
    Next
    If Instr(txt, varfw) Then
    software= software + Strright(txt, ",")
    Else
    abfrage = 2
    vtxt$ = ""
    End If
    Loop

    doc.software2 = software

    Call doc.save(True, False)
    End If

    Loop
    End Sub



    Leider erscheint folgende Fehlermeldung


    Notes error: Feld ist zu groß (32k), oder die Spalten oder Auswahlformeln der Ansicht sind zu groß.



    Kann mir jemand von euch helfen? Wie gesagt ich bin noch Anfänger....


    Grüße


    deluxer

  • Hast du mal den Debugger laufen lassen, damit du erstmal weißt an welcher Stelle der Fehler auftritt? Versuch das mal bitte, und dann stell dein Ergbniss hier rein, damit man mal gucken was los sein kann. :)

  • Er bleibt bei


    Call doc.save(True, False) hängen (laut Debugger). Allerdings nicht beim ersten Durchlauf. Ich habe ca. 35000 Zeilen in der CSV Datei. Importiere ich die Datensätze normal dann habe ich danach auch ca. 35000 Datensätze in Notes.


    Nach meinem "sortierten" Importversuch werden ca. 1800 Datensätze importiert. Das Problem ist nur das ich jetzt gar nicht mehr in die Datenbank komme um zu schauen ob die wenigstens schon mal richtig sortiert sind. Ob ich also auf dem richtigen Weg bin. Die Fehlermeldung lautet, egal was ich mit der DB machen will:


    Notes error: Feld ist zu groß (32k), oder die Spalten oder Auswahlformeln der Ansicht sind zu groß.


    Ich kann nach meinem Importversuch die DB überhaupt nicht mehr öffnen....


    :-?

  • Das Problem ist ganz einfach das TextFelder eine Größenbeschränkung haben und du diese beim Schreiben der Daten überschreitest.
    Sobald du dann versuchst das Dokument zu speichern bekommst du den Fehler.
    Also entweder die Werte in unterschiedliche Felder oder sogar in unterschiedliche Dokumente schreiben.
    Was spricht dagegen für jeden Rechner ein eigenes Dokument zu erzeugen ?

  • Hi,


    hast Du es mal mit einer Formatdatei (*.col) probiert?


    Die sollte z.B. Rechnerimport.col heißen und in etwa so aussehen


    Code
    rechnername: UNTIL ",";
    software: UNTIL


    In Deiner DB brauchst Du dann noch eine Maske mit den beiden Feldern "rechnername" vom Type Text und "software" vom Typ Text (Mehrfachwerte).


    Dann kannst Du über "Datei/Importieren/Tabular Text" mit Hilfe der oben genannten Datei die Datensätze importieren.


    Das Ganze geht i.A. rasend schnell und klappt ganz prima ohne Programmierung.

    Für jedes Problem gibt es eine einfache Lösung, die es noch schlimmer macht.

  • taurec: och ne stimmt ich überschreibe die Werte ja immer wieder, ne so war das auch nicht gedacht da hast du schon recht ich wollte eigentlich für jeden Rechner einen neuen Datensatz.


    Muss mal überlegen wie ich mein Script umschreiben muss.


    Als Lösung soll es dann so aussehen


    Rechner1, Software, Software, Software
    Rechner2, Software, Software, Software


    also so wie du es gesagt hast...


    Danke,


    @moderator


    Vielen Dank für den Tip werde ich auch mal ausprobieren aber soweit ich weiß bekomme ich die Daten nur in der Form geliefert wie ich sie anfangs beschrieben hatte....


    trotzdem danke

  • habs noch nicht ganz kapiert ...


    du hast


    rechner1,software1
    rechner1,software2
    rechner1,software3
    rechner2,software1
    rechner2,software2
    rechner2,software3


    und du willst


    rechner1, software1, software2, software3
    rechner2, software1, software2, software3


    also nix in der notesdb abspeichern oder was?


    bei trennzeichen empfehle ich immer wieder beim import:
    macro$ = |@explode("| + inputstring$ + |";",")|
    variant_variable = evaluate(macro$)


    dann kannst du gemütlich mit
    feld1 = variant_variable(0)
    feld2 = variant_variable(1)
    die liste einlesen


    und über nen einfachen gruppenwechsel sollte doch dann das zuweisen nach rechnername kein problem sein oder?

    bunt ist das dasein und granatenstark. volle kanne hoshi's!


    IBM Certified Advanced System Administrator (R5, D6, D7)
    IBM Certified Advanced Application Developer (R5, D6, D7, D8)