vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Visual-Basic Einsteiger
Fehler Nr. 14 Nicht genügend Zeichenfolgenspeicher 
Autor: CarloStein
Datum: 09.07.18 21:11

Guten Abend!

VB6 Win10

Wenn ich aus großen Datenmengen eine PDF erzeuge, läuft das auch bei sehr großen Datenmengen (die PDF hat dann bis zu 200 Seiten und mehr) sehr gut. Nehme ich aber den selben Code und füge den Daten noch pro Seite ein Bild hinzu, so kommt nach drei oder viel Seiten folgende Fehlermeldung:

Fehler Nr. 14 Nicht genügend Zeichenfolgenspeicher

Sicherlich ist jemand im Forum diesem Problem schon begegnet und hat es auch gelöst!

Gruß
Carlo
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Fehler Nr. 14 Nicht genügend Zeichenfolgenspeicher 
Autor: Franki
Datum: 10.07.18 02:46

Hallo Carlo,
genau das Problem ist mir noch nicht begegnet, da ich keine PDF Dateien mit so vielen Bildern per VB6 erzeuge.

Aber wie genau läuft denn deine Programmierung unter VB6 für die PDF Erzeugung? 200 Seiten Text in einer PDF ist ja kein nennenswertes Datenvolumen. Klar dass das funktioniert. Wie groß ist deine resultierende PDF Datei denn ohne Bilder?

Bei 200 Bildern musst du evtl. sequentiell arbeiten und zwischendurch speichern damit nicht die komplette Datei im Arbeitsspeicher generiert wird bevor sie auf Platte geschrieben wird. Wie groß sind denn die Bilder die du einfügen möchtest?

Vielleicht kannst du dich da heran tasten, denn 200 Bilder schafft kein aktueller Rechner im Arbeitsspeicher zu verwalten.

Vielleicht kannst du auch nur Verweise auf die Bilder stzen die dann geladen werden bei der Anzeige der Erstellung der PDF Datei.

Gruß
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Fehler Nr. 14 Nicht genügend Zeichenfolgenspeicher 
Autor: CarloStein
Datum: 10.07.18 17:39

Hallo Franki!

Vorerst besten Dank für deine Antwort!
Bei meiner Recherche im Netz bin ich schon auf den Grund des Fehlers gestoßen; siehe:

https://foren.activevb.de/archiv/vb-classic/thread-393226/beitrag-393226/Laufzeitfehler-14-Nicht-genuege/

Das Programm das ich zu Erzeugung einer PDF Datei verwende, habe ich nur abgekupfert.
http://www.vb-tec.de/

Während die meisten anderen Programme (die ich gefunden habe) zur Erzeugung einer PDF keine Bilder mit einfügen können, ist dies mit diesem Programm möglich.

Mit freundlichen Grüßen
Carlo
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Fehler Nr. 14 Nicht genügend Zeichenfolgenspeicher 
Autor: Souffleurlos
Datum: 10.07.18 18:37

Hallo,

das liest sich so, dass Du eine komplette Datei in einer Stringvariablen hälst bevor du sie aBlock in eine Datei speicherst.
Eine Stringvariable findet ihr End bei einem Long wert, 32 Bit.
Wenn Du solch ein Datenaufkommen hast, verteile den Stream auf mehrere Stringvariable und speichere die dann mit Append in einer Datei zusammen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Fehler Nr. 14 Nicht genügend Zeichenfolgenspeicher 
Autor: CarloStein
Datum: 10.07.18 19:34

Hallo Souffleurlos!

Danke für deinen Beitrag! Ja, genau so wie du es vermutest, stell auch ich mir das vor. Leider kann ich dir nicht sagen, wie das Programm zur Erstellung einer PDF, welches ich nur abgeschrieben habe, arbeitet. Es ist für mich als Anfänger einfach nicht zu durchschauen; mir fehlt nicht nur die Erfahrung dazu, mir fehlt vor allem auch das Talent für das Programmieren - um dieses Programm zu erfassen. Ehrlich gesagt, bin ich einfach nur froh, dass ich es geschafft habe, das Programm in mein Projekt zu integrieren. Und so muss ich "Wohl oder Übel" ohne Bilder leben. Um deine Anregung umzusetzen müsste ich in diesem von mir abgeschriebenen Programm zur Erzeugung einer PDF Änderungen vornehmen. - Dazu bin ich bei weitem nicht in der Lage - leider!

