Форум » [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] Может что не так делаю ?

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

Dima: Andrey пишет: Подскажите пожалуйста, а с какого времени существуют новые типы данных в базах Харбор/хХарбор ? c 2009 вроде

Pasha: Andrey пишет: Неисправимая ошибка 9006: hb_xgrab не может распределить память Это ошибка выделения памяти. Здесь действуют несколько ограничений: 1. Максимальный размер символьной переменной 2. Максимальный размер мемо-поля Какие там ограничения - 2Г или больше - сразу не скажу 3. Ограничение на выделение памяти (размер физической или виртуальной памяти). В мемо-поле данные записываются целиком, поэтому и считать файл в память надо целиком. Но это плохое решение - загонять гигабайты в мемо-поле. Оно все-таки для этого не предназначено.

Andrey: Pasha пишет: Но это плохое решение - загонять гигабайты в мемо-поле. Оно все-таки для этого не предназначено. Согласен. Просто протестировал по максиму. Думаю 1-5 Мб размер файла картинки будет нормально для базы ? И какое поле базы лучше использовать для картинок (jpg, bmp...) ? M Memo P Picture B Blob V VarField И для чего нужно поле типа "V" (если уже есть M, P, B) ?


Pasha: Andrey пишет: Думаю 1-5 Мб размер файла картинки будет нормально для базы ? Нормально И какое поле базы лучше использовать для картинок (jpg, bmp...) ? M Memo P Picture B Blob V VarField Если нет перекодировки кодовых страниц, то все равно: M, P или B Если есть - то M использовать нельзя. И для чего нужно поле типа "V" (если уже есть M, P, B) ? V - это другой тип поля, более сложный. О нем лучше почитать в ng по six3. Там даже есть отдельный раздел: VarField "V" Field Types

Andrey: Подскажите пожалуйста, как можно переделать свой dbf под новое поле: + AutoInc (Auto increment). Дело в том что у меня есть в базе поле ID записи, которое я веду сам. Хочу сделать новое ID2, но с сохранением значений ID (база чистилась и ID идут не по порядку RECNO() ). Как это сделать ?

Andrey: Поставил в базу поле ID тип + AutoInc 4 Auto increment. Теперь при добавлении записи получаю ошибку: Error DBFCDX/1020 Ошибка типа данных: ID Код такой: aFieldArray := { } GetFields( aFieldArray ) APPEND BLANK ALERT( STR(FIELD->ID)+";"+VALTYPE(FIELD->ID) ) FOR nI := 1 TO FCOUNT() FIELDPUT( nI, aFieldArray[ nI ] ) NEXT Причем VALTYPE(FIELD->ID) возвращает N - Как получить правильный тип поля базы ? Как сделать правильно ?

Pasha: Поле AutoInc не предназначено для изменения. Оно заполняется автоматически при добавлении записи. При попытке что-либо записать в поле возникает ошибка EDBF_DATATYPE

Andrey: Pasha пишет: Поле AutoInc не предназначено для изменения. А как тогда получить, что это тип поля AutoInc ? VALTYPE(FIELD->ID) возвращает N !

Dima: Andrey пишет: А как тогда получить, что это тип поля AutoInc ? Пробни HB_FIELDTYPE()

Vlad04: А как объявить поле Auto increment ? Только программно ? Во вьюверах ничего такого нет.

Dima: Vlad04 пишет: А как объявить поле Auto increment ? вероятно тип поля "+" типа так dbcreate("test",{{"tst","n",1,0},{"incrtest","+",3,0}},,.t.)

Andrey: Vlad04 пишет: Только программно ? Во вьюверах ничего такого нет. Пашина утилита dbedit.exe - позволяет делать это. Да и многое другое !!!

Andrey: Dima пишет: Пробни HB_FIELDTYPE() Возвращает пустую строчку. У меня хХарбор 1.2.3

Dima: Andrey пишет: Возвращает пустую строчку Нет у меня хХарбор ;) Попробуй для теста Harbour , он же есть у тебя. Хотя кто знает может в хХарбор нужно юзать FIELDTYPE() , не проверял.

