Здравствуйте, Дмитрий, Вы писали:
Для начала, что касается
SQL_VARYING
Нужно выделять память sqlvar.sqllen+sizeof(short)
В первых двух байтах (short) указывается длина строки.
Сама строка идет после этих двух байт.
Нулевой символ не обязателен.
В sqlvar.sqllen указывается длина буфера
Сделал так как ты говоришь:
SQL_VARYING:
begin
TempStr := VarToStr(Value);
if SqlVar^.sqllen > length(TempStr) then
Len := length(TempStr)
else Len := SqlVar^.sqllen;
ReallocMem(SqlVar.sqldata, SqlVar^.sqllen + 2);
PShort(SqlVar^.sqldata)^ := SqlVar^.sqllen;
StrLCopy(SqlVar^.sqldata + 2, PChar(TempStr), Len);
end;
SQL_TEXT:
begin
TempStr := VarToStr(Value);
if SqlVar^.sqllen > length(TempStr) then
Len := Length(TempStr)
else Len := SqlVar^.sqllen;
ReallocMem(SqlVar^.sqldata, SqlVar^.sqllen + 1);
StrLCopy(SqlVar^.sqldata, Pchar(TempStr), Len);
end;
не работатет