Re[3]: Interbase SQL_TEXT & SQL_VARYING проблемы
От: mrhru Россия  
Дата: 28.04.03 09:40
Оценка:
Здравствуйте, Sergey Merkuriev, Вы писали:

SM>Сделал так как ты говоришь:


SM>SQL_VARYING:
SM>

SM>     begin
SM>       TempStr := VarToStr(Value);
SM>       if SqlVar^.sqllen > length(TempStr) then
SM>         Len := length(TempStr)
SM>       else Len := SqlVar^.sqllen;

после препарирования, в SqlVar^.sqllen храниться максимальная длина поля!!!
которую надо запомнить и использовать при последующих присвоениях

надо указывать полную длину, выделенную под SqlVar.sqldata
SqlVar^.sqllen := length(TempStr) + 2;


SM>       ReallocMem(SqlVar.sqldata, SqlVar^.sqllen + 2);
SM>       PShort(SqlVar^.sqldata)^ := SqlVar^.sqllen;
SM>       StrLCopy(SqlVar^.sqldata + 2, PChar(TempStr), Len);
SM>     end;
SM>   SQL_TEXT:
SM>     begin
SM>       TempStr := VarToStr(Value);
SM>       if SqlVar^.sqllen > length(TempStr) then
SM>         Len := Length(TempStr)
SM>       else Len := SqlVar^.sqllen;


SqlVar^.sqllen := length(TempStr); // здесь надо надо указать длину самой строки


SM>       ReallocMem(SqlVar^.sqldata, SqlVar^.sqllen + 1);
SM>       StrLCopy(SqlVar^.sqldata, Pchar(TempStr), Len);
SM>     end;
SM>

Имхо
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.