Форум » [x]Harbour » DBF -> ADT » Ответить

DBF -> ADT

Dima: Понадобилось конвертнуть DBF базу в формат ADT (ADS) У DBF изначально было поле "tst","N",12,0 Ну так и сделал dbCreate( "Test", {{"Tst","Numeric",12,0}} ,"ADSADT",.t.,"test") Test->(dbappend()) TEst->(browse()) Вбиваю 12 цифр и сука падает прога. или так dbCreate( "Test", {{"Tst","Integer",12,0}} ,"ADSADT",.t.,"test") Test->(dbappend()) TEst->(browse()) Вбиваю 12 цифр и снова падает прога. Делаю аналог под DBF dbCreate( "Test", {{"Tst","N",12,0}} ,"ADSCDX",.t.,"test") Test->(dbappend()) TEst->(browse()) Вбиваю 12 цифр и все норм Чего хочет ADS от меня ?

Ответов - 9

Pasha: Падает с каким матюком ?

Pasha: Как вариант: может внутреннее представление у таких типов int32. А там предельные значения: #define LONG_MAX 2147483647L /* maximum signed long value */ #define ULONG_MAX 4294967295UL /* maximum unsigned long value */ попробуй набрать 2147483647, потом 2147483648 или 4294967295, потом 4294967296 Что будет ?

Dima: Pasha пишет: Падает с каким матюком ? заполнил все 12 цифр и упал ADSADT/5179 Error 5179: The result value exceeded the given buffer size после с этим при конверте ADSADT/5012 Error 5012: The field definition specified for the table was not valid. Numeric length must be greater than one.


Haz: https://devzone.advantagedatabase.com/dz/webhelp/Advantage8.1/server1/adt_field_types_and_specifications.htm В adt Fixed-length (exact ASCII representation) numeric. One byte is reserved for the sign of the numeric value. If the decimal value is not zero, one additional byte is used for the decimal point. В dbf Numeric Fixed-length (exact ASCII representation) numeric. То есть в adt нужно плюсовать два пункта под сигн и поинт

Pasha: Dima пишет: упал ADSADT/5179 Error 5179: 5179 AE_VALUE_OVERFLOW Advantage Error Guide This is the first topic This is the last topic Feedback on: Advantage Database Server - 5179 AE_VALUE_OVERFLOW Advantage Error Guide error_5179_ae_value_overflow Advantage Web Development > Advantage Ruby API Support > Advantage Ruby API Support / Dear Support Staff, Mail us feedback on this topic! 5179 AE_VALUE_OVERFLOW Advantage Error Guide This is the first topic This is the last topic Mail us feedback on this topic! Problem: The value cannot be stored in the designated column. For example: this error will be returned when attempting to store into an Integer column a numeric value that is outside the range -2,147,483,647 to 2,147,483,647. See ADT Field Types and Specification. Solution: Ensure the numeric value to be stored in a column is within the supported range or restructure (i.e., ALTER) the table to ensure that the column can stored the expected values. Чуйка таки меня не подвела. Похоже эти красавцы считают, что если нет десятичных знаков, то значение надо представлять как целое. А 64-битные целые они не сделали, и поэтому значение не влазит во внутренний формат представления. Вот тебе и сайбэз. Харбор в этом отношении куда умнее. Кстати, ads 64-битные версии имеются ?

Dima: Pasha пишет: Кстати, ads 64-битные версии имеются ? Да

Pasha: А какая версия дает глюк с N 12, 0 ? 32 или 64 бита ?

Dima: Pasha пишет: А какая версия дает глюк с N 12, 0 ? 32 или 64 бита 32 На 64 не проверял , думаю так же будет. Если в Harbour (Clipper) поле N 12,0 то в ADT надо делать Numeric 13,0 Если в Harbour (Clipper) поле N 1,0 то в ADT надо делать Numeric 2,0

Haz: Pasha пишет: Вот тебе и сайбэз. Паша, там от сайбэйза только криво встроенный в ресурсы логотип. За три с лишним года движухи ноль по продукту, просто скупили мелкого конкурента создававшего большие проблемы при продаже дорогих бубнов, в которые нужно стучать после покупки их основного продукта . Переполнение возникает потому,что в adt нужно при планировании длины поля учитывать знак и точку, и в спецификации формата они об это явно указали.



полная версия страницы