Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.02;
Скачать: CL | DM;

Вниз

Предварительная обработка строк перед передачей в 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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.053 c
14-1081381010
_none_
2004-04-08 03:36
2004.05.02
во сколько бы вы оценили...


11-1066754725
Neon
2003-10-21 20:45
2004.05.02
Как форма может принимать сообщения?


14-1081681535
RealRascal
2004-04-11 15:05
2004.05.02
Как сделать чтобы при копировании в буфер


6-1078856220
incm
2004-03-09 21:17
2004.05.02
TIdHTTP - как закачать определенное кол-во байтов с нужного места


7-1078480939
User_OKA
2004-03-05 13:02
2004.05.02
Разделитель