Autor Thema: Rich Text Feld zu klein??  (Gelesen 2215 mal)

Offline chriss76

  • Junior Mitglied
  • **
  • Beiträge: 99
  • Ich liebe dieses Forum!
Rich Text Feld zu klein??
« am: 23.05.05 - 11:39:22 »
Hallo,

ich lese den Inhalt einiger tausend Excelzellen in ein Rich Text Feld ein!
Dabei ist mir aufgefallen, dass bei ca. 1000 Zeilen, das Feld "voll" ist,
dann wird immer die letzte Zeile durch den nächsten Datensatz überschrieben!

Ich bekomme keinerlei Fehlermeldung, dass das Feld voll ist, denn auch das Einfügen per Hand ist noch problemlos möglich.

1. Welche Größenbegrenzung liegt auf einem Rich Text Feld (64 KB) ??
2. Gibt es ein anderes Feld, das ich benutzen kann?
3. Gibt es andere Möglichkeiten die Datensätze in ein Feld einzulesen, die Datensätze
sind niemals gleich?

Danke im voraus

Chris

Glombi

  • Gast
Re: Rich Text Feld zu klein??
« Antwort #1 am: 23.05.05 - 11:42:23 »
Die maximale Größe eines Absatzes in einem Rich Text Feld ist 64 KB.
Wenn Du hinter jeder Deiner Zeile einen Absatzumbruch / Zeilenumbruch einfügst, kannst Du also beliebig viel importieren.

Andreas

Offline chriss76

  • Junior Mitglied
  • **
  • Beiträge: 99
  • Ich liebe dieses Forum!
Re: Rich Text Feld zu klein??
« Antwort #2 am: 23.05.05 - 12:09:56 »
Hallo Andreas,

ich mache immer einen Zeilenumbruch, trotzdem wird ab einem bestimmten Datensatz
nichts mehr hinzugefügt, sondern nur noch der vorherige Datensatz überschrieben.
(Ich weiss den Datensatz natürlich nicht vorher, aber ich schätze ab ca. 800 vorhandenen Einträgen gibt es Probleme)
Ich lese das Excelfile von meinem PC direkt online auf dem Server mit LS ein.
Die Datensätze sehen z.B. so aus:

Zb01 Test für alle Rollen
zb02 Zweiter Test
......

Mit den Daten möchte ich nichts weiter machen, sondern
sie sollen nur zur Information dargestellt werden.

Hast Du oder jemand anderes noch eine Idee, warum es nicht funktioniert?
Oder welche Routine könnte ich schreiben?

Ich hatte vielleicht gedacht, nach ca. 800 Zeilen, immer ein neues Feld zu generieren und wieder 800 Sätze einzulesen? Geht das überhaupt, wenn Ja, wie??

Chris




Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re: Rich Text Feld zu klein??
« Antwort #3 am: 23.05.05 - 12:13:21 »
Zeilenumbruch oder neuer Abschnitt? Das ist nicht dasselbe ... mit welchem LS-Befehl erzeugst Du denn die neue Zeile?
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Glombi

  • Gast
Re: Rich Text Feld zu klein??
« Antwort #4 am: 23.05.05 - 12:16:30 »
Liest Du die Daten ins Frontend oder ins Backend ein?

Ich denke, im Backend gibt es das Problem, da nützt dann auch ein Zeilenumbruch nichts.
Notes legt mehrere Items gleichen Namens an, wenn die 64 K Grenze überschritten wird.
Das könntest Du auch versuchen, nach 800 Einträgen dann ein
Set notesItem = notesDocument.AppendItemValue( itemName$, value )

Damit wird ein neues Item (Feld) angelegt, auch wenn es dieses bereits gibt.

Ob es dann allersdings mit der Anzeige im Frontend klappt, weiß ich nicht.

Andreas

Offline chriss76

  • Junior Mitglied
  • **
  • Beiträge: 99
  • Ich liebe dieses Forum!
Re: Rich Text Feld zu klein??
« Antwort #5 am: 23.05.05 - 12:25:29 »
Hallo,

Zeilenumbruch mache ich mit Chr$(10)!

