Форум: "Основная";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
ВнизПредварительная обработка строк перед передачей в Format Найти похожие ветки
← →
AMogil © (2004-04-14 16:16) [0]Здравсвуйте.
Необходимо предварительно обрабатывать строки передаваемые в функцию формат. Делаю так:
function TLibDataModule.FormatSQL(const S: string; const Arg: array of const): string;
var
i, ParamsCount: Integer;
SS: string;
A: array of TVarRec;
begin
ParamsCount := 0;
SetLength(A, 0);
for i := 1 to Length(S) - 1 do
if (S[i] = "%") and (S[i + 1] <> "%") then
begin
Inc(ParamsCount);
SetLength(A, Length(A) + 1);
if LowerCase(S[i + 1]) = "s" then
begin
// Собственно обработка строки
SS := LibraryApplication.AddTwinQuote(string(Arg[ParamsCount - 1].VAnsiString));
A[Length(A) - 1].VPChar := PChar(SS);
A[Length(A) - 1].VType := vtPChar;
end
else
begin
A[Length(A) - 1] := Arg[ParamsCount - 1];
A[Length(A) - 1].VType := Arg[ParamsCount - 1].VType;
end;
end;
Result := Format(S, A);
end;
Но резултат получается искаженным. Может быть кто-нибуль сталкивался и значет в чем проблема?
← →
icWasya © (2004-04-14 17:17) [1]скорее всего тут
A[Length(A) - 1].VPChar := PChar(SS);
при таком присваивании у строки SS не изменяется счётчик ссылок и при следующем операторе
SS:=чего-то там
то, на что указывал VPChar становится недействительным
Возможное решение -
...
var
SSList:Array of String;
.....
SS:= LibraryApplication.AddTwinQuote(string(Arg[ParamsCount - 1].VAnsiString));
SetLength(SSList,Length(SSList)+1);
SSList[High(SSList)]:=SS;
A[Length(A) - 1].VPChar := PChar(SS);
....
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.036 c