Тип поля в очереди
Добавлено: 16 Июль 2019, 8:59
Не помню. Можно ли определить тип поля в очереди, LONG, STRING и т.д. ?
Место общения программистов, форум разработчиков БД на Clarion
https://forum.clarionlife.net/
Код: Выделить всё
GetType(*BYTE),LONG
GetType(*SHORT),LONG
GetType(*USHORT),LONG
GetType(*DATE),LONG
GetType(*TIME),LONG
GetType(*LONG),LONG
GetType(*ULONG),LONG
GetType(*SREAL),LONG
GetType(*REAL),LONG
GetType(*BFLOAT4),LONG
GetType(*BFLOAT8),LONG
GetType(*?),LONG
Код: Выделить всё
Program
Map
Module('ClaRUN')
VarType(*?), short, name('Cla$VariantType')
end
end
vartype queue, pre(vt)
n short
t string(7).
a1 byte
a2 short
a3 ushort
a4 long
a5 ulong
a6 sreal
a7 real
a8 string(8)
a9 cstring(9)
a10 date
a11 time
! можно продолжить
any_g group
b1 long
b2 string(10)
b3 byte.
code
vt:t = 'byte' ; vt:n = 8612 ; add(vartype)
vt:t = 'short' ; vt:n = 8452 ; add(vartype)
vt:t = 'ushort' ; vt:n = 8292 ; add(vartype)
vt:t = 'long' ; vt:n = 6372 ; add(vartype)
vt:t = 'ulong' ; vt:n = 7652 ; add(vartype)
vt:t = 'sreal' ; vt:n = 7492 ; add(vartype)
vt:t = 'real' ; vt:n = 5572 ; add(vartype)
vt:t = 'string' ; vt:n = 4484 ; add(vartype)
vt:t = 'cstring' ; vt:n = 6692 ; add(vartype)
vt:t = 'date' ; vt:n = 7972 ; add(vartype)
vt:t = 'time' ; vt:n = 8132 ; add(vartype)
vt:n = VarType(a1) ; get(vartype, vt:n) ; message(vt:t)
vt:n = VarType(a2) ; get(vartype, vt:n) ; message(vt:t)
vt:n = VarType(a3) ; get(vartype, vt:n) ; message(vt:t)
vt:n = VarType(a4) ; get(vartype, vt:n) ; message(vt:t)
vt:n = VarType(a5) ; get(vartype, vt:n) ; message(vt:t)
vt:n = VarType(a6) ; get(vartype, vt:n) ; message(vt:t)
vt:n = VarType(a7) ; get(vartype, vt:n) ; message(vt:t)
vt:n = VarType(a8) ; get(vartype, vt:n) ; message(vt:t)
vt:n = VarType(a9) ; get(vartype, vt:n) ; message(vt:t)
vt:n = VarType(a10) ; get(vartype, vt:n) ; message(vt:t)
vt:n = VarType(a11) ; get(vartype, vt:n) ; message(vt:t)
vt:n = VarType(any_g.b1) ; get(vartype, vt:n) ; message(vt:t)
vt:n = VarType(any_g.b2) ; get(vartype, vt:n) ; message(vt:t)
vt:n = VarType(any_g.b3) ; get(vartype, vt:n) ; message(vt:t)
Код: Выделить всё
PROGRAM
MAP
TypeOf(*STRING),LONG
TypeOf(*CSTRING),LONG
TypeOf(*BYTE),LONG
TypeOf(*SHORT),LONG
TypeOf(*USHORT),LONG
TypeOf(*DATE),LONG
TypeOf(*TIME),LONG
TypeOf(*LONG),LONG
TypeOf(*ULONG),LONG
TypeOf(*SREAL),LONG
TypeOf(*REAL),LONG
TypeOf(*?),LONG
INCLUDE('printf.inc')
END
Q QUEUE
F1 STRING(20)
F2 LONG
F3 ULONG
F4 DATE
END
CODE
Q.F1 = 'Text'
Q.F2 = -100000
Q.F3 = +100000
Q.F4 = TODAY()
ADD(Q)
GET(Q, 1)
MESSAGE(printf('Type of %s is %i', Q.F1, TypeOf(Q.F1)))
MESSAGE(printf('Type of %s is %i', Q.F2, TypeOf(Q.F2)))
MESSAGE(printf('Type of %s is %i', Q.F3, TypeOf(Q.F3)))
MESSAGE(printf('Type of %s is %i', Q.F4, TypeOf(Q.F4)))
TypeOf PROCEDURE(*STRING pVar)
CODE
RETURN DataType:STRING
TypeOf PROCEDURE(*CSTRING pVar)
CODE
RETURN DataType:CSTRING
TypeOf PROCEDURE(*BYTE pVar)
CODE
RETURN DataType:BYTE
TypeOf PROCEDURE(*SHORT pVar)
CODE
RETURN DataType:SHORT
TypeOf PROCEDURE(*USHORT pVar)
CODE
RETURN DataType:USHORT
TypeOf PROCEDURE(*DATE pVar)
CODE
RETURN DataType:DATE
TypeOf PROCEDURE(*TIME pVar)
CODE
RETURN DataType:TIME
TypeOf PROCEDURE(*LONG pVar)
CODE
RETURN DataType:LONG
TypeOf PROCEDURE(*ULONG pVar)
CODE
RETURN DataType:ULONG
TypeOf PROCEDURE(*SREAL pVar)
CODE
RETURN DataType:SREAL
TypeOf PROCEDURE(*REAL pVar)
CODE
RETURN DataType:REAL
TypeOf PROCEDURE(*? pVar)
CODE
RETURN 0
Перефразирую: зачем мне пробовать Ваш exe-шник? Есть исходный код, я его собрал, у меня теперь свой exe-шник, чем он хуже?
Логика подсказывает, что функция Cla$VariantType возвращает внутренний тип переменной VARIANT, проверка это подтверждает:
Код: Выделить всё
Program
Map
Module('ClaRUN')
!-- VarType(*?), short, name('Cla$VariantType')
VariantType(*VARIANT v), short, name('Cla$VariantType')
end
end
v1 VARIANT
v2 VARIANT
code
v1 = 500
MESSAGE('TypeOf(v1) is '& VariantType(v1)) !-- 3 или VT_I4
v2 = 'Test'
MESSAGE('TypeOf(v2) is '& VariantType(v2)) !-- 8 или VT_BSTR