Ich lese die Daten ins Frontend ein, habe also kein Dokument offen!

Ideen???

Chris

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re: Rich Text Feld zu klein??
« Antwort #6 am: 23.05.05 - 12:35:52 »
Das ergibt nur einen Zeilenumbruch, keinen Abschnitt. Schau Dir die NotesRichtTextItem Klasse in der Hilfe mal an und dort die AddNewLine Methode, der zweite Parameter erzwingt einen neuen Paragraphen
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline chriss76

  • Junior Mitglied
  • **
  • Beiträge: 99
  • Ich liebe dieses Forum!
Re: Rich Text Feld zu klein??
« Antwort #7 am: 23.05.05 - 14:07:24 »
Hallo,

bekomme bei AddNewLine folgende Fehlermeldung:

"Instance member ADDNEWLINE does not exist"

Dann habe ich die Prüfung auf RichTEXT-Item eingebaut und das
Feld (rlTransaction_description), das ich brauche ist gar nicht vom Typ Richtext, sondern 1280.
In der Maske hat das Feld "Rich Text" als Feldtyp und ist bearbeitbar!


Dim rtitem As Variant

Set rtitem = nd.GetFirstItem( "rlTransaction_description" )
If ( rtitem.Type = RICHTEXT ) Then
Call rtitem.AddNewLine(1)
Call rtitem.AppendText(strTransactionDesc)
End If

Call nd.Save(True,True)


Was ist jetzt falsch??

Chris

Glombi

  • Gast
Re: Rich Text Feld zu klein??
« Antwort #8 am: 23.05.05 - 14:09:03 »
Jetzt also nun doch Backend !?

Andreas

Offline chriss76

  • Junior Mitglied
  • **
  • Beiträge: 99
  • Ich liebe dieses Forum!
Re: Rich Text Feld zu klein??
« Antwort #9 am: 23.05.05 - 14:13:32 »
Hallo Andreas,

Du hast selbstverständlich Recht, Backend ist richtig, habe vorhin zu schnell geantwortet und nicht nachgedacht.

Sorry nochmals, hast Du jetzt noch einen Gedanken mehr?!

Chris

Glombi

  • Gast
Re: Rich Text Feld zu klein??
« Antwort #10 am: 23.05.05 - 14:17:40 »
Kannst Du uns mal etwas mehr Code spendieren?

Wie wird "rlTransaction_description" gesetzt?

Andreas

Offline chriss76

  • Junior Mitglied
  • **
  • Beiträge: 99
  • Ich liebe dieses Forum!
Re: Rich Text Feld zu klein??
« Antwort #11 am: 23.05.05 - 14:27:08 »
Hallo Andreas,

rlTransaction_description ist der Name eines Feldes in der Maske!

Anbei die ganze Routine!


Sub ExcelUpload_roleinformation()
   
   On Error Goto ErrorHandler
   
   Dim strWert As String
   
   strWert=Msgbox("Would you like to upload an Excel sheet ==> role information, -details?", 1, "Attention! Data will be changed!")
   
   If strWert = 2 Then
      Exit Sub
   End If
   
   Dim strPath As String
   strPath=Inputbox$("Path of Excel file","Excel Upload","C:\P13_rollen_information_test.xls")
   If strPath<>"" Then
   'Initiate Excel
      Dim xlApp As Variant
      Dim xlWorkbook As Variant
      Set xlApp=CreateObject("excel.application")
      xlApp.Visible=True

      Set xlWorkbook=xlApp.Workbooks.Open(strPath)
      
   'Initialize
      Dim ns As New NotesSession
      Dim ndb As notesDatabase   
      Set ndb=ns.CurrentDatabase
      
      
      Dim counter As Long
      
      Dim strRole As String
      Dim strDesc As String
      Dim strDatestart As String
      Dim strDateend As String
      Dim strTransaction As String
      Dim strTransactionDesc As String
      Dim strOwner As String
      Dim strStandin As String
      
      Dim nd As NotesDocument
      Dim ni As NotesItem
      
      'neue Zeile
      Dim rtitem As Variant
      
      counter=1
      
      Dim help_role As String
      help_role = ""
      
      With xlWorkbook.Worksheets(1)
         
         
         Do While .Range("A" + Cstr(counter)).Value <>""
            
            strRole = ""
            strDesc=""
            strTransaction=""
            strTransactionDesc=""
            
              'Daten werden zeilenweise aus dem Excelfile ausgelesen
            strRole=.Range("A" + Cstr(counter)).Value
            strDesc=.Range("B" + Cstr(counter)).Value
            strTransaction=.Range("C" + Cstr(counter)).Value
            strTransactionDesc=.Range("D" + Cstr)(counter)).Value
         
            
            'Wenn es das erste Dokument ist, dann wird auch der Vergleichswert
            'help_role gefüllt. Dieser wird benötigt, um zu vergleichen, ob 2
            'aufeinander folgende Rolle gleich sind.
            'das kann ja beim ersten Dokument nicht der Fall sein
            
            If counter = 1 Then
               
               help_role = strRole
               Set nd=ndb.CreateDocument()
               Call nd.ReplaceItemValue("Form","fa_Role_info")
               Set ni=nd.ReplaceItemValue("AccessAdmin","[Admin]")
               ni.IsAuthors=True
               
               strTransactionDesc =  strTransaction + " " + strTransactionDesc
               
               Call nd.ReplaceItemValue("rlTitle",strRole)
               Call nd.ReplaceItemValue("rlComment",strDesc)
               'Call nd.ReplaceItemValue("rlDatestart",strDatestart)
               'Call nd.ReplaceItemValue("rlDateend",strDateend)
               Call nd.ReplaceItemValue("rlTransaction_description",strTransactionDesc)
               'Call nd.ReplaceItemValue("rlOwner",strOwner)
               'Call nd.ReplaceItemValue("rlStandin",strStandin)
               
               Call nd.Save(True,True)
               
            Else
               
            'ab hier wenn läuft die Schleife, wenn es nicht das erste Dokument ist               
               
               If strRole <> help_role Then
                  
            ' wenn die akuelle Rolle nicht mit der davorgehenden Rolle übereinstimmt,
            ' dann wird einfach ein neues Dokument angelegt und der Wert von help_role
              ' wird durch den gerade aktuellen Wert überschrieben
                  
                  Set nd=ndb.CreateDocument()
                  Call nd.ReplaceItemValue("Form","fa_Role_info")
                  Set ni=nd.ReplaceItemValue("AccessAdmin","[Admin]")
                  ni.IsAuthors=True
                  
                  strTransactionDesc =  strTransaction + " " + strTransactionDesc               
                  
                  Call nd.ReplaceItemValue("rlTitle",strRole)
                  Call nd.ReplaceItemValue("rlComment",strDesc)
                  'Call nd.ReplaceItemValue("rlDatestart",strDatestart)
                  'Call nd.ReplaceItemValue("rlDateend",strDateend)
                  Call nd.ReplaceItemValue("rlTransaction_description",strTransactionDesc)
                  'Call nd.ReplaceItemValue("rlOwner",strOwner)
                  'Call nd.ReplaceItemValue("rlStandin",strStandin)
                  
                  Call nd.Save(True,True)
                  
                  help_role = strRole
                  
                  
               Elseif strRole = help_role Then
                  
               'wenn die aktuelle Rolle mit der davorgehenden Rolle übereinstimmt   
                  
                  Dim help_strTransactionDesc As String
                  help_strTransactionDesc = ""
                  
                  Set rtitem = nd.GetFirstItem( "rlTransaction_description" )
                  
                  
                  'Get description from the existing document
                  'alle Dokumente müssen sortiert vorliegen
                  'help_strTransactionDesc = nd.rlTransaction_description(0)
                  
                  'im gerade aktuellen Dokument werden die Transaktion und
                  'die Transaktionsbeschreibung zusammen gefügt
                  strTransactionDesc =  strTransaction + " " + strTransactionDesc
                  
                  'die Transaktion und die Beschreibung werden mit einem Return an
                  'die bereits bestehenden Daten angehängt
                  'strTransactionDesc = help_strTransactionDesc + Chr$(10) + strTransactionDesc
                  
                  If ( rtitem.Type = RICHTEXT ) Then
  '...use NotesRichTextItem methods...
                     Call rtitem.AddNewLine(1)
                     Call rtitem.AppendText(strTransactionDesc)
                     
                  End If
                  
                  
                  
                  
                  Call rtitem.AddNewLine(1)
                  Call rtitem.AppendText(strTransactionDesc)
                  
                  'Anhängen des Strings
                  'Call nd.ReplaceItemValue("rlTransaction_description",strTransactionDesc)
                  
                  Call nd.Save(True,True)
                  
               End If
               
            End If
         'Counter für Excelzeile wird um 1 erhöht      
            counter=counter+1
         Loop
         
      End With
      
      'Schliessen von Excel
      Call xlApp.Quit
   End If
   
   
ExitSub:
   Exit Sub
ErrorHandler:
   Msgbox Cstr(Err) + " -"  + "BaseFunctionsLib\ExcelUpload_roleinformation: " + Error$ + ", Excel Line: "+ Cstr(counter), 16,  "Error"
   Goto ExitSub
   
   
End Sub

Glombi

  • Gast
Re: Rich Text Feld zu klein??
« Antwort #12 am: 23.05.05 - 14:38:55 »
Das ganze müsste so aussehen:

Sub ExcelUpload_roleinformation()
   
   On Error Goto ErrorHandler
   
   Dim strWert As String
   
   strWert=Msgbox("Would you like to upload an Excel sheet ==> role information, -details?", 1, "Attention! Data will be changed!")
   
   If strWert = 2 Then
      Exit Sub
   End If
   
   Dim strPath As String
   strPath=Inputbox$("Path of Excel file","Excel Upload","C:\P13_rollen_information_test.xls")
   If strPath<>"" Then
   'Initiate Excel
      Dim xlApp As Variant
      Dim xlWorkbook As Variant
      Set xlApp=CreateObject("excel.application")
      xlApp.Visible=True
      
      Set xlWorkbook=xlApp.Workbooks.Open(strPath)
      
   'Initialize
      Dim ns As New NotesSession
      Dim ndb As notesDatabase   
      Set ndb=ns.CurrentDatabase
      
      
      Dim counter As Long
      
      Dim strRole As String
      Dim strDesc As String
      Dim strDatestart As String
      Dim strDateend As String
      Dim strTransaction As String
      Dim strTransactionDesc As String
      Dim strOwner As String
      Dim strStandin As String
      
      Dim nd As NotesDocument
      Dim ni As NotesItem
      
      Dim rtitem As NotesRichTextItem
         
      counter=1
      
      Dim help_role As String
      help_role = ""
      
      With xlWorkbook.Worksheets(1)
         
         
         Do While .Range("A" + Cstr(counter)).Value <>""
            
            strRole = ""
            strDesc=""
            strTransaction=""
            strTransactionDesc=""
            
              'Daten werden zeilenweise aus dem Excelfile ausgelesen
            strRole=.Range("A" + Cstr(counter)).Value
            strDesc=.Range("B" + Cstr(counter)).Value
            strTransaction=.Range("C" + Cstr(counter)).Value
            strTransactionDesc=.Range("D" + Cstr)(counter)).Value
            
            
            'Wenn es das erste Dokument ist, dann wird auch der Vergleichswert
            'help_role gefüllt. Dieser wird benötigt, um zu vergleichen, ob 2
            'aufeinander folgende Rolle gleich sind.
            'das kann ja beim ersten Dokument nicht der Fall sein
            
            If counter = 1 Then
               
               help_role = strRole
               Set nd=ndb.CreateDocument()
               Call nd.ReplaceItemValue("Form","fa_Role_info")
               Set ni=nd.ReplaceItemValue("AccessAdmin","[Admin]")
               ni.IsAuthors=True
               
               strTransactionDesc =  strTransaction + " " + strTransactionDesc
               
               Call nd.ReplaceItemValue("rlTitle",strRole)
               Call nd.ReplaceItemValue("rlComment",strDesc)
               'Call nd.ReplaceItemValue("rlDatestart",strDatestart)
               'Call nd.ReplaceItemValue("rlDateend",strDateend)
               
               Set rtitem = New NotesRichTextItem( nd, "rlTransaction_description")
               Call rtitem.AppendText(strTransactionDesc)
               
               'Call nd.ReplaceItemValue("rlOwner",strOwner)
               'Call nd.ReplaceItemValue("rlStandin",strStandin)
               
               Call nd.Save(True,True)
               
            Else
               
            'ab hier wenn läuft die Schleife, wenn es nicht das erste Dokument ist               
               
               If strRole <> help_role Then
                  
            ' wenn die akuelle Rolle nicht mit der davorgehenden Rolle übereinstimmt,
            ' dann wird einfach ein neues Dokument angelegt und der Wert von help_role
              ' wird durch den gerade aktuellen Wert überschrieben
                  
                  Set nd=ndb.CreateDocument()
                  Call nd.ReplaceItemValue("Form","fa_Role_info")
                  Set ni=nd.ReplaceItemValue("AccessAdmin","[Admin]")
                  ni.IsAuthors=True
                  
                  strTransactionDesc =  strTransaction + " " + strTransactionDesc               
                  
                  Call nd.ReplaceItemValue("rlTitle",strRole)
                  Call nd.ReplaceItemValue("rlComment",strDesc)
                  'Call nd.ReplaceItemValue("rlDatestart",strDatestart)
                  'Call nd.ReplaceItemValue("rlDateend",strDateend)
                  
                  Call rtitem.AddNewLine(1)
                  Call rtitem.AppendText(strTransactionDesc)
                  
                                    'Call nd.ReplaceItemValue("rlOwner",strOwner)
                  'Call nd.ReplaceItemValue("rlStandin",strStandin)
                  
                  Call nd.Save(True,True)
                  
                  help_role = strRole
                  
                  
               Elseif strRole = help_role Then
                  
               'wenn die aktuelle Rolle mit der davorgehenden Rolle übereinstimmt   
                  
                  Dim help_strTransactionDesc As String
                  help_strTransactionDesc = ""                  
                  
                  
                  'Get description from the existing document
                  'alle Dokumente müssen sortiert vorliegen
                  'help_strTransactionDesc = nd.rlTransaction_description(0)
                  
                  'im gerade aktuellen Dokument werden die Transaktion und
                  'die Transaktionsbeschreibung zusammen gefügt
                  strTransactionDesc =  strTransaction + " " + strTransactionDesc
                  
                  'die Transaktion und die Beschreibung werden mit einem Return an
                  'die bereits bestehenden Daten angehängt
                  'strTransactionDesc = help_strTransactionDesc + Chr$(10) + strTransactionDesc
                  
                  
                  
                  'Anhängen des Strings
                  'Call nd.ReplaceItemValue("rlTransaction_description",strTransactionDesc)
                  
                  Call nd.Save(True,True)
                  
               End If
               
            End If
         'Counter für Excelzeile wird um 1 erhöht     
            counter=counter+1
         Loop
         
      End With
      
      'Schliessen von Excel
      Call xlApp.Quit
   End If
   
   
ExitSub:
   Exit Sub
ErrorHandler:
   Msgbox Cstr(Err) + " -"  + "BaseFunctionsLib\ExcelUpload_roleinformation: " + Error$ + ", Excel Line: "+ Cstr(counter), 16,  "Error"
   Goto ExitSub
   
   
End Sub

Offline chriss76

  • Junior Mitglied
  • **
  • Beiträge: 99
  • Ich liebe dieses Forum!
Re: Rich Text Feld zu klein??
« Antwort #13 am: 24.05.05 - 07:38:25 »
Moin,

ich habe das letzte Coding eingebaut, aber leider wird der Upload dadurch so langsam, dass ich ihn nicht gebrauchen kann.
Ich habe den Rechner die ganze Nacht laufen lassen und er hat gerade mal 6000 von 30000 Sätzen eingelesen und ich weiss nicht warum es so lange gedauert hat.
Am Anfang startet er flott, wird dann aber zusehendest langsamer!

Hat jemand noch eine Idee?

Chris

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz