Hi CTB, Well the example you were providing was ASCII only and that is why I suggest strcpy to replace memcpy.
With the fact that the field may also contain binary I would suggest that you issue 2 updates. The first one containing 0s in the buffer and the second one the new value in the buffer. That should work. However, you are adding some overhead to your application. Maybe somebody else has a better solution. Regards, Bernard On Wednesday 28 January 2004 06:17, Claus-Thomas Buhl wrote: > Hi Bernard and Gustav, > > This is not the solution, since I also might store binary data in a > LONG BYTE column and then strcpy() would truncate my data. > If I add the 0 byte like you proposed the 0 byte will be > part of my LONG value and this is not what I want. > The 0-byte solution would be correct if the hostvartype would be > sqlvchar. > > Regards, > > CTB > > Bernard Clement schrieb: > > Hi Claus, > > > > Gustav is right... > > > > In your code you have > > param1.buf = malloc(sizeof(buf1)); memcpy(param1.buf, buf1, > > sizeof(buf1)); param1.size = sizeof(buf1); > > ... > > param2.buf = malloc(sizeof(buf2)); memcpy(param2.buf, buf2, > > sizeof(buf2)); param2.size = sizeof(buf2); > > > > Try with > > param1.buf = malloc(sizeof(buf1)+1); > > memcpy(param1.buf, buf1, sizeof(buf1)+1); > > param1.size = sizeof(buf1)+1; > > ... > > param2.buf = malloc(sizeof(buf2)+1); > > memcpy(param2.buf, buf2, sizeof(buf2)+1); > > param2.size = sizeof(buf2)+1; > > > > The +1 will get the \0 at the end of the array of characters and you will > > be in business. > > > > You can also replace the memcpy by a strcpy, e.g. > > strcpy((param1.buf, buf1); > > strcpy((param2.buf, buf2); > > if it exist in the precompiler, note that I do not have experience with > > the precompiler but I do have experience with C and C++. > > > > Bernard > > > > On Tuesday 27 January 2004 12:35, Claus-Thomas Buhl wrote: > >>I am using the C/C++ precompiler of SAP DB 7.3.0.46 and want > >>to update the data of a LONG column. > >> > >>I recognized that if the new value is shorter than the > >>old value, the updated column has the length of the old value, > >>and the value is the new value plus the part of the old value > >>that is longer than the new value. > >> > >>I can reproduce this behaviour with the appended program. > >>The program creates a table X with columns k INTEGER and > >>f LONG BYTE. It then inserts a row with k=1 and f='HELLO' and > >>finally updates the row with f='BELL'. If I query the table, > >>I get the value 'BELLO' for column f. > >> > >>Regards, > >> > >>CTB > > -- > _______ > \o/|\o/ Claus-Thomas Buhl > > | Diplom-Informatiker > > \_____/ mailto:[EMAIL PROTECTED] > > H.E.I. GmbH | Wimpfener Strasse 23 | D-68259 Mannheim > Fon: +49-(0)621-795141 | Fax: +49-(0)621-795161 | mailto:[EMAIL PROTECTED] > http://www.h-e-i.de && http://www.hei.biz && http://www.radpage.com -- MaxDB Discussion Mailing List For list archives: http://lists.mysql.com/maxdb To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]