Dima: Andrey пишет: Возвращает пустую строчку. Hb_fieldtype(номер поля) // норм работает

Andrey: Dima пишет: Hb_fieldtype(номер поля) // норм работает Да - работает ! Описание в Хелпе по хХарбору нет, а я поставил имя поля.... Из-за этого и не сработало раньше. Спасибо БОЛЬШОЕ Дима !

Softlog86: Andrey вроде Вы используете DBF для хранения картинок ? У меня задача такая-же . Нужно помимо прочих стоково/числовых значений ещё и фото товара . Посоветуйте как лучше сделать ? На сегодняшний день я картинки держу в MEMO ... и перед просмотром записываю в файл и соответсвенно показ . Чую что есть лучшее решение .... HARBOUR + MiniGui

Dima: Softlog86 Зачем так усложнять ? Храните картинки как они есть в отдельной папке.

Sergy: Dima пишет: Softlog86 Зачем так усложнять ? Храните картинки как они есть в отдельной папке. +1 Если артикулов много - значит много будет картинок. Зачем нагружать систему, сваливая все в одну кучу, если можно удобно и комфортно хранить jpg файлы в отдельном каталоге ? Добавлю, что картинки (в отличие от самой БД) в большинстве случаев меняются гораздо реже, поэтому - какой смысл регулярно бекапить статичную по сути информацию ?

Andrey: Softlog86 пишет: На сегодняшний день я картинки держу в MEMO ... и перед просмотром записываю в файл и соответсвенно показ . Чую что есть лучшее решение .... HARBOUR + MiniGui 1) Надо не забыть, что и в HARBOUR'e можно показывать картинки в терминале GTWVT. Смотрите примеры терминала GTWVT (он сейчас по другому называется GTWVG) или мой пример с фонтами (я его здесь на форуме выкладывал). 2) Можно сделать внешний показ картинки на МиниГуи - см. пример библиотеки - сохранения и показ графических файлов в базе формата DBFCDX в папке samples\Basic\Image2Dbf 3) Можно базу и показ товара сразу сделать на МиниГуи. Типа такого: Но это сложно. Я пока сам разбираюсь. Все зависит от конкретной задачи. Какие картинки нужно показывать, как часто их показывать и т.д. Выбор ваш. Если большие картинк, то может и не нужно их в базе хранить. Не знаю. Я раньше doc файлы хранил в базе, потом отказался, потому что база пухнет и копии файлов хранить неудобно.

Softlog86: У меня вся программа на HARBOUR в GUI (MiniGUI) . Почему храню в одном файле ? 1) Файлов очень много ( больше 4-х тысяч) - нагрузка на файловую систему большая и это чувствуется ...... 2) С точки зрения интеллектуальной собственности ( трудов на создание графики было потрачено ого-го) - так что украсть картинки становится сложнее 3) Компактность всей системы : мне проще хранить несколько тысяч картинок в 1-м ( по правде в 2-х файлах :DBF + FPT ) = 170 МБ в общем - тема хранения в отдельном каталоге пофайлово не рассматривается . До этого вся графика зиповалась с паролем и доставалась для показа - но были потери во времени и иногда программа самопроизвольно вываливалась ( не смог победить) ...

Andrey: Softlog86 пишет: До этого вся графика зиповалась с паролем и доставалась для показа JPG-файл зиповать бесполезно... Лучше его криптовать - HB_Crypt(). Softlog86 пишет: иногда программа самопроизвольно вываливалась ( не смог победить) Записывай графику в базу с помощью функций из примера samples\Basic\Image2Dbf

ММК: Softlog86 пишет: 2) С точки зрения интеллектуальной собственности ( трудов на создание графики было потрачено ого-го) А можно увидеть хотя бы одну единственную? Andrey пишет: JPG-файл зиповать бесполезно... Почему?

