Тип поля в очереди

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Тип поля в очереди

Сообщение Admin »

Не помню. Можно ли определить тип поля в очереди, LONG, STRING и т.д. ?
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Тип поля в очереди

Сообщение Yufil »

Если надо просто выяснить, число или строка - есть функция ISSTRING.
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Тип поля в очереди

Сообщение Admin »

Yufil писал(а): 16 Июль 2019, 9:28есть функция ISSTRING
Да это то понятно. Хотелось бы что то типа PROP:Create для поля очереди :)
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4550
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Тип поля в очереди

Сообщение finsoftrz »

Если не ошибаюсь, такого нет... Я делал проверку на строковые/числовые, затем для числовых определял по размеру byte/short/long/real.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Тип поля в очереди

Сообщение Admin »

Я примерно так и подумал. Проверять на граничные значения.
Пока не нужно, так... в голове мысли крутятся.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Тип поля в очереди

Сообщение Дед Пахом »

Можно определить такую перегруженную функцию и передавать в неё поле очереди:

Код: Выделить всё

    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 
С уважением, ДП
Аватара пользователя
vic7tar
Ветеран
Сообщения: 365
Зарегистрирован: 09 Февраль 2017, 20:12

Тип поля в очереди

Сообщение vic7tar »

Что-то вот написал, если заблуждаюсь - поправьте.

Код: Выделить всё

   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)
C10, Win10x64
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Тип поля в очереди

Сообщение Дед Пахом »

vic7tar писал(а): 16 Июль 2019, 16:12Что-то вот написал, если заблуждаюсь - поправьте.
Не совсем понял идею, но все messages показывают 'time'.
С уважением, ДП
Аватара пользователя
vic7tar
Ветеран
Сообщения: 365
Зарегистрирован: 09 Февраль 2017, 20:12

Тип поля в очереди

Сообщение vic7tar »

Попробуйте exe-шник:
Вложения
Test_FORUM.zip
(2.72 КБ) 128 скачиваний
C10, Win10x64
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Тип поля в очереди

Сообщение Дед Пахом »

vic7tar писал(а): 16 Июль 2019, 16:27Попробуйте exe-шник:
спасибо, не надо.
С уважением, ДП
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Тип поля в очереди

Сообщение Дед Пахом »

Вот так тип поля определяется на раз.

Код: Выделить всё

  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
С уважением, ДП
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Тип поля в очереди

Сообщение Дед Пахом »

Дед Пахом писал(а): 16 Июль 2019, 16:31спасибо, не надо.
Перефразирую: зачем мне пробовать Ваш exe-шник? Есть исходный код, я его собрал, у меня теперь свой exe-шник, чем он хуже?
vic7tar писал(а): 16 Июль 2019, 16:12 VarType(*?), short, name('Cla$VariantType')
Логика подсказывает, что функция 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
С уважением, ДП
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Тип поля в очереди

Сообщение Admin »

Дед Пахом писал(а): 16 Июль 2019, 17:08 Вот так тип поля определяется на раз.
Если поле прогнал через ANY то "все пропало". Печально
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Ответить