| |
|
|
- Seite 1 - |
|
Christof Neuß | Hallo Leute, habe eine Access-Datenbank im Zugriff. Klappt prima. Nur: Das Memofeld wird nicht richtig bzw. verkürzt ausgelesen. Im Memofeld habe ich eine (modifizierte) RTF-Datei gespeichert. Diese ist auch vollständig da. Das kann ich über MS-Access sehen. Der INSERT-INTO-Befehl hat also funktioniert.
Bei SQLEXEC "Select RTF_Text from RTF_Texte",2 steht in der SQL.Dat nur ein Teil des Feldes. Auch mit SQLEXEC "Select RTF_Text from RTF_Texte",1 erhalte ich in der Listbox nur die ersten ??? Zeichen.
Gibt es hier eine Begrenzung? Wie kann ich die umgehen? Ich möchte nicht die ca. 15 RTF-Dateien mit ins Verzeichnis kopieren. Sieht einfach unschön aus und die Verwaltung in der DB finde ich gut.
Danke! |
|
|
| |
|
|
|
« Dieser Beitrag wurde als Lösung gekennzeichnet. » |
|
RGH | Hallo, die Länge, die per SQL aus einem Memofeld ausgelesen wird, kann mit @Set("SQLWidth", N) eingestellt werden. Möglicherweise reicht in Deinem Fall die voreingestellte Länge nicht aus.
Gruß Roland |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 03.01.2011 ▲ |
|
|
|
|
|
| Zunächst: Keine Ahnung.
Wieviele Zeichen werden denn zurückgegeben?
Wenn Du "Sonderzeichen" mitnutzt dann hilft z.B. encode64(. |
|
|
| |
|
|
|
Christof Neuß | Tja. Es kommen wohl 1024 Zeichen rüber. Nicht mehr. Ich habe jetzt mal alles weggelassen, was mit RTF zu tun hat. Einfach Über Access Text in das Memo-Feld geschrieben. Die Anzeige in meinem Programm ist auch nicht das Problem. Der SQLEXEC liefert einfach nicht das ganze Memo-Feld zurück. Ich habe in der XProfan-Hilfe noch unter "Behobene Bugs" gefunden, dass das Lesen von Text-Blobs bisher nicht funktioniert hat. Müsste aber doch dann behoben sein, oder? Oder hängt es damit gar nicht zusammen.
Ich mache das im Moment so:
SQL_Befehl$="Select RTF_Text from RTF_Texte where Aufgabe='"+Re_Position$+"'"
SQLExec SQL_Befehl$,1
Re_Text$=ListBox$("Ergebnis",1)
Re_Text$=Decode64(Re_Text$)
SetText Re_AGK_01&,Re_Text$
SQLExec SQL_Befehl$,2
Das ist natürlich nur ein Ausschnitt und dient auch nur zu Testzwecken, damit ich sowohl die Effekte mit der Listbox als auch mit der Dateiausgabe testen kann. Und in beiden Fällen ist der Text einfach abgeschnitten. Wenn alle Stricke reißen, werde ich den Text einfachl in Zeilen aufteilen und dann in der Datenbank zerstückelt speichern. Das kriege ich dann ja wieder zusammengesetzt. Vielleicht weiß ja einer noch was. |
|
|
| |
|
|
|
Thomas Freier | Schreibst du das in eine Listbox oder ein Listiew? Frank hatte seine ListView.dll für solche Datenmengen extra mit SetItemTextEx(H,T,S,L,A) erweitert. Mit Blobs und dbIII hatte "Pascal" sich beschäftigt. Mal hier suchen. |
|
|
| |
|
|
|
Christof Neuß | Hallo Thomas, es geht nicht um die Anzeige. Ich schreibe das Ergebnis in ein Richedit. Der "Knoten" sitzt schon früher. Ich bekomme aus der Datenbank nicht den ganzen Text raus. |
|
|
| |
|
|
|
RGH | Hallo, die Länge, die per SQL aus einem Memofeld ausgelesen wird, kann mit @Set("SQLWidth", N) eingestellt werden. Möglicherweise reicht in Deinem Fall die voreingestellte Länge nicht aus.
Gruß Roland |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 03.01.2011 ▲ |
|
|
|
|
Christof Neuß | Hallo Roland.
DANKE!!!!!
Das war der entscheidende Tipp. Jetzt funktioniert es. Wieder was gelernt.
BTW: Wenn ich das Ergebnis in die Listboxliste ausgebe, dann kann der Eintrag max. 32.000 (und ein paar Zerquetschte) Zeichen lang sein, oder? Ich werd's wahrscheinlich nicht brauchen, es interessiert mich nur. Dann würde es ja nix helfen, die SQLWidth auf 65.535 zu setzen. Müsste dann über die SQL.DAT gehen, was? |
|
|
| |
|
|
|
| Bei mir unter XP kann ich sogar deutlich längere Strings als ListBoxEinträge einfügen:
var list&=create("list",0)
addString(list&,mkstr$("A",32768))
addString(list&,mkstr$("A",65536))
addString(list&,mkstr$("A",16777216))
print len(getString$(list&,0))
print len(getString$(list&,1))
print len(getString$(list&,2))
waitInput
end
Gibt beim mir sauber:
32768 65536 16777216 aus.
Eigentlich auch kaum verwunderlich, Speicher können ja (auch) "beliebig" groß sein und solch ListBoxEintrag ist (mittlerweile) intern unter anderem ein Speicherzeiger. |
|
|
| |
|
|
|
E.T. | RGH (03.01.11)
Hallo, die Länge, die per SQL aus einem Memofeld ausgelesen wird, kann mit @Set("SQLWidth", N) eingestellt werden. Möglicherweise reicht in Deinem Fall die voreingestellte Länge nicht aus.
Mal so als Zwischenfrage: Wieviel ist denn voreingestellt ?? Konnt's nirgends finden.. |
|
|
| Grüße aus Sachsen... Mario WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte... | 04.01.2011 ▲ |
|
|
|
|
Christof Neuß | @iF: Hatte auch schon damit geliebäugelt, dass die Grenze evlt. schon mit Version 11.X aufgehoben ist. Umso besser. Dann dürfte ich hier ja gar keine Probleme bekommen. Danke für den Test
@Mario: M.E. sind 1.024 Zeichen eingestellt. Ich hatte nichts verändert und es wurden immer Längen von 992 - 1024 gemeldet. Kürzere kamen durch unterschiedliche Encodierungen zustande. Mehr als 1.024 habe ich nie bekommen. Ich gehe jetzt auch hin und setze vor dem Lesen den Wert auf 65.535 und nachher wieder auf 1.024. |
|
|
| |
|
|