Форум » [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

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-поле вполне надежный помощник"



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