Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Падает сервак ФБ 1.03 [D6, FB 1.03]


Соловьев ©   (2004-04-20 10:08:00) 

Написал UDF:

там есть такая функция

function MaskToPhone(NumberStr, MaskStr, SeparatorChar: PChar):PChar; cdecl; export;
var i, count_replace: integer;
   TempStr: string;
begin

Result := PChar(String(NumberStr));

if String(MaskStr) = '' then Exit;

TempStr := String(MaskStr);
count_replace := 0;
for i:=0 to Length(String(MaskStr)) do
  if String(MaskStr)[i] <> String(SeparatorChar)[1] then
  begin
   TempStr[i] := String(NumberStr)[count_replace];
   count_replace := count_replace + 1;
  end;
 Result := PChar(TempStr);
end;

Если MaskStr = '' - сервак валится.
Не понятно почему нижние строчки не спасают
Result := PChar(String(NumberStr));
if String(MaskStr) = '' then Exit;
Запрос вида

select t1."phone",  "view_phone"(t1."phone", '','-')
FROM "installation_of_ telephones" t1
where t1."id_owner"=736


Соловьев   (2004-04-20 12:25:00) [1]


> Johnmen ©   (20.04.04 12:23) [7]

не знаю почему но с 0-вым индексом работает, а с 1 - нет:)


Johnmen   (2004-04-20 12:23:00) [2]

>Соловьев ©   (20.04.04 12:19) [6]
>как ни странно - нет :)))

Да ? А что такое s[0], где s : string ?


Соловьев   (2004-04-20 12:19:00) [3]


> Johnmen ©   (20.04.04 11:08) [2]
> Странно...
> Но есть ошибка - в указании границ цикла...:)

как ни странно - нет :))) если 0 - то все ок. Если с 1 - то не так как надо


Соловьев   (2004-04-20 11:17:00) [4]


> Kadr ©   (20.04.04 11:14) [4]
> Result := PChar(String(NumberStr));
> if Length(MaskStr) = 0 then Exit; ------------!!!

Заработало!!!

> for i:=0 to Length(String(MaskStr)) do
> if String(MaskStr)[i] <> String(SeparatorChar)[1] then -------!!!
>
> ошибка String(MaskStr)[i] ты берешь с нуля а надо с 1
> попробуй и так

Да, переделал. Это блин привычка от С+Паскалевская :)


Kadr   (2004-04-20 11:14:00) [5]

Result := PChar(String(NumberStr));
if Length(MaskStr) = 0 then Exit; ------------!!!

for i:=0 to Length(String(MaskStr)) do
if String(MaskStr)[i] <> String(SeparatorChar)[1] then -------!!!

ошибка String(MaskStr)[i] ты берешь с нуля а надо с 1
попробуй и так


Соловьев   (2004-04-20 11:12:00) [6]


> Johnmen ©   (20.04.04 11:08) [2]

самое интересное что код работал 1.5 года как часики :)) А вот теперь вылезла ошибка


Johnmen   (2004-04-20 11:08:00) [7]

Странно...
Но есть ошибка - в указании границ цикла...:)


Соловьев   (2004-04-20 10:10:00) [8]

Вот как описана эта функция в БД

DECLARE EXTERNAL FUNCTION "view_phone"
   CSTRING(20),
   CSTRING(50),
   CSTRING(1)
RETURNS CSTRING(50)
ENTRY_POINT 'MaskToPhone' MODULE_NAME 'udf.dll'


Наверх

Титульная страница Поиск, карта сайта Написать письмо