[gelöst] BigText Variable befüllen

4. Juli 2007 13:44

Hallo Zusammen,

ich versuche eine BigText Variable zu füllen. Es funktioniert auch, allerdings nicht immer.
Mit
Code:
ADORecSet.GetString(2, 1, '|')

konvertiere ich ein komplettes Recordset in einen String.
Spalten- und Zeilenwerte lassen sich mit benutzerdefinierten Trennzeichen versehen.

Hier die Syntax zu GetString:
Code:
String= recordset.GetString([StringFormat], [NumRows], [ColumnDelimiter], [RowDelimiter], [NullExpr])


Parameter Description
StringFormat Currently the only supported format is AdClipString, which returns a row and column delimited string
NumRows The number of rows to be returned
ColumnDelimiter The character inserted between columns. It is not inserted before the first column, or after the last column. The default is a Tab character
RowDelimiter The character inserted between rows. It is not inserted before the first row, or after the last row. The default is a Carriage Return character.
NullExpr Expression to be used in place of a Null value. The default is an empty string


Bei meinen Angaben setzte ich das einzig existierende Stringformat AdClipString welches immer den wert 2 hat. Das bedeutet, dass ich dadurch einen zeilen- und spaltenweise getrennten String zurückbekomme.
Die 1 bedeutet dass ich 1 Zeile zurückbekommen will.
Wenn ich also keinen RowDelimiter angebe wird defaultmässig ein return gesetzt!

das ist mein code:
Code:
shelp.ADDTEXT(ADORecSet.GetString(2, 1, '|'));
pos := shelp.GETSUBTEXT(subtext,1,30);
MESSAGE('%1',subtext);
clear(shelp);


es funktioniert wunderbar bis zu dem Zeitpunkt, wenn der Zeileninhalt eine gewisse Größe überschreitet. dann bekomme ich folgende Fehlermeldung:
The length of the text string exceeds the size of the string buffer.


Wenn ich allerdings den gleichen String manuell einlese, dann kommt
diese Meldung nicht, also kann er nicht zu lange sein!?

so sieht der string aus wenn ich ihn manuell einlese:
shelp.addtext('710|Stütze-001|0,4|0,4|0|0,4|0,4|3,455|0|3,455|3,455|1,6|0,16|0,552800000000016|0|552800000000016| 0,552800000000016|5,52800000000008|0,552800000000016|5,52800000000|008|0,160000000000005| 0,160000000000005|0,16|0|5,52800000000008|0|5,52800000000008|0|0|0|65|1|1|0|1|4|');

--> also nicht sehr lange!

kann es sein dass dieser defaultmässig return nicht funktioniert?
wie kann ich manuell einen Zeilenumbruch einsetzten?

Ich hab schon einiges probiert, ich hoffe jemand hat eine
Idee für mich?

Grüsse
Silvia

[Edit: Leerzeichen hinzugefügt, damit das Webseiten-Design nicht zerstört wird. Gruß, Timo]
Zuletzt geändert von Silvia am 17. Juli 2007 12:59, insgesamt 2-mal geändert.

4. Juli 2007 15:29

..wie kann es sein das der Buffer des GetString schon bei dem "kleinen Text" scheinbar voll ist, wenn ich doch ein ganzes Recordset einfüllen könnte?
ein Recordset ist doch beispielsweise eine GANZE Tabelle!?

was übersehe ich da? :-(

4. Juli 2007 15:51

Vielleicht 'ne blöde Frage, aber... handelt es sich bei diesem Problem um Navision :?:

4. Juli 2007 16:13

keine blöde frage, aber ja es handelt sich um Navision:

und zwar an der Stelle, wo ich den Recordset, welches mit dem Inhalt einer Access-Tabelle gefüllt ist, als String an eine Navision-Variable übergeben muss.

Das ganze passiert auch in Navision:
Recordset anlegen...alles mittels AutomationVariablen, die sich aus der
'Microsoft ActiveX Data Objects 2.8 Library' bedienen.

Ich lese die Accesstabelle spaltenweise in eine Navision-Tabelle ein, doch die leeren Spalten machen ein Problem.
Nach vielen Versuchen und ausprobieren sämtlicher Möglichkeiten bleibt mir nun nur noch die Möglichkeit den Recordset als String einzulesen und dann nach "leeren Spalten" zu suchen...

mit dieser BigText-Variable wäre dass auch eine gute Möglichkeit aber ich finde nicht heraus warum er nicht ALLES einliest!?

4. Juli 2007 16:16

Sollte ich die Frage besser unter "Microsoft Office" posten?

4. Juli 2007 16:23

Ich habe den Beitrag verschoben :-D

[Beitrag aus dem Forum Dynamics NAV 4.xx nach Microsoft Office verschoben.]

Gruß, Rosch
MSDynamics.de-Team

5. Juli 2007 14:36

Silvia hat geschrieben:..wie kann es sein das der Buffer des GetString schon bei dem "kleinen Text" scheinbar voll ist, wenn ich doch ein ganzes Recordset einfüllen könnte?
ein Recordset ist doch beispielsweise eine GANZE Tabelle!?


Helfen kann ich dir hier leider nicht, zumal ich auch keine 4er Version zum Testen habe. Jedoch habe ich mit einer anderen ActiveX Automation auch schon einen sehr aehnlichen Fehler bekommen.

Bei mir war es dann schlussendlich ein Bug in der Automation, vielleicht ist das hier auch so?

Was willst du mit den Daten eigentlich genau machen?
Benoetigst du alle Daten oder nur 1-2 Spalten?

Gruesse
feri

14. Juli 2007 17:00

Das Problem wird der Buffer der Funktion getstring sein, der wohl nur 250 Zeichen groß ist. Ein Recordset wird wohl zeilenmäßig in ein Array eingelesen. Probleme gibts eben dann, wenn so wie bei Dir die Zeile 268 Zeichen lang ist.

17. Juli 2007 12:59

Ja das scheint das Problem zu sein, was anders kommt fast nicht in Frage!
danke!