| |
Visual-Basic EinsteigerFehler 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 | |
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 | |
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 | |
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. | |
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 | |
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. | |
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 | |
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 | |
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. | |
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 | |
| 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 |
|
|
Neu! sevCoolbar 3.0
Professionelle Toolbars im modernen Design!
Mit sevCoolbar erstellen Sie in wenigen Minuten ansprechende und moderne Toolbars und passen diese optimal an das Layout Ihrer Anwendung an (inkl. große Symbolbibliothek) - für VB und MS-Access Weitere InfosTipp des Monats TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|