AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.12.2005, 12:25   #1  
Dolter_imported is offline
Dolter_imported
Участник
 
47 / 10 (1) +
Регистрация: 23.09.2004
Делаю примерно так:
Код:
MyGUID := CREATEGUID;
MESSAGE(MyGUID);
Ok := EVALUATE(VarBINARY, MyGUID);
IF Ok = TRUE THEN
  MESSAGE('%1', VarBINARY)
ELSE
  MESSAGE('False');
получаю в итоге "False" в сообщении...
а вообще надо в поле внешней БД (прилинкована табличка через view) поместить значение из CREATEGUID в виде BINARY(16)

Помогите, плз, кто чем может...
__________________
YEP! тел. (905) 561-94-00
Старый 26.12.2005, 12:33   #2  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
А какой тип у переменной VarBINARY?
Старый 26.12.2005, 12:36   #3  
Dolter_imported is offline
Dolter_imported
Участник
 
47 / 10 (1) +
Регистрация: 23.09.2004
Цитата:
Сообщение от romeo Посмотреть сообщение
А какой тип у переменной VarBINARY?
Binary конечно же
т.е. в идеале нужно просто помещать в поля типа Binary значения новых гуидов и еще целочисленные значения приведенные к этому типу (в триггере OnInsert())
__________________
YEP! тел. (905) 561-94-00
Старый 26.12.2005, 12:38   #4  
Kirvisniemi is offline
Kirvisniemi
Moderator
 
342 / 13 (1) ++
Регистрация: 21.12.2004
Этот код должен работать, если с типами ничего не намудрили.
Тип должен быть не бинари, а вариант
Старый 26.12.2005, 13:03   #5  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Еще хелп говорит, что в текст нормально эвалюэйтится GUID ...
Старый 26.12.2005, 13:06   #6  
Kirvisniemi is offline
Kirvisniemi
Moderator
 
342 / 13 (1) ++
Регистрация: 21.12.2004
Текст не надо, все нормально эвалюэйтится через вариант:

BINARY(16) <- GUID

Ok := EVALUATE(VarVariant, MyGUID);
Ok := Ok AND EVALUATE(VarBinary,VarVariant);
Старый 26.12.2005, 13:17   #7  
Dolter_imported is offline
Dolter_imported
Участник
 
47 / 10 (1) +
Регистрация: 23.09.2004
Цитата:
Сообщение от tyrex Посмотреть сообщение
Этот код должен работать, если с типами ничего не намудрили.
Тип должен быть не бинари, а вариант
Почему вариант? Что поместит он в БД?
У меня SQL тип Binary(16) - также описываю поле в Table (иначе ругается на несоответсвие типов)
Далее получаю GUID новый и... дальше что? как его поместить в базу?

З.Ы. Попробовал через временную переменную типа Variant тоже не получилось... Она становится таки GUID-ом...

Цитата:
Сообщение от tyrex Посмотреть сообщение
Текст не надо, все нормально эвалюэйтится через вариант:

BINARY(16) <- GUID

Ok := EVALUATE(VarVariant, MyGUID);
Ok := Ok AND EVALUATE(VarBinary,VarVariant);
Код:
MyGUID := CREATEGUID;
Ok := EVALUATE(VarVariant, MyGUID);
Ok := Ok AND EVALUATE(VarBINARY, VarVariant);
MESSAGE(FORMAT(Ok));
результат: НЕТ
__________________
YEP! тел. (905) 561-94-00
Старый 26.12.2005, 13:28   #8  
Dolter_imported is offline
Dolter_imported
Участник
 
47 / 10 (1) +
Регистрация: 23.09.2004
в прикрепленном файле картинка... после кода:
Код:
OnInsert()
EVALUATE(VarVariant, CREATEGUID);
EVALUATE(ID, VarVariant);
Изображения
 
__________________
YEP! тел. (905) 561-94-00
Старый 26.12.2005, 13:41   #9  
Kirvisniemi is offline
Kirvisniemi
Moderator
 
342 / 13 (1) ++
Регистрация: 21.12.2004
Я кажется понял в чем проблема. Стандартные средства Navision не позволяют нормально работать с типом BINARY.

Предлагаю ручной вариант конвертации
Старый 26.12.2005, 13:47   #10  
Dolter_imported is offline
Dolter_imported
Участник
 
47 / 10 (1) +
Регистрация: 23.09.2004
Цитата:
Сообщение от tyrex Посмотреть сообщение
Предлагаю ручной вариант конвертации
эх... я бы с удовольствием, да что-то не получается...
а можно отказаться от инсерта в триггере?
тогда можно было бы просто через ОДБЦ инсертнуть...
__________________
YEP! тел. (905) 561-94-00
Старый 26.12.2005, 13:50   #11  
Kirvisniemi is offline
Kirvisniemi
Moderator
 
342 / 13 (1) ++
Регистрация: 21.12.2004
А в чем сложность?

txtGUID := DELCHR(MyGUID,'=','{}-');
FOR intI:=1 TO 16 DO BEGIN
varBinary[intI] := Hex2Dec(txtGUID[intI*2-1]+txtGUID[intI*2]);
END;

осталось конвертор из HEX в DEC написать
Старый 26.12.2005, 14:04   #12  
Kirvisniemi is offline
Kirvisniemi
Moderator
 
342 / 13 (1) ++
Регистрация: 21.12.2004
Код:
функция Hex2Dec(Str:Text[30]):Integer

IF Str[1]>='A' THEN BEGIN
   StrTemp:=CONVERTSTR(Str,'ABCDEF','012345');
   EVALUATE(iTemp,FORMAT(StrTemp[1]));
   iTemp := iTemp+10;
END ELSE
   EVALUATE(iTemp,FORMAT(Str[1]));

Result := iTemp*16;

IF Str[2]>='A' THEN BEGIN
   StrTemp := CONVERTSTR(Str,'ABCDEF','012345');
   EVALUATE(iTemp,FORMAT(StrTemp[2]));
   iTemp+=10;
END ELSE
   EVALUATE(iTemp,FORMAT(Str[2]));

Result+=iTemp;
EXIT(Result);
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 16:04.