[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