Форум » [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 файлы хранил в базе, потом отказался, потому что база пухнет и копии файлов хранить неудобно.



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