Autor Thema: Absatz oder Feld darf nicht größer als 64k sein  (Gelesen 1315 mal)

Offline Micha

  • Aktives Mitglied
  • ***
  • Beiträge: 106
  • Geschlecht: Männlich
  • Not(es) macht erfinderisch
Hallo allerseits,

ich habe folgendes Problem:

ich will an ein Java Urlaubsapplet (jnotes), Daten übergeben.
Diese Daten können größer 64k werden.
Dazu habe ich im postopen event eines Dokumentes folgendes Skript eingefügt:

Sub Postopen(Source As Notesuidocument)
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim view As NotesView
   Dim appletview As NotesView
   Dim doc As NotesDocument
   Dim UserName As New NotesName(session.UserName)
   Dim uebergabe (0 To 11) As Variant
   
   Dim abt As Variant
   Dim abtneu As Variant
   Dim item As NotesItem
   Dim dateTime As NotesDateTime
   Dim value As Variant
   Dim uiwork As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Dim note As NotesDocument
   Dim v As Integer
   Dim accessDate As Variant
   
   Set db = session.CurrentDatabase
   Set uidoc = uiwork.currentdocument
   Set note = uidoc.document
   Set view = db.GetView( "VData" )
   Set appletView = db.GetView("VApplet")
   Set doc = view.GetFirstDocument
   
   i = 0   
   While Not(doc Is Nothing)
      v = 0
      
      Forall x In doc.HolidayType_T
         abtneu = doc.Department_T(0)
         If abt = abtneu Then
            
            Set item = doc.GetFirstItem( "end_T" )
            Set dateTime = New NotesDateTime( "" )
            value = item.Values
            dateTime.LSLocalTime = value( v )
            dateTime.AdjustDay( 1 )
            
            uebergabe(i) = uebergabe(i) + doc.HolidayType_T(v) + ";" + Cstr(doc.Start_T(v))+ ";" + Cstr(dateTime.DateOnly) + ";" +  "  " + doc.LastName_T(0) +","+" "+ Left(doc.FirstName_T(0),1) + ". "+";"
            If doc.FMailed_T(0) ="0" Then
               uebergabe(i) = uebergabe(i) +"geplant" +";" + Cstr(doc.Created) + "|"
            Elseif doc.FMailed_T(0)= "1" Then
               uebergabe(i) = uebergabe(i) +"beantragt" +";"+ Cstr(doc.Created) + "|"
            Else
               uebergabe(i) = uebergabe(i) +"genehmigt" +";" + Cstr(doc.Created) + "|"            
            End If   
               'If doc.FMailed_T(0) ="0" Then
               '   uebergabe(i) = uebergabe(i) +"geplant"+  "|"
               'Elseif doc.FMailed_T(0)= "1" Then
               '   uebergabe(i) = uebergabe(i) +"beantragt" + "|"
               'Else
               '   uebergabe(i) = uebergabe(i) +"genehmigt" +"|"
               'End If
         Else   
            Set item = doc.GetFirstItem( "end_T" )
            Set dateTime = New NotesDateTime( "" )
            value = item.Values
            dateTime.LSLocalTime = value( v )
            dateTime.AdjustDay( 1 )
            
            If doc.Department_T(0) ="" Then
               uebergabe(i) = uebergabe(i) + "abt"+";" + "01.01.2001"+";" + "01.01.2001"+";"+"ohne Fachbereich" +";" + "1" + ";"+"|"
               uebergabe(i) = uebergabe(i) + doc.HolidayType_T(v) + ";" + Cstr(doc.Start_T(v))+ ";" + Cstr(dateTime.DateOnly) + ";" +  "  " + doc.LastName_T(0) +","+" "+ Left(doc.FirstName_T(0),1) + ". "+";"
               If doc.FMailed_T(0) ="0" Then
                  uebergabe(i) = uebergabe(i) +"geplant" +";" + Cstr(doc.Created) + "|"
               Elseif doc.FMailed_T(0)= "1" Then
                  uebergabe(i) = uebergabe(i) +"beantragt" +";"+ Cstr(doc.Created) + "|"
               Else
                  uebergabe(i) = uebergabe(i) +"genehmigt" +";" + Cstr(doc.Created) + "|"            
               End If   
               'If doc.FMailed_T(0) ="0" Then
               '   uebergabe(i) = uebergabe(i) +"geplant"+  "|"
               'Elseif doc.FMailed_T(0)= "1" Then
               '   uebergabe(i) = uebergabe(i) +"beantragt" + "|"
               'Else
               '   uebergabe(i) = uebergabe(i) +"genehmigt" +"|"
               'End If
            Else
               uebergabe(i) = uebergabe(i) + "abt"+";" + "01.01.2001"+";" + "01.01.2001"+";"+doc.Department_T(0) +";" + "1" + ";"+"|"
               uebergabe(i) = uebergabe(i) + doc.HolidayType_T(v) + ";" + Cstr(doc.Start_T(v))+ ";" + Cstr(dateTime.DateOnly) + ";" +  "  " + doc.LastName_T(0) +","+" "+ Left(doc.FirstName_T(0),1) + ". "+";"
               If doc.FMailed_T(0) ="0" Then
                  uebergabe(i) = uebergabe(i) +"geplant" +";" + Cstr(doc.Created) + "|"
               Elseif doc.FMailed_T(0)= "1" Then
                  uebergabe(i) = uebergabe(i) +"beantragt" +";"+ Cstr(doc.Created) + "|"
               Else
                  uebergabe(i) = uebergabe(i) +"genehmigt" +";" + Cstr(doc.Created) + "|"            
               End If   
               'If doc.FMailed_T(0) ="0" Then
               '   uebergabe(i) = uebergabe(i) +"geplant"+  "|"
               'Elseif doc.FMailed_T(0)= "1" Then
               '   uebergabe(i) = uebergabe(i) +"beantragt" + "|"
               'Else
               '   uebergabe(i) = uebergabe(i) +"genehmigt" +"|"
               'End If
            End If
            
         End If
         abt = abtneu
         v=v+1
         If Len(uebergabe(i)) >= 10000 Then
            i=i+1
         End If   
         
      End Forall
      
      Set doc = view.GetNextDocument(doc)
   Wend
   
   'Wert den Feldern übergeben
   note.appletdata_1 = uebergabe(0)
   note.appletdata_2 = uebergabe(1)   
   note.appletdata_3 = uebergabe(2)
   note.appletdata_4 = uebergabe(3)
   note.appletdata_5 = uebergabe(4)
   note.appletdata_6 = uebergabe(5)
   note.appletdata_7 = uebergabe(6)
   note.appletdata_8 = uebergabe(7)
   note.appletdata_9 = uebergabe(8)
   note.appletdata_10 = uebergabe(9)
   note.appletdata_11 = uebergabe(10)
   note.appletdata_12 = uebergabe(11)
   note.letzter_Zugriff = note.LastAccessed
   note.save True, True
   appletView.refresh
   source.refresh
   