Softlog86: Зиповал не для уменьшения объема ( JPG сам по себе сжат) .... а ради сохранения всех файлов в одном хранилище с невозможностью достать из него ( конечнно умельцы смогут ... но какими средствами) Как я уже написал выше , цель спрятать картинки - чтоб конкурентам не упрощать работу .... пусть сами делают фото всех своих товаров ..... Пока ( уже три года) записываю в MEMO и меня в общем-то устраивает .... :) Не зная алгоритма выдернуть картинку из этого мемо не получится ..... так как ещё пишутся кой-какие ключи ... да и байты не в прямом порядке как они идут в настоящем JPG ...... в общем своего рода двойное криптование . Не в этом суть . Я спрашивал про запись JPG в поля новых типов .... Всем откликнувшимся - С П А С И Б О !!!!

Andrey: HB_Crypt() лучшая функция для защиты, чем pkzip с ключом. Если писать в мемо поле fpt, то при некоторых значениях в строке, будет вылет базы, т.е. строку нужно преобразовать, заменить chr(26) и chr(0). Лучше картинки держать в P Picture или B Blob. Но как работать с этим я не знаю. Пробовал сделать пример не получилось. База не создается. Может кто даст примеры по работе с такими переменными ?

SergKis: Softlog86 пишет: иногда программа самопроизвольно вываливалась ( не смог победить) Попробуйте расставить в программе принудительную сборку мусора. У прогр. на MiniGui, при разрастании режимов, появляются такие особенности - у нас это было так. Вставка hb_gcAll(.T.) перед созданием окон - помогла.

Softlog86: На базе image2dbf и делалось .... :) . А тут прочитал что есть новые типы полей и задумался ......

Andrey: Всем привет. Вот опять вопрос про поле AutoInc (Auto increment): Как этот тип поля надежен в плане уникального ID ? Если в базе удалять записи, а потом сделать pack базы, ID по всей базе не изменится ? Кто пользуется этим типом поля ? Поделитесь опытом.

Pasha: Тест показал, что после pack значения autoinc полей не изменяются.

gfilatov2002: Pasha пишет: Тест показал, что после pack значения autoinc полей не изменяются. Подтверждаю. Мой тестовый пример см. ниже [pre2]/* * MINIGUI - Harbour Win32 GUI library Demo */ #include "minigui.ch" #include "Dbstruct.ch" REQUEST DBFCDX Function Main SET CENTURY ON SET DELETED ON SET BROWSESYNC ON DEFINE WINDOW Form_1 ; AT 0,0 ; WIDTH 640 HEIGHT 480 ; TITLE 'MiniGUI Browse Demo' ; MAIN NOMAXIMIZE ; ON INIT OpenTables() ; ON RELEASE CloseTables() DEFINE MAIN MENU POPUP 'File' ITEM 'Set Browse Value' ACTION Form_1.Browse_1.Value := Val ( InputBox ('Set Browse Value','') ) ITEM 'Get Browse Value' ACTION MsgInfo ( Str ( Form_1.Browse_1.Value ) ) ITEM 'Refresh Browse' ACTION Form_1.Browse_1.Refresh SEPARATOR ITEM 'Get Struct' ACTION ( astr := dbstruct(), MsgInfo ( astr[1][2], astr[1][1] ) ) SEPARATOR ITEM 'Exit' ACTION Form_1.Release END POPUP POPUP 'Help' ITEM 'About' ACTION MsgInfo ("MiniGUI Browse Demo") END POPUP END MENU DEFINE STATUSBAR STATUSITEM '' END STATUSBAR @ 10,10 BROWSE Browse_1 ; WIDTH 610 ; HEIGHT 390 ; HEADERS { 'Code' , 'First Name' , 'Last Name', 'Birth Date', 'Married' , 'Biography' } ; WIDTHS { 100 , 150 , 150 , 150 , 150 , 150 } ; WORKAREA Test ; FIELDS { 'Test->Code' , 'Test->First' , 'Test->Last' , 'Test->Birth' , 'Test->Married' , 'Test->Bio' } ; TOOLTIP 'Browse Test' ; ON CHANGE ChangeTest() ; JUSTIFY { BROWSE_JTFY_RIGHT,BROWSE_JTFY_CENTER, BROWSE_JTFY_CENTER, BROWSE_JTFY_CENTER,BROWSE_JTFY_CENTER,BROWSE_JTFY_CENTER} END WINDOW CENTER WINDOW Form_1 Form_1.Browse_1.SetFocus ACTIVATE WINDOW Form_1 Return Nil Procedure OpenTables() if !file("test.dbf") CreateTable() endif Use Test Via "DBFCDX" Shared Go Top Form_1.Browse_1.Value := RecNo() Return Procedure CloseTables() Use Return Procedure ChangeTest() Form_1.StatusBar.Item(1) := 'RecNo() ' + Alltrim ( Str ( RecNo ( ) ) ) Return Procedure CreateTable LOCAL aDbf[6][4], i aDbf[1][ DBS_NAME ] := "Code" aDbf[1][ DBS_TYPE ] := "+" aDbf[1][ DBS_LEN ] := 4 aDbf[1][ DBS_DEC ] := 0 // aDbf[2][ DBS_NAME ] := "First" aDbf[2][ DBS_TYPE ] := "Character" aDbf[2][ DBS_LEN ] := 25 aDbf[2][ DBS_DEC ] := 0 // aDbf[3][ DBS_NAME ] := "Last" aDbf[3][ DBS_TYPE ] := "Character" aDbf[3][ DBS_LEN ] := 25 aDbf[3][ DBS_DEC ] := 0 // aDbf[4][ DBS_NAME ] := "Married" aDbf[4][ DBS_TYPE ] := "Logical" aDbf[4][ DBS_LEN ] := 1 aDbf[4][ DBS_DEC ] := 0 // aDbf[5][ DBS_NAME ] := "Birth" aDbf[5][ DBS_TYPE ] := "Date" aDbf[5][ DBS_LEN ] := 8 aDbf[5][ DBS_DEC ] := 0 // aDbf[6][ DBS_NAME ] := "Bio" aDbf[6][ DBS_TYPE ] := "Memo" aDbf[6][ DBS_LEN ] := 10 aDbf[6][ DBS_DEC ] := 0 // DBCREATE("Test", aDbf, "DBFCDX") Use test Via "DBFCDX" For i:= 1 To 100 append blank Replace First With 'First Name '+ Str(i) Replace Last With 'Last Name '+ Str(i) Replace Married With .t. replace birth with date()+i-10000 Next i delete all for recno()%10==0 PACK Use Return [/pre2]

Andrey: Ну спасибо БОЛЬШОЕ ! Значит можно применять у себя в задачах ! Вот только для новых типов полей нет программ просмотра, кроме программы dbedit !

Vlad04: Вот только для новых типов полей нет программ просмотра А.Кресина консольные просмотрщики нормально открывают. Фильтровать можно по ключевому полю, редактировать все остальные поля,кроме autoinc ,но так оно и должно быть.

Andrey: Искал по форуму, не нашёл. Хотя помню, что уже спрашивал... Как определить, есть ли такая переменная в программе. Т.е. определена ли GLOBAL переменная или нет ?

Dima: Andrey пишет: Как определить, есть ли такая переменная в программе. http://clipper.borda.ru/?1-4-0-00000671-000-0-0-1313577707 PS Писать надо было не в этой теме а во ФЛЕЙМЕ

Andrey: Спасибо !

Dima: Andrey пишет: переменная в программе вбиваем это в поиск , жмем плюсик с права и ставим галю искать все слова .....всего одна страничка результат

Andrey: Пытаюсь работать с новым типом поля "+" AutoInc 4 Auto increment Есть база с полем ID тип "+". Допустим numba - учетный уникальный номер в этой базе (сплошной). Нужно ли делать индексный файл по этому полю для поиска типа SEEK(numba) или можно обойтись DBGOTO(numba) ??? А если база была упакована, то можно проверить IF FIELD->ID # numba .... Что будет быстрей ? Проще наверно без доп. индекса. Но может я и неправ. Подскажите пожалуйста.

SergKis: Andrey пишет:Проще наверно без доп. индекса. Но может я и неправ Не надо путать (совмещать) + и RecNo. Пример (в dbf 1000 записей) copy to 10 записей, delete их же и pack, append from тех же десяти записей и получим LastRec такой же, а RecNo не совпадает с ID +. Выводы делай сам

Sergy: Andrey пишет: А если база была упакована, то можно проверить IF FIELD->ID # numba .... Что будет быстрей ? Проще наверно без доп. индекса. Но может я и неправ. Подскажите пожалуйста. GOTO будет ВСЕГДА быстрей. Потому что сначала идет вычисление по индексу, после чего - GOTO на нужную запись. Если таблица наподобие справочника, из которого никогда не будут удаляться записи (id) - тогда можно не использовать "+" autoinc поле, достаточно будет RECNO() в качестве идентификатора. Во всех остальных случаях (COPY TO, APPEND FROM..., PACK..., SORT...) - без уникального ID не обойтись. И autoinc-поле вполне надежный помощник в данном случае.

SergKis: Sergy пишет:Если таблица наподобие справочника, то вполне можно и locate обойтись и наличие индекса на + не большая нагрузка. Если вы один разработчик базы, то можно рассчитывать на работу без pack и применения утилит типа dbedit (продвинутым пользователем), иначе возможны риски ..., а так да "autoinc-поле вполне надежный помощник"

Andrey: Вывожу поле "=" или "@" через cValToChar((Alias())->TS) Получаю только "19.08.15" Как правильно выводить ?

SergKis: Andrey Пробуй: HB_TSTOSTR HB_TTOC HB_TTOD HB_TTON HB_TTOS HB_STOT HB_STRTOTS

Dima: Andrey HB_TSTOSTR (HB_DATETIME()) остальное не пробовал , так что пробуй , Сергей верно написал.

Andrey: Dima пишет: HB_TSTOSTR (HB_DATETIME()) То что надо !

Dima: Получил в логе (у клиента) ошибку 9006 hb_xgrab при создании индекса локально. У себя повторить тот же момент не смог. Правда у меня там косяк был типа index on str(cod,6)+skl_in TAG (zk) где zk:=TMMP+alltrim(left(sys_name,5))+"zwk" а переменная TMMP равна getenv("TEMP")+"\" но у меня не падает зараза Имя тега обрежется (проверил) если задано шибко длинное. Переделал на index on str(cod,6)+skl_in TAG tmp2 , буду наблюдать. PS DBFCDX

MIKHAIL: Попробовал добавить в БД тип поля AI + при открытии в ADS выдает ошибка, такой тип ADS не поддерживает?

Dima: MIKHAIL Глянь HELP http://devzone.advantagedatabase.com/dz/webhelp/advantage9.0/server1/dbf_field_types_and_specifications.htm Насколько я понял из сырца тип надо указать как "+"

MIKHAIL: Dima пишет: Насколько я понял из сырца тип надо указать как "+" Да, создает, но тип фалов ADSVFP, тип поля при этом определяет как числовой. У меня есть некоторые сомнения, если потом буду на Letodb переводить, будет ли он понимать эти таблицы или лучше не париться а использовать числовое поле и уникальный индекс в DBFCDX ?

Dima: MIKHAIL пишет: будет ли он понимать эти таблицы я бы проверил , но чую что должен понимать.

Haz: В ADS есть все типы полей. Догадываюсь что AI это автоинкремент В ADS поле называется AUTOINC. Все поддердиваемые типы есть в справе

Andrey: Использую в DBFCDX поле "+" AutoInc. Раньше (ещё в клипере) вёл свой AutoInc через отдельную базу. Хочу переделать. Можно ли как то изменить этот номер ? Нужно проставить свои значения в поле AutoInc.

SergKis: Andrey пишет:Можно ли как то изменить этот номер ? Поле защищено от записи. Свои значения можно получить в поле создав базу в последовательности старых значений и заполнив "дырки"

Andrey: SergKis пишет: Поле защищено от записи. В других базах это поле править можно ! Очень жалко... SergKis пишет: Свои значения можно получить в поле создав базу в последовательности старых значений и заполнив "дырки" Да дебилизм получается... У меня ID свой у некоторых заказчиках очень большой есть, типа 2315032. В своё время делал разноску по филиалам и надавал большие ID филиалам. Дырки заполнять не надо, пускай остаются. Со справочниками улиц тоже фигня получается. Лет 15 назад сделал его, переделать на новое поле получается нельзя.

SergKis: Andrey пишет: У меня ID свой у некоторых заказчиках очень большой Думаю путаешь Autoincrement (+1 с фиксацией в заголовке dbf) и логический ID записи, формируемый какими то алгоритмами.

Andrey: SergKis пишет: логический ID записи, формируемый какими то алгоритмами. Да вот захотел этот свой логический ID переделать на правильный AutoInc.

Sergy: Думаю, реально запросить у разработчиков место хранения инкрементного поля Harbour тут: https://groups.google.com/forum/#!forum/harbour-users После чего двоичным редактором поправить на нужное значение. Либо функция RDDI_*, DBI_* какая-то отвечает за это... Так же стоит обратить внимание на алгоритм работы autoinc полей в случае команды APPEND FROM: в принимающей базе эти поля продолжат наращивать свое значение последовательно, вне зависимости от значения полей источника. Это позволяет исключить ситуацию появления двух одинаковых значений.

Петр: Andrey пишет: Использую в DBFCDX поле "+" AutoInc. Раньше (ещё в клипере) вёл свой AutoInc через отдельную базу. Хочу переделать. Можно ли как то изменить этот номер ? Нужно проставить свои значения в поле AutoInc. Для новых наработок используйте "I:+", 8, например dbCreate( "tablewithai", { { "AI", "I:+", 8, 0 } } ) Тогда и поле менять сможете, и "большой ID" использовать Кстати, через ..опу, можете попробовать старые справочники импортировать.

Andrey: Петр пишет: Для новых наработок используйте "I:+", 8, Что за новый тип поля ?

Dima: Andrey пишет: Что за новый тип поля ? Петр все же описал :) До кучи [pre2] 2015-02-17 16:35 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) * src/rdd/dbf1.c + added support for autoincrement fields with counter longer then 4 bytes Warning: if someone created tables with such fields i.e. { "I:+", 8, 0 } after my modification which added support for AutoInc flags in all numeric DBF fields then he should update counters manually using DBS_COUNTER flag. New code uses 64bit counters for such field located in different part of DBFFIELD structure. [/pre2]

Andrey: А есть примеры как это делать ? DBS_COUNTER flag - как его использовать ?

Dima: Andrey пишет: DBS_COUNTER flag - как его использовать ? Инфа на подумать... [pre2] 2012-06-18 17:33 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) * harbour/include/dbinfo.ch * harbour/src/rdd/dbf1.c + added new dbFieldInfo() actions: DBS_COUNTER - get/set autoincrement field counter DBS_STEP - get/set autoincrement field step * reset autoincrement and row version fields in ZAP operation [/pre2]

Dima: Видать так dbFieldInfo( DBS_COUNTER, FieldPos( <cFieldName> ) )

Петр: Dima пишет: Видать так dbFieldInfo( DBS_COUNTER, FieldPos( <cFieldName> ) ) В этом случае мы получим текущее значение счетчика для поля <cFieldName> А так мы можем его изменить oldCounterValue := dbFieldInfo( DBS_COUNTER, FieldPos( <cFieldName> ), newCounterValue ) dbCreate( "tableWithAI", { { "AI", "I:+", 8, 0 } } ) USE tableWithAI NEW dbFieldInfo( DBS_COUNTER, FieldPos( "AI" ), 10 ) dbFieldInfo( DBS_STEP, FieldPos( "AI" ), 2 ) FOR i := 1 TO 3 APPEND BLANK NEXT i FOR i := 1 TO 3 dbGoto(i) ? FIELD->AI NEXT i dbGoto(2) FIELD->AI := 11 FOR i := 1 TO 3 dbGoto(i) ? FIELD->AI NEXT i USE И еще по типам данных полей БД 2015-02-08 13:19 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) * src/rdd/workarea.c + added support for field flags in dbCreate()/dbStruct(). Flags can be passed in string with field type after ":", i.e. "C:U" means Unicode character field. The following flags are recognized: "N" - column can store null values "B" - binary column "+" - column is autoincrementing "Z" - column is compressed "E" - column is encrypted "U" - column stores Unicode strings

