Тип поля в очереди
Модератор: Дед Пахом
					Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
	При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- Admin
 - Администратор
 - Сообщения: 4022
 - Зарегистрирован: 05 Июль 2005, 15:59
 - Откуда: Хабаровск
 - Благодарил (а): 59 раз
 - Поблагодарили: 42 раза
 - Контактная информация:
 
Тип поля в очереди
Не помню. Можно ли определить тип поля в очереди, LONG, STRING и т.д. ?
			
			
									
						Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
			
						- Admin
 - Администратор
 - Сообщения: 4022
 - Зарегистрирован: 05 Июль 2005, 15:59
 - Откуда: Хабаровск
 - Благодарил (а): 59 раз
 - Поблагодарили: 42 раза
 - Контактная информация:
 
Тип поля в очереди
Да это то понятно. Хотелось бы что то типа PROP:Create для поля очереди
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
			
						- finsoftrz
 - ✯ Ветеран ✯
 - Сообщения: 5567
 - Зарегистрирован: 06 Ноябрь 2014, 12:48
 - Благодарил (а): 18 раз
 - Поблагодарили: 78 раз
 
Тип поля в очереди
Если не ошибаюсь, такого нет... Я делал проверку на строковые/числовые, затем для числовых определял по размеру byte/short/long/real.
			
			
									
						C6/C12, ШВС, tps/btrieve.
			
						- Admin
 - Администратор
 - Сообщения: 4022
 - Зарегистрирован: 05 Июль 2005, 15:59
 - Откуда: Хабаровск
 - Благодарил (а): 59 раз
 - Поблагодарили: 42 раза
 - Контактная информация:
 
Тип поля в очереди
Я примерно так и подумал. Проверять на граничные значения.
Пока не нужно, так... в голове мысли крутятся.
			
			
									
						Пока не нужно, так... в голове мысли крутятся.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
			
						- Дед Пахом
 - Старичок
 - Сообщения: 3346
 - Зарегистрирован: 07 Июль 2005, 16:51
 - Откуда: Москва, Россия
 - Благодарил (а): 20 раз
 - Поблагодарили: 56 раз
 - Контактная информация:
 
Тип поля в очереди
Можно определить такую перегруженную функцию и передавать в неё поле очереди:
 
			
			
									
						Код: Выделить всё
    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)C10, Win10x64
			
						- Дед Пахом
 - Старичок
 - Сообщения: 3346
 - Зарегистрирован: 07 Июль 2005, 16:51
 - Откуда: Москва, Россия
 - Благодарил (а): 20 раз
 - Поблагодарили: 56 раз
 - Контактная информация:
 
Тип поля в очереди
Попробуйте exe-шник:
			
							- Вложения
 - 
			
		
		
				
- Test_FORUM.zip
 - (2.72 КБ) 391 скачивание
 
 
C10, Win10x64
			
						- Дед Пахом
 - Старичок
 - Сообщения: 3346
 - Зарегистрирован: 07 Июль 2005, 16:51
 - Откуда: Москва, Россия
 - Благодарил (а): 20 раз
 - Поблагодарили: 56 раз
 - Контактная информация:
 
- Дед Пахом
 - Старичок
 - Сообщения: 3346
 - Зарегистрирован: 07 Июль 2005, 16:51
 - Откуда: Москва, Россия
 - Благодарил (а): 20 раз
 - Поблагодарили: 56 раз
 - Контактная информация:
 
Тип поля в очереди
Вот так тип поля определяется на раз.
			
			
									
						Код: Выделить всё
  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
С уважением, ДП
			
						- Дед Пахом
 - Старичок
 - Сообщения: 3346
 - Зарегистрирован: 07 Июль 2005, 16:51
 - Откуда: Москва, Россия
 - Благодарил (а): 20 раз
 - Поблагодарили: 56 раз
 - Контактная информация:
 
Тип поля в очереди
Перефразирую: зачем мне пробовать Ваш 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
С уважением, ДП
			
						- Admin
 - Администратор
 - Сообщения: 4022
 - Зарегистрирован: 05 Июль 2005, 15:59
 - Откуда: Хабаровск
 - Благодарил (а): 59 раз
 - Поблагодарили: 42 раза
 - Контактная информация:
 
Тип поля в очереди
Если поле прогнал через ANY то "все пропало". Печально
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
			
						