Форум » [x]Harbour » Новые типы переменных ? » Ответить

Новые типы переменных ?

Andrey: Подскажите пожалуйста, а с какого времени существуют новые типы данных в базах Харбор/хХарбор ? + AutoInc 4 Auto increment = ModTime 8 Last modified date & time of this record ^ RowVers 8 Row version number; modification count of this record @ DayTime 8 Date & Time I Integer 1, 2, 3, 4 or 8 Signed Integer ( Width : )" },; T Time 4 or 8 Only time (if width is 4 ) or Date & Time (if width is 8 ) (?) V Variant 3, 4, 6 or more Variable type Field Y Currency 8 64 bit integer with implied 4 decimal B Double 8 Floating point / 64 bit binary Не заметил разницы между этими типами (или не понял): + AutoInc 4 Auto increment ^ RowVers 8 Row version number; modification count of this record Кто может разъяснить их применение ? Какой максимальный размер импорта файла для типов: M Memo P Picture B Blob V VarField Не смог записать ни в одно поле файл размером 3198 Мб через утилиту DBedit. Ошибка - [more] Application Internal Error - c:\clipbin\dbedit.exe Terminated at: 2013.05.06 13:00:49 Неисправимая ошибка 9006: hb_xgrab не может распределить память Called from MEMOREAD(0) Called from _FREAD(0) in \ts\clip50.lib\_EDITMEM.prg Called from USER(0) in \ts\clip50.lib\_EDITMEM.prg Called from (b)EDITMEMO(0) in \ts\clip50.lib\_EDITMEM.prg Called from TEXTEDIT(0) in \ts\clip50.lib\_TEXT.prg Called from EDITMEMO(0) in \ts\clip50.lib\_EDITMEM.prg Called from EDITVARFIELD(1600) in source\dbedit.prg Called from (b)GETCOL(1573) in source\dbedit.prg Called from GETBROWSE(0) in \ts\clip50.lib\_editbro.prg Called from EDITBROWSE(0) in \ts\clip50.lib\_editbro.prg Called from DBMENU(0) in \ts\clip50.lib\_dbmenu.prg Called from MAIN(821) in source\dbedit.prg [/more] Может что не так делаю ?

Ответов - 119, стр: 1 2 3 4 5 6 All

Haz: Pasha пишет: Так что сами разработчики поддержку своих же типов данных должны были сделать. Другой вопрос, что не все типы данных поддерживает сам Ads Так и я об этом же, нативный формат ADS поддерживает все эти типы и компонента доступа к ADS из Delphi соответственно их тоже поймет, но ... в НАТИВНОМ формате ( ADT ) В спецификации DBF от ADS эти поля не поддерживаются полностью ( ModTime и RowVersion не заявлены ) . Это не значит, что вывалит с ошибкой , но и не гарантирует правильное чтение данных . В случае с DBF нужно пробовать ... , а в случае с ADT уже можно работать. Точно сработает если конвертировать средствами харбур базу из DBF в ADT и рыть эту ADT из Delphi

Andrey: Haz пишет: Скорее всего пусть забудет об этой идее , вопрос не в ADS а в том что RDD в дельфи скорее всего таких типов не знает в DBF Haz пишет: Если базы не на теробайты, то проще сделать конвертор DBF->ADT а к ADT дельфист легко цепанется через свой ADS Т.е. совместный доступ сразу из Харбора и Дельфи не возможен ? А то Дельфист службу хочет ваять и передавать мои записи куда то через шлюз в другую прогу.

SergKis: Andrey пишет А то Дельфист службу хочет ваять и передавать мои записи куда то через шлюз в другую прогу. Ты уверен, что надо напрямую пускать стороннего пользователя в данные клиента из ЧУЖОЙ проги ? Могут возникнуть нюансы. Игорь, по мне, верно предлагает решение export\import


Haz: Andrey пишет: Т.е. совместный доступ сразу из Харбора и Дельфи не возможен Возможен, при стандартных полях, ты же решил использовать расширенные. Отсюда и нюансы

Andrey: SergKis пишет: Ты уверен, что надо напрямую пускать стороннего пользователя в данные клиента из ЧУЖОЙ проги ? Могут возникнуть нюансы. Игорь, по мне, верно предлагает решение export\import Да я предлагал делать выгрузку из своей базы в обычный DBF. Отказался программист, он решил что сам сделает службу, подключаясь напрямую к базе. Там у руководства своё видение, пускай тогда пробует. Посмотрим что будет. Хороший полигон для проверки.

SergKis: Andrey пишет Посмотрим что будет. Хороший полигон для проверки. Если у тебя в базе не деньги, то ... пробовать, можно. Но как отследишь "чужую" модификацию, или слив данных на сторону ?

Andrey: SergKis пишет: Если у тебя в базе не деньги, то ... пробовать, можно. В том то и дело, что в базе приход оплаты абонентов. Я с себя всякую ответственность снимаю, захотело руководство и пусть у них голова болит...

krutoff: Андрей, я когда-то на Дельфи применял компонент VKDBF http://vlad-karpov.narod.ru/Components.html#VK%20DBF Он поддерживает 60 разширеных типов полей. CDX-индексы тоже. Глянь, может вашему дельфисту сгодится. Я одновременно работал с Делфи и Харбором с одной базой dbf-файлов.

Andrey: krutoff пишет: Я одновременно работал с Делфи и Харбором с одной базой dbf-файлов. Спасибо БОЛЬШОЕ !

Andrey: Pasha пишет: Поле AutoInc не предназначено для изменения. Оно заполняется автоматически при добавлении записи. При попытке что-либо записать в поле возникает ошибка EDBF_DATATYPE Если есть такое поле в базе, то при переносе в новую базу значение таких полей автоматом переноситься из старой базы ? Сделал небольшой тест, вроде переносятся. Хочется точно знать.

Haz: Andrey пишет: Хочется точно знать Не переносятся! Не должны. Заполняются автоматом в новой базе в порядке добавления записей. Переносить умеют только системы бекап/ресторе.

Andrey: Haz пишет: Не переносятся! Не должны. Беру утилиту dbedit, открываю уже созданную базу, удаляю все записи AutoInc до 20-29 и после 32, т.е. делаю разрыв нумерации в базе. Потом делаю PACK. Создаю новую базу, добавляю из другой базы (меню: Операция, меню: Добавить из файла) и результат - ВСЕ записи в новой базе !

Haz: Andrey пишет: ВСЕ записи в новой базе ! Могу только поздравить! Видимо счетчик тикает только при dbAppend() Append From и Copy To его не изменяют. Даже не знаю это баг или фича

ZAlex: Andrey пишет: ВСЕ записи в новой базе ! А если в тест добавить добавление нескольких новых записей? Как "ведет" себя поле AutoInc?

Andrey: Haz пишет: Append From и Copy To его не изменяют. Даже не знаю это баг или фича Нужно тогда у Паши спросить, как он в своей утилите DBEDIT копирует записи из другой базы ? ZAlex пишет: А если в тест добавить добавление нескольких новых записей? Как "ведет" себя поле AutoInc? Проверил. Добавляет по счётчику, т.е. если в базе был 34 номер, то следующая запись становиться 35.

SergKis: Andrey пишет Проверил. Добавляет по счётчику Небольшая правка Tsb_Basic\demo.prg показывает как работает AutoInc [pre2] FUNCTION UseOpenBase() ... IF ( lDbfNo := ! File( cDbf+'.dbf' ) ) AAdd( aStr, { 'F0', '+', 4, 0 } ) AAdd( aStr, { 'F1', 'D', 8, 0 } ) AAdd( aStr, { 'F2', 'C', 60, 0 } ) AAdd( aStr, { 'F3', 'N', 10, 2 } ) AAdd( aStr, { 'F4', 'L', 1, 0 } ) dbCreate( cDbf, aStr ) ENDIF ... WHILE TEST->( RecCount() ) < 20 // 10 TEST->( dbAppend() ) TEST->F1 := Date() + n++ ... USE ( cDbf ) ALIAS "TEST" SHARED NEW OrdSetFocus('NN') GO TOP COPY TO ( '_1' ) FOR ','+hb_ntos(RecNo())+',' $ ',3,5,7,11,15,' GO TOP COPY TO ( '_2' ) FOR ','+hb_ntos(RecNo())+',' $ ',2,4,6,10,14,' GO TOP USE ( '_2' ) ALIAS T1 NEW GO TOP ? '_2.dbf', T1->( LastRec() ) WHILE ! EOF() ? RecNo(), T1->F0, T1->F1 SKIP ENDDO USE ? USE ( '_1' ) ALIAS T1 NEW GO TOP ? '_1.dbf', T1->( LastRec() ) WHILE ! EOF() ? RecNo(), T1->F0, T1->F1 SKIP ENDDO dbAppend() dbSkip(0) APPEND FROM ( '_2' ) dbGoBottom() dbAppend() GO TOP ? '_1.dbf+_2.dbf', T1->( LastRec() ) WHILE ! EOF() ? RecNo(), T1->F0, T1->F1, iif(empty(T1->F1), 'New', '' ) SKIP ENDDO USE SELECT TEST ... Результат: _2.dbf 5 1 2 24.01.2019 2 4 26.01.2019 3 6 28.01.2019 4 10 01.02.2019 5 14 05.02.2019 _1.dbf 5 1 3 25.01.2019 2 5 27.01.2019 3 7 29.01.2019 4 11 02.02.2019 5 15 06.02.2019 _1.dbf+_2.dbf 12 1 3 25.01.2019 '' 2 5 27.01.2019 '' 3 7 29.01.2019 '' 4 11 02.02.2019 '' 5 15 06.02.2019 '' 6 21 . . New 7 22 24.01.2019 '' 8 23 26.01.2019 '' 9 24 28.01.2019 '' 10 25 01.02.2019 '' 11 26 05.02.2019 '' 12 27 . . New [/pre2]

Haz: SergKis пишет: как работает AutoInc Тоесть. При Copy to сохраняется значение, в остальных переприсввивание по счётчику

Dima: Andrey пишет: Нужно тогда у Паши спросить, как он в своей утилите DBEDIT копирует записи из другой базы ? Думаю по тому же алгоритму как и в LETO Backup . Сырцы есть , сам глянь. PS Тема если что http://clipper.borda.ru/?1-7-0-00000010-000-10001-0-1330362141

SergKis: Haz пишет Тоесть. При Copy to сохраняется значение, в остальных переприсввивание по счётчику Да, при copy to сохраняется значение, при dbcreate счетчик с 0. dbappend, append from увеличивают счетчик в заголовке dbf. dbdelete + pack меняют только lastrec()



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