Страница 1 из 1
					
				Формат Int64 в домашних условиях
				Добавлено: 28 Сентябрь 2023, 7:43
				 Игорь Столяров
				Привет всем !
Правильно ли я понимаю, что для приёма данных при парсинге полей 
в формате Int64 у нас сейчас нет других вариантов, кроме:
Код: Выделить всё
V1 Decimal(19)
V2 CString(20)  ! Как-то уже совсем тупо :(
V3 Ждать Clarion 12 
  
?
 
			 
			
					
				Формат Int64 в домашних условиях
				Добавлено: 28 Сентябрь 2023, 11:27
				 ingasoftplus
				посмотрите на зачатки в equates.clw 
Код: Выделить всё
! 64 bits integers
  OMIT('***',_BUILTIN_I64_)
INT64    GROUP,TYPE
lo         ULONG
hi         LONG
         END
UINT64   GROUP,TYPE
lo         ULONG
hi         ULONG
         END
! ***
и в i64.INC 
это уже есть в clarion 10 и 11.1 (по крайней мере)
 
			 
			
					
				Формат Int64 в домашних условиях
				Добавлено: 28 Сентябрь 2023, 12:02
				 Игорь Столяров
				Я видел эти зачатки, но что-то мне подсказывает, что тут другая история (для передачи параметров в сторонние DLL).
А вот такое присвоение точно не прокатит - т.к. транслятор будет считать такой Group() 8-ми байтовой строкой:
Код: Выделить всё
MyBigInt Group(INT64).
  Code
  MyBigInt = 123456789012345
  Message(MyBigInt)
 
			 
			
					
				Формат Int64 в домашних условиях
				Добавлено: 28 Сентябрь 2023, 15:27
				 Дед Пахом
				Есть же libsrc\win\i64.INC.
			 
			
					
				Формат Int64 в домашних условиях
				Добавлено: 28 Сентябрь 2023, 15:42
				 Игорь Столяров
				Дед Пахом писал(а): 28 Сентябрь 2023, 15:27
Есть же libsrc\win\i64.INC.
 
Это набор функций для обмена и операций в формате Int64 ... а мне нужно хранение больших чисел. 

Я уже увидел, что обмен в Int64 идёт через DECIMAL ... но DECIMAL не подходит для ключей в Pervasive.SQL. 
Поэтому, видимо, остаётся только CSTRING, тем более что упорядочивание по Int64 мне не нужно.
(или можно записывать строки в формате "@N-020")
 
			 
			
					
				Формат Int64 в домашних условиях
				Добавлено: 04 Октябрь 2023, 7:22
				 Игорь Столяров
				Вообще, конечно, чудны творения рук детей твоих Господи ... 

Если верить справке Clarion 11.1, то получается, что значения по типам переменных:
Код: Выделить всё
Long:  -2,147,483,648 to 2,147,483,647
ULong:              0 to 4,294,967,295  ! <- OK !
Но !
Int64: -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
UInt64:                         0 to 9,223,372,036,854,775,807  ! <- Why ?!
Здесь уже логика вышла из чата ... 

 
			 
			
					
				Формат Int64 в домашних условиях
				Добавлено: 04 Октябрь 2023, 15:51
				 kreator
				
			 
			
					
				Формат Int64 в домашних условиях
				Добавлено: 04 Октябрь 2023, 21:11
				 Игорь Столяров
				kreator писал(а): 04 Октябрь 2023, 15:51
Скорее всего описались
 
Зная как работает SV - могли и обкакаться ... 

В Clarion'e ведь реализован не нативный INT64, а притянутый за ухи костыль-спарка из двух LONG ... 

Ждём C12, а пока юзаем вместо INT64 традиционный DECIMAL(20) - в принципе всё работает. 

 
			 
			
					
				Формат Int64 в домашних условиях
				Добавлено: 05 Октябрь 2023, 15:09
				 kreator
				Игорь Столяров писал(а): 04 Октябрь 2023, 21:11
Ждём C12, а пока юзаем вместо INT64 традиционный DECIMAL(20) - в принципе всё работает.
 
Тогда уж C2024.
 
			 
			
					
				Формат Int64 в домашних условиях
				Добавлено: 05 Октябрь 2023, 15:18
				 Игорь Столяров
				kreator писал(а): 05 Октябрь 2023, 15:09
Тогда уж C2024.
 
Возможно. Здесь важно, что бы INT64 был полноценным форматом - в т.ч. поддерживался драйверами БД ...