LG
Carlo
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Fehler Nr. 14 Nicht genügend Zeichenfolgenspeicher 
Autor: Souffleurlos
Datum: 13.07.18 19:01

Hallo Carlostein,

denken wir mal nach

Dim s As String

definiert den Buchsataben s als String, ich kann s in meinem Programm als String variable verwenden. s ist dasbei endlich - begrenzt von VB gesetzten 32 Bit-Wert, was um die 2.1 Millionen von eigentlich 4.2 Millionen Chars (Buchstaben). VB allokiert für Dich den Speicher.

Das ist das Programm.

Dem Computer selbst ist es völlig wurscht, als was Du den verfügbaren Speicher, der sicher viel größer als das ist, was VB für einen String reserviert, verwenden willst.

Wenn du also eine Stringvariable brauchst die viel größer ist als VB zur Verfügung stellt, dann baue die Variable selbst!

GlobalAlloc(), GlobalLock(), GlobalFree()

sind zwei WinAPI-Funktionen aus der Kernel32.dll die genau das ermöglichen. Damit kannst Du genügend Speicherraum allokieren, sie zur Benutzung auswählen und dann auch wieder freigeben.

Allerdings für einen Anfänger nicht zu empfehlen. Aber als Hinweis durchaus angebracht.

Beitrag wurde zuletzt am 13.07.18 um 19:12:31 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Fehler Nr. 14 Nicht genügend Zeichenfolgenspeicher 
Autor: CarloStein
Datum: 13.07.18 20:16

Hallo Souffleurlos!

Danke für deinen Hinweis; wie du aber in der selben Zeile treffend feststellst, ist dies nicht für einen Anfänger - der ich bin - zu empfehlen.
Ich habe die Einschränkungen akzeptiert, mich damit abgefunden. Ich opfere nicht viele Stunden womöglich vergebens, um ein Problem zu lösen, das mir über den Kopf wächst. Ich bin ein Hobby-Programmierer und damit hat der Aufwand auch seine Grenzen. Lässt sich ein Problem für mich mit relativ akzeptablen Einsatz lösen - okay, wenn nicht ist es auch gut.

Wenn ich mich mit solchen Problemen (Fragen) an das Forum wende, dann auch immer in der Hoffnung, dass es schon jemand vor mir gelöst hat und das Ergebnis für mein begrenztes Anfänger-Können verständlich ist. Gibt es keine Lösung oder ist die Lösung für mich zu schwierig, auch gut, die Welt wird sich weiter drehen...

LG
Carlo
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Fehler Nr. 14 Nicht genügend Zeichenfolgenspeicher 
Autor: Tenconi
Datum: 27.09.18 16:36

... E R K E N N N I S U N D W E I T E R M A C H E N ...

wie de Kollege Souffleurlos auf die anstosse Ide vorschläge :
<< Begin >>
ind zwei WinAPI-Funktionen aus der Kernel32.dll die genau das ermöglichen.
Damit kannst Du genügend Speicherraum allokieren, sie zur Benutzung auswählen
und dann auch wieder freigeben. GlobalAlloc(), GlobalLock(), GlobalFree()
<< Ende >>

das ist eingentliche ein mögliche lösung,

VB6 abrbeitet Segmentiert mit viel Object mit Integer 2^15 32768 maximum

Beispiel:
ein kleine mit <Suche> <Ersetzt>> Funktion programme habe ich
mit Textbox geschrieben,

wenn ich ein Texte Datei nach Text_TE_Editor.text > 32K Bytes

gehe ich VORLAUFIG wie folge vor:
Private Sub Open_Click()
   '————————————————————————————————————————————————————————————————————
   ' Dieser File Open benutzt der Module X_File_Open_API
   '————————————————————————————————————————————————————————————————————
 
    Dim Dummy                 As Byte       ' Benutzt fuer Breack Point
    Dim Savefile              As Long
    Dim Datei_Name_mit_Pfade  As String
 
    Dim File_Groesse          As Long
    Dim MsgBox_Result         As Integer    ' Meldung Result 1 .. 7
                                            ' Ja, Nein, u.s.w.
   '   
   ' '—————————————————————————————————————————————————————————————————————————
   '<< Begin >> Dateiopen
     Dummy = 1
     Datei_Name_mit_Pfade = fkt_FileOpen
     Dummy = 1
    '--------------------------------------------------------------------------
    ' --
    ' Datei Groesse pruefen
     File_Groesse = FileLen(Datei_Name_mit_Pfade)
    '   
    ' '————————————————————————————————————————————————————————————————————————
    ' << Begin >> wenn groesser 32000 Bytes dann Meldung und (Raus) Exit Sub !!!
     Dummy = 1
     If (File_Groesse > 32000) Then
          MsgBox_Result = _
          MsgBox("D I E S E R   D A T E I   I S T   G R O E S S E R   A L S  " & _
          "32'000 Byte" _
                 + vbCrLf + vbCrLf + _
                 "U N D   K A N N   N I C H T   G E O E F F N E T   W E R D E N" & _
                 "!!!", _
                  vbCritical, _
                 "U e b e r w a c h u n g  : D a t e i  G r o e s s e   m a x.")
         Exit Sub
     End If
    '
    ' << Ende  >> wenn groesser 32000 Bytes dann Meldung und (Raus) Exit Sub !!!
    '——————————————————————————————————————————————————————————————————————————
    ' ——
     Dummy = 1
     ' Wenn Datei_Name_mit_Pfade Leer tue Nicht !!
     If (Datei_Name_mit_Pfade <> "") Then
       Text_Editor.Text = ReadFile(Datei_Name_mit_Pfade) ' Eingentliche
                                                         ' File Ladung
                                                         ' if ( Alles OK!! )
     End If
    '——————————————————————————————————————————————————————————————————————————
    ' ——
 
   '<< Ende  >> Dateiopen
   '———————————————————————————————————————————————————————————————————————————
   ' ———
End Sub
Das ist eingentliche ein gewisse einschränkung auf max. 32000 Bytes

ich werde natürliche versuchen mit der vorchlage von Kollege Souffleurlos
dieser begrenzung zu umgehen.


Entwicklungsmethode:

#1 GlobalAlloc() mit zu beispiel nur 10 String a 80 Bytes

#2 GlobalLock() auch nur mit 10 String a 80 Bytes

#3 GlobalFree() WICHTIG nach dem das Gebete gebraucht ist
der Speicher davon FREIGEBEN
nur dann, dürfen wir AMEN sagen!
#4 wenn dieser vefahren functionniert, dann werde ich die Daten Groesse
auf 32000 Byte vergrossern, und X_Mal Speicher_Block Name vegeben.

und ich hoffe damit ein Textbox so zu benutzen als ob nahezu
keine Groesse begrenzung mehr gabe.

Schau ich mal....die Erde Dreht sich aber mein Entwicklung Geist
lass mich nicht im ruhe, komm zeit kommt Rate.

Wenn ich soweit bin dann werde ich mich Melden, es seit dem
ein Kollege von uns hat schon ein Lösung vorszuchagen.

Bis dann

Bernard Tenconi
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Grober Unfug .... 
Autor: Souffleurlos
Datum: 27.09.18 20:03

und dein Beitrag in ActiveX-Forum würde ich jedem abraten dem Link zu folgen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Grober Unfug .... 
Autor: Tenconi
Datum: 28.09.18 00:08

<...und dein Beitrag in ActiveX-Forum würde ich jedem abraten dem Link zu folgen....>

bin jedoch etwas verwundert, dass Sie KEIN BEGRUNDUNG dazu schreiben!
so kommt niemand weiter, damit werde ich nicht schlauer...!

( Sorry wenn meine Deutsche nicht so gut ist, Begrundung, komme aus Frankeich...)

Gruesse

Bernard Tenconi
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel