Тип поля в очереди
Добавлено: 16 Июль 2019, 8:59
				
				Не помню. Можно ли определить тип поля в очереди, LONG, STRING и т.д. ?
			Место общения программистов, форум разработчиков БД на Clarion
https://www.forum.clarionlife.net/
Да это то понятно. Хотелось бы что то типа PROP:Create для поля очереди
Код: Выделить всё
    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)Не совсем понял идею, но все messages показывают 'time'.
спасибо, не надо.
Код: Выделить всё
  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
Если поле прогнал через ANY то "все пропало". Печально