End Sub

in der Zeile des Speicherns kommt der Fehler 64k...

die einzelnen Felder werden per dbcolumn hintereinander ausgelesen. Um diese auslesen zu können muss das Dokument gespeichert werden. Leider kommt dann halt der Fehler.
Alle Felder stehen in einem neuen Absatz und sind vom Typ "Text"
Die begrenzung auf 10000 ist dazu da um jedes Feld zu begrenzen, leider bringt das nicht soviel wie gehofft.

Kann jemand den Fehler erkennen, mir fällt leider nichts mehr ein.
Vielen dank im Voraus,

Micha
5.0.5 Designer und Client
Win NT 4.0

Offline Micha

  • Aktives Mitglied
  • ***
  • Beiträge: 106
  • Geschlecht: Männlich
  • Not(es) macht erfinderisch
Re:Absatz oder Feld darf nicht größer als 64k sein
« Antwort #1 am: 25.03.04 - 13:37:16 »
Nun gut, war wahrscheinlich zu viel des Guten den ganzen Code einzufügen.  ;)
Also das Problem habe ich erstmal gelöst.
Ich lese die Strings aus und bei mehr als 21800 Zeichen benutze ich ein neues Dokument mit nur einem Text Feld als Inhalt.
Nun nehme ich pro Dokuement eine Ansicht in dem nur ein Dokument mit einem Feld angezeigt wird.
Schon gibt es keine 32k und 64k Meldungen mehr.

Vielen Dank fürs schauen und wenn jemand das Gleiche Problem hat kann die Idee ja weiterhelfen.
« Letzte Änderung: 25.03.04 - 14:33:02 von Micha »
5.0.5 Designer und Client
Win NT 4.0

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz