[vxcmd] Cursor_AddRecords mangles field content
Robert Brenstein
rjb at rz.uni-potsdam.de
Fri Jun 18 18:00:41 CDT 2004
> >
>> It seems to be a bug in xcmd interface.
>
>Hi Robert,
>
>Thn you should be able get the same mistake using just
>
> one db
> one table
>Do
>
> Cursor_AddRecords()
>
>And send here data to fill 3 records.
>E.g. Second record contain some empty values.
>
>Please show me such string with values.
>It skip empty value and get next column or next row value?
>
>
>--
>Best regards,
>Ruslan Zasukhin [ I feel the need...the need for speed ]
Okay, I just sacrified a couple hours to investigate this properly.
I was wrong. The empty values are not the problem.
I was right. There is a bug in xcmd.
The problem is with record delimiter -- I have been relying on
defaults, tab and return, assuming that what I get from Valentina
will match the defaults. However, apparently the charcode used for
return by SQLSelectRecords is not what AddRecords uses.
If I have the following records:
*** XML dump of the original data
<Record>
<f n="RecID">169</f>
<f n="treffen_kurs_ref">3177</f>
<f n="treffen_section">1</f>
<f n="treffen_meeting">1</f>
<f n="treffen_tag">Di</f>
<f n="treffen_zeit">13.15-14.45</f>
<f n="treffen_ort">2.05.11</f>
<f n="treffen_beginn">3.12.</f>
</Record>
<Record>
<f n="RecID">170</f>
<f n="treffen_kurs_ref">3177</f>
<f n="treffen_section">2</f>
<f n="treffen_meeting">1</f>
<f n="treffen_tag">Di</f>
<f n="treffen_zeit">15.15-16.45</f>
<f n="treffen_ort">2.24.0.76</f>
<f n="treffen_beginn">3.12.</f>
</Record>
<Record>
<f n="RecID">171</f>
<f n="treffen_kurs_ref">3177</f>
<f n="treffen_section">3</f>
<f n="treffen_meeting">1</f>
<f n="treffen_tag">Do</f>
<f n="treffen_zeit">15.15-16.45</f>
<f n="treffen_ort">2.24.0.52</f>
<f n="treffen_beginn">5.12.</f>
</Record>
<Record>
<f n="RecID">172</f>
<f n="treffen_kurs_ref">3177</f>
<f n="treffen_section">4</f>
<f n="treffen_meeting">1</f>
<f n="treffen_tag">Di</f>
<f n="treffen_zeit">13.15-14.45</f>
<f n="treffen_ort">2.14.6.22</f>
<f n="treffen_beginn">3.12.</f>
</Record>
<Record>
<f n="RecID">173</f>
<f n="treffen_kurs_ref">3177</f>
<f n="treffen_section">5</f>
<f n="treffen_meeting">1</f>
<f n="treffen_tag">Di</f>
<f n="treffen_zeit">13.15-14.45</f>
<f n="treffen_ort">2.14.6.06</f>
<f n="treffen_beginn">3.12.</f>
</Record>
<Record>
<f n="RecID">174</f>
<f n="treffen_kurs_ref">3177</f>
<f n="treffen_section">6</f>
<f n="treffen_meeting">1</f>
<f n="treffen_tag">Di</f>
<f n="treffen_zeit">13.15-14.45</f>
<f n="treffen_ort">2.14.6.02</f>
<f n="treffen_beginn">3.12.</f>
</Record>
<Record>
<f n="RecID">175</f>
<f n="treffen_kurs_ref">3177</f>
<f n="treffen_section">7</f>
<f n="treffen_meeting">1</f>
<f n="treffen_tag">Do</f>
<f n="treffen_zeit">13.15-14.45</f>
<f n="treffen_ort">2.24.0.76</f>
<f n="treffen_beginn">5.12.</f>
</Record>
and execute
put Valentina("Database_SQLSelectRecords",dbName, query) into boKurs
put Valentina("Cursor_AddRecords",crs,boKurs) into valResult
I get (line wraps in the middle of fields are NOT artifact of email
-- there is really a return inserted there):
*** XML dump of produced records:
<Record>
<f n="RecID">698</f>
<f n="treffen_kurs_ref">4177</f>
<f n="treffen_section">1</f>
<f n="treffen_meeting">1</f>
<f n="treffen_tag">Di</f>
<f n="treffen_zeit">13.15-14.45</f>
<f n="treffen_ort">2.05.11</f>
<f n="treffen_beginn">3.12.
4177</f>
</Record>
<Record>
<f n="RecID">699</f>
<f n="treffen_kurs_ref">2</f>
<f n="treffen_section">0</f>
<f n="treffen_meeting">0</f>
<f n="treffen_tag">15.1</f>
<f n="treffen_zeit">2.24.0.76</f>
<f n="treffen_ort">3.12.
4177</f>
<f n="treffen_beginn">3</f>
</Record>
<Record>
<f n="RecID">700</f>
<f n="treffen_kurs_ref">1</f>
<f n="treffen_section">0</f>
<f n="treffen_meeting">15</f>
<f n="treffen_tag">2.24</f>
<f n="treffen_zeit">5.12.
4177</f>
<f n="treffen_ort">4</f>
<f n="treffen_beginn">1</f>
</Record>
<Record>
<f n="RecID">701</f>
<f n="treffen_kurs_ref">0</f>
<f n="treffen_section">0</f>
<f n="treffen_meeting">2</f>
<f n="treffen_tag">3.12</f>
<f n="treffen_zeit">5</f>
<f n="treffen_ort">1</f>
<f n="treffen_beginn">Di</f>
</Record>
<Record>
<f n="RecID">702</f>
<f n="treffen_kurs_ref">13</f>
<f n="treffen_section">2</f>
<f n="treffen_meeting">3</f>
<f n="treffen_tag"></f>
<f n="treffen_zeit">1</f>
<f n="treffen_ort">Di</f>
<f n="treffen_beginn">13.15-14.45</f>
</Record>
<Record>
<f n="RecID">703</f>
<f n="treffen_kurs_ref">2</f>
<f n="treffen_section">3</f>
<f n="treffen_meeting">7</f>
<f n="treffen_tag">1</f>
<f n="treffen_zeit">Do</f>
<f n="treffen_ort">13.15-14.45</f>
<f n="treffen_beginn">2.24.0.76</f>
</Record>
<Record>
<f n="RecID">704</f>
<f n="treffen_kurs_ref">5</f>
<f n="treffen_section">0</f>
<f n="treffen_meeting">0</f>
<f n="treffen_tag"></f>
<f n="treffen_zeit"></f>
<f n="treffen_ort"></f>
<f n="treffen_beginn"></f>
</Record>
Whereas the result should be exactly same records except
<f n="treffen_kurs_ref">3177</f>
lines should be
<f n="treffen_kurs_ref">4177</f>
for each record.
As you can see, the last field of first record contains its value
plus the first field of the second record. The same shift happens for
each record. Of coursem due to variation of types of fields, some
bogus values are truncated or replaced.
If I specify delimiters explicitely
put Valentina("Database_SQLSelectRecords",klv.DbName, query) into boKurs
put Valentina("Cursor_AddRecords",crs,boKurs,tab,return) into valResult
The results are correct. So, there is an easy workabout but this bug
should be fixed as other people are likely to trip over the same.
Robert Brenstein
More information about the Valentina
mailing list