26.12.2005, 12:25 | #1 |
Участник
|
Делаю примерно так:
Код: MyGUID := CREATEGUID; MESSAGE(MyGUID); Ok := EVALUATE(VarBINARY, MyGUID); IF Ok = TRUE THEN MESSAGE('%1', VarBINARY) ELSE MESSAGE('False'); а вообще надо в поле внешней БД (прилинкована табличка через view) поместить значение из CREATEGUID в виде BINARY(16) Помогите, плз, кто чем может...
__________________
YEP! тел. (905) 561-94-00 |
|
26.12.2005, 12:33 | #2 |
Участник
|
А какой тип у переменной VarBINARY?
|
|
26.12.2005, 12:36 | #3 |
Участник
|
Binary конечно же
т.е. в идеале нужно просто помещать в поля типа Binary значения новых гуидов и еще целочисленные значения приведенные к этому типу (в триггере OnInsert())
__________________
YEP! тел. (905) 561-94-00 |
|
26.12.2005, 12:38 | #4 |
Moderator
|
Этот код должен работать, если с типами ничего не намудрили.
Тип должен быть не бинари, а вариант |
|
26.12.2005, 13:03 | #5 |
Участник
|
Еще хелп говорит, что в текст нормально эвалюэйтится GUID ...
|
|
26.12.2005, 13:06 | #6 |
Moderator
|
Текст не надо, все нормально эвалюэйтится через вариант:
BINARY(16) <- GUID Ok := EVALUATE(VarVariant, MyGUID); Ok := Ok AND EVALUATE(VarBinary,VarVariant); |
|
26.12.2005, 13:17 | #7 |
Участник
|
Цитата:
У меня SQL тип Binary(16) - также описываю поле в Table (иначе ругается на несоответсвие типов) Далее получаю GUID новый и... дальше что? как его поместить в базу? З.Ы. Попробовал через временную переменную типа Variant тоже не получилось... Она становится таки GUID-ом... Цитата:
Код: 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 |
Участник
|
в прикрепленном файле картинка... после кода:
Код: OnInsert() EVALUATE(VarVariant, CREATEGUID); EVALUATE(ID, VarVariant);
__________________
YEP! тел. (905) 561-94-00 |
|
26.12.2005, 13:41 | #9 |
Moderator
|
Я кажется понял в чем проблема. Стандартные средства Navision не позволяют нормально работать с типом BINARY.
Предлагаю ручной вариант конвертации |
|
26.12.2005, 13:47 | #10 |
Участник
|
эх... я бы с удовольствием, да что-то не получается...
а можно отказаться от инсерта в триггере? тогда можно было бы просто через ОДБЦ инсертнуть...
__________________
YEP! тел. (905) 561-94-00 |
|
26.12.2005, 13:50 | #11 |
Moderator
|
А в чем сложность?
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 |
Moderator
|
Код: функция 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); |
|