Felder in datenbank löschen?

  • Hallo, ich habe mal versucht durch einen Import von Excel nach notes Dokumente zu erzeugen.
    Das habe ich mehrmals hintereinander gemacht, mit mehr oder minder Erfolg.
    Jetzt stehen aber in der Datenbank von Lotus Notes
    einige Felder, die man dann auch in Ansichten anziehen kann, die jedoch keinen Wert enthalten und die ich gerne gelöscht hätte.
    Aber diese Felder stehen in keiner Maske Zumal einige Feldnamen
    doppelt erscheinen.


    Wie bekomme ich die Datenbank von diesen Feldern wieder sauber?
    Wo muss ich da rein, um diese Felder einzeln zu löschen?

  • hmmm, da mach ich wohl noch etwas falsch, ich habe eine Maske
    und eine Ansicht.


    In der Maske gibt es ein Feld "Eingangsdatum"
    in der Ansicht ebenso.


    Nach mehrmaligen Versuchen aus excel etwas einzulesen stehen
    nun in der Feldliste


    4 Felder in der Feldliste.
    Feld 1 : Eingangs- Datum
    Feld 2 : Eingangsdatum
    Feld 3 : Eingangsdatum
    Feld 4 : Eingangsdatum


    in der maske unter den Dokumenteigenschaften sind nach dem Import Zwei Felder vorhanden:
    Eingangsdatum (Datentyp Textliste 4Byte) Inhalt ""
    Eingangsdatum (Datentyp Textliste 14 Byte) Inhalt "20.09.2001"


    Aber in meiner Maske möchte ich ein Datumsfeld anzuzeigen. Dort steht kein Inhalt.
    In der Ansicht hab ich alle vier Felder ausprobiert, doch keines der vier Felder zeigt mir irgendwelche Daten in der Ansicht.
    Hmmm, bin da ganz ratlos
    Auch nach einem Komprimieren der Datenbank die ich lokal liegen habe, verschwinden die unnützen Felder nicht aus der feldliste

    • Offizieller Beitrag

    arbeitest du mit Script und nutzt CreateItem?, dann wird immer ein neues Item erzeugt.


    Du müsstest dann vorher mit HasItem prüfen, ob es dieses Feld gibt und dann mit CreateItem oder GetFirstItem arbeiten.


    Alternativ kannst du auch direkt auf die Felder zugreifen, ohne über das Item zu gehen (z.B. doc.Feld1 = ...)


    Gruß
    Dirk

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein

    • Offizieller Beitrag

    lass doch einen Agenten über alle Dokumente laufen und lass dir zu der entsprechenden Maske die vorhandenen Felder auflisten. Am besten in eine Txt-Datei schreiben.


    Danach gehst du die Liste durch und prüfst, welche Felder du in welcher Maske noch benötigst.


    Jetzt noch einen Agenten schreiben, der Abhängig von der Form prüft, welche Felder vorkommen dürfen (Schleife über alle Items) und nicht benötigte Felder mit item.Remove löschen.


    Gruß
    Dirk

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein

  • Ich probiere eine Excel Importroutine aus dem netz..
    das hat eigentlich erstmal auf den ersten Blick gut funktioniert.
    Wie immer steckt die Tücke im Detail...die Routine sieht so aus:


    Sub Click(Source As Button)
    %REM
    This subroutine imports data from an Excel Sheet.
    Created by Dr. Nadir Patir
    Istanbul Pazarlama A.S., Istanbul Turkey
    E-Mail: nadir@istpaz.com.tr
    This routine is used in TeamWork CRM software of author.


    EXCEL SHEET FORMAT:


    Row 1 of Excel Sheet must contain Field Names to be imported.
    Column 1 of Excel Sheet must contain Form name.
    (You can import data to different forms based on form name in column 1.)


    Each row will be imported to a document.
    %END REM

    Dim ws As New NotesUIWorkspace
    Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim doc As NotesDocument
    Dim item As NotesItem
    Dim App As Variant, Wbook As Variant, WSheet As Variant
    Dim v As Variant
    Dim row As Double
    Dim form As String, fileXL As String, calcf As String, t As String
    Dim title(255) As String, x(1) As String
    Dim k As Integer, cols As Integer
    Dim cnt As Long

    Set db = session.CurrentDatabase

    Set App = CreateObject("Excel.Application")
    App.Visible = False

    'Choose Excel file
    v=ws.OpenFileDialog(False,"Please Select Excel File", "*.xls", "")
    If Isempty(v) Then Exit Sub
    fileXL=v(0)
    cnt=0

    App.Workbooks.Open fileXL
    Set Wbook = App.ActiveWorkbook
    Set WSheet = Wbook.ActiveSheet

    If Wsheet.Cells(1, 1).Value<>"Form" Then
    Messagebox "First Column of Excel sheet must contain Form names" + Wsheet.Cells(1, 1).Value + Form
    Goto fin
    End If

    'Recalc question
    x(0)="Yes"
    x(1)="No"
    calcf= ws.Prompt( PROMPT_OKCANCELLIST, "CALC", "Calculate fields on form during document Import?","No", x )
    If calcf="" Then Exit Sub

    'Read field names
    cols=1
    For k=1 To 255
    title(k)=Wsheet.Cells(1, k).Value
    If Trim(title(k))="" Then
    cols=k-1
    Exit For
    End If
    Next

    'Import documents
    row=2
    form=Trim(Cstr(Wsheet.Cells(row, 1).Value))

    Do While form<>""

    Set doc=db.CreateDocument
    doc.Form = form
    For k=2 To cols
    t=Trim(Cstr(Wsheet.Cells(row, k).Value))
    If t<>"" Then
    Set item = doc.ReplaceItemValue( title(k), t )
    End If
    Next

    'Calculate
    If calcf="Yes" Then
    Call doc.ComputeWithForm(False,False)
    End If

    'Save
    Call doc.Save(True,True)
    cnt=cnt+1
    Print cnt

    row=row+1
    form=Trim(Cstr(Wsheet.Cells(row, 1).Value))

    Loop

    fin:
    Messagebox Cstr(cnt) + " documents imported"
    App.Application.Quit
    Set App = Nothing
    Set Wbook = Nothing
    Set Wsheet = Nothing
    End Sub


    ------------------------------------------------------------------


    Dann steckt doch der ganze Zauber in der zeile


    Set item = doc.ReplaceItemValue( title(k), t )


    also wird doch nur was replaced? oder passiert da noch mehr wenn er nichts findet?
    Muss ich da ggf noch eine programmierung zum abfangen benutzen?