Andrey: Петр пишет: И еще по типам данных полей БД "Z" - column is compressed "E" - column is encrypted Это что за интересный тип полей ? Т.е. можно туда допустим текстовый файл передать, он будет храниться в архивном виде ? Какая длина поля максимальная по этому типу ? А другой тип для чего ? Всё интересней и интересней...

Петр: Andrey пишет: Это что за интересный тип полей ? Это не тип полей, это свойства полей, т.н. "field flags" - i.e. "C:Z" или "M:Z" или "B:Z" Т.е. поле символьное сжатое или мемо сжатое или.. Andrey пишет: Какая длина поля максимальная по этому типу ? см. выше Andrey пишет: А другой тип для чего ? опять-таки не тип, а поле символьное зашифрованое или мемо зашифрованое или.. Andrey пишет: Т.е. можно туда допустим текстовый файл передать, он будет храниться в архивном виде ? Храниться будет в том виде, в котором поместите. До сих пор за все манипуляции с полями dbf файла отвечает программист. Автоматически ничего не будет ни сжиматься, на шифроваться. По крайней мере сейчас, дальше все могет быть. Так что или ждите или пишите usrrdd, используйте hb_gzipio - "полуфабрикатов" в harbour предостаточно.

Andrey: Петр пишет: dbCreate( "tableWithAI", { { "AI", "I:+", 8, 0 } } ) Добавил такое поле в базу. При создании базы счётчик есть. После этого при добавлении записей - поле по нулям. Т.е. нет приращения в поле. Пробовал в утилите Павла - dbedit.exe

Dima: Andrey пишет: Пробовал в утилите Павла - dbedit.exe Пробовать надо не в утилите Она не понимает формат поля "I:+" Проверил работает , смотри пример выше , Петр давал. Но Harbour должен быть не старее чем февраль 2015 , иначе ни куя не сработает. Кроме того не известно каким Harbour собран Dbedit

Andrey: Dima пишет: Но Harbour должен быть не старее чем февраль 2015 Собирал на новом МиниГуи, там Харбор свежее. А хХарбор поддерживает эти типы полей ?

Dima: Andrey пишет: Собирал на новом МиниГуи, там Харбор свежее. Значит там работает

Andrey: Dima пишет: А глянь пример C:\MiniGUI\SAMPLES\Advanced\RibbonBar\ Спасибо Дима ! То что нужно. Там вверху стоит FIELD NOMBRE,DIRECCION,LOCALIDAD,PAIS,CODPOST,;

Dima: Andrey А темку я перенес по ходу http://clipper.borda.ru/?1-4-0-00001153-000-0-0-1473335505

Andrey: Всем привет. Сделал года два назад своё поле IMZ типа: @ DayTime 8 Date & Time Сергей ранее писал про него, что туда нужно самому писать. Ничего в него не писал никогда, сейчас собрался его подключить и вижу, что некоторые записи уже исправлены: Как такое могло случиться ? Блин, как в кино: не виновата я, он сам пришёл....

Dima: Andrey пишет: Как такое могло случиться ? Сам и записал , но забыл как обычно

Andrey: Dima пишет: Сам и записал , но забыл как обычно Да обыскал все свои исходники - нет у меня записи нигде в поле IMZ. Может ли такое случить (самопроизвольно) если базы копировались из одной в другою ?

Pasha: В поле @ aka TimeStamp dbfcdx автоматически записывает время последнего изменения текущей записи.

Andrey: Уф... Теперь стало понятней. А какое поле можно сделать для своего редактирования для типа поля TimeStamp ?

SergKis: ChangLog.txt. 2009-11-25 19:10 ; Current field type mappings are: C; Character,n HB_FT_STRING,n ADS_STRING N; Numeric,n,d HB_FT_LONG,n,d ADS_NUMERIC D; Date,n HB_FT_DATE,3 or 4 or 8 ADS_COMPACTDATE; ADS_DATE ShortDate HB_FT_DATE,3 ADS_COMPACTDATE L; Logical HB_FT_LOGICAL,1 ADS_LOGICAL M; Memo,n HB_FT_MEMO,4 or 9 or 8 ADS_MEMO B; Double,,d HB_FT_DOUBLE,8,d ADS_DOUBLE I; Integer,n HB_FT_INTEGER, 2 or 4 or 8 ADS_SHORTINT; ADS_INTEGER; ADS_LONGLONG ShortInt HB_FT_INTEGER,2 ADS_SHORTINT Longlong HB_FT_INTEGER,8 ADS_LONGLONG P; Image HB_FT_IMAGE,9 or 10 ADS_IMAGE W; Binary HB_FT_BLOB,4 or 9 or 10 ADS_BINARY Y; Money HB_FT_CURRENCY,8,4 ADS_MONEY Z; CurDouble,,d HB_FT_CURDOUBLE,8,d ADS_CURDOUBLE T,4; Time HB_FT_TIME,4 ADS_TIME @; T,8; TimeStamp HB_FT_TIMESTAMP,8 ADS_TIMESTAMP +; AutoInc HB_FT_AUTOINC,4 ADS_AUTOINC ^; RowVersion HB_FT_ROWVER,8 ADS_ROWVERSION =; ModTime HB_FT_MODTIME,8 ADS_MODTIME Raw,n HB_FT_STRING,n (+HB_FF_BINARY) ADS_RAW Q; VarChar,n HB_FT_VARLENGTH,n ADS_VARCHAR; ADS_VARCHAR_FOX VarBinary,n HB_FT_VARLENGTH,n (+HB_FF_BINARY) ADS_VARBINARY_FOX; ADS_RAW CICharacter,n HB_FT_STRING,n ADS_CISTRING

Sergy: Pasha пишет: В поле @ aka TimeStamp dbfcdx автоматически записывает время последнего изменения текущей записи. Уверен, что Harbour сам никогда ничего не пишет в поле типа "@" (FT_TIMESTAMP). Потому что для этого предназначено поле типа "=" (FT_MODTIME). Andrey пишет: А какое поле можно сделать для своего редактирования для типа поля TimeStamp ? Уточню - что указанное поведение полей "@" и "=" относится к Harbour. Как с этим в xH - не в курсе.

SergKis: Sergy для xhb ставим RddInfo( RDDI_TABLETYPE, DB_DBF_VFP ) и тоже ок. letodb 1-ой версии (2х поточная) сервер собирался на xhb, это использует, на клиент не передаются такие поя, но с триггером на сервере ок.

Pasha: Sergy пишет: Уверен, что Harbour сам никогда ничего не пишет в поле типа "@" (FT_TIMESTAMP). Потому что для этого предназначено поле типа "=" (FT_MODTIME). В Harbour это так. А в xHarbour в функции hb_dbfUpdateStampFields время пишется и в HB_FT_TIMESTAMP, и в HB_FT_MODTIME

Andrey: Pasha пишет: В Harbour это так. А в xHarbour в функции hb_dbfUpdateStampFields время пишется и в HB_FT_TIMESTAMP, и в HB_FT_MODTIME Понял я в чем дело. У меня базы работают одновременно и с терминалкой (хХарбор) и на МиниГуи (Харбор). Значит это мне терминалка пишет всякую фигню в базу. От терминалки юзера не хотят отказываться, придётся пока это поле "@" пока не трогать. Поставил в начале базы новые типы полей и все вьювера перестали работать. Нечего юзерам лазить по базам.

Haz: Andrey пишет: От терминалки юзера не хотят отказываться, придётся пока это поле "@" пока не трогать. Перекомпилируй под харбур и все, можешь трогать. Все же в харбур более адекватная работа с этими полями.

Andrey: Haz пишет: Перекомпилируй под харбур и все, можешь трогать. Все же в харбур более адекватная работа с этими полями. Да уже не хочется заморачиваться с терминалкой. Заканчиваю перевод проекта на МиниГуи, а старый проект хочу сворачивать.



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