Автор | Сообщение |
|
| постоянный участник
|
Пост N: 2827
Зарегистрирован: 12.09.06
|
|
Отправлено: 06.05.13 12:38. Заголовок: Новые типы переменных ?
Подскажите пожалуйста, а с какого времени существуют новые типы данных в базах Харбор/хХарбор ? + 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. Ошибка - Скрытый текст 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
| Может что не так делаю ?
|
|
|
Ответов - 158
, стр:
1
2
3
4
5
6
7
8
All
[только новые]
|
|
|
| |
Пост N: 3135
Зарегистрирован: 17.05.05
|
|
Отправлено: 06.05.13 13:25. Заголовок: Andrey пишет: Подск..
Andrey пишет: цитата: | Подскажите пожалуйста, а с какого времени существуют новые типы данных в базах Харбор/хХарбор ? |
| c 2009 вроде
|
|
|
|
| Администратор
|
Пост N: 2869
Зарегистрирован: 23.05.05
|
|
Отправлено: 07.05.13 09:07. Заголовок: Andrey пишет: Неисп..
Andrey пишет: цитата: | Неисправимая ошибка 9006: hb_xgrab не может распределить память |
| Это ошибка выделения памяти. Здесь действуют несколько ограничений: 1. Максимальный размер символьной переменной 2. Максимальный размер мемо-поля Какие там ограничения - 2Г или больше - сразу не скажу 3. Ограничение на выделение памяти (размер физической или виртуальной памяти). В мемо-поле данные записываются целиком, поэтому и считать файл в память надо целиком. Но это плохое решение - загонять гигабайты в мемо-поле. Оно все-таки для этого не предназначено.
|
|
|
|
| постоянный участник
|
Пост N: 2830
Зарегистрирован: 12.09.06
|
|
Отправлено: 07.05.13 15:38. Заголовок: Pasha пишет: Но это..
Pasha пишет: цитата: | Но это плохое решение - загонять гигабайты в мемо-поле. Оно все-таки для этого не предназначено. |
| Согласен. Просто протестировал по максиму. Думаю 1-5 Мб размер файла картинки будет нормально для базы ? И какое поле базы лучше использовать для картинок (jpg, bmp...) ? M Memo P Picture B Blob V VarField И для чего нужно поле типа "V" (если уже есть M, P, B) ?
|
|
|
|
| Администратор
|
Пост N: 2870
Зарегистрирован: 23.05.05
|
|
Отправлено: 07.05.13 15:50. Заголовок: Andrey пишет: Думаю..
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
|
|
|
|
| постоянный участник
|
Пост N: 3093
Зарегистрирован: 12.09.06
|
|
Отправлено: 17.11.13 11:05. Заголовок: Подскажите пожалуйст..
Подскажите пожалуйста, как можно переделать свой dbf под новое поле: + AutoInc (Auto increment). Дело в том что у меня есть в базе поле ID записи, которое я веду сам. Хочу сделать новое ID2, но с сохранением значений ID (база чистилась и ID идут не по порядку RECNO() ). Как это сделать ?
|
|
|
|
| постоянный участник
|
Пост N: 3168
Зарегистрирован: 12.09.06
|
|
Отправлено: 15.12.13 15:04. Заголовок: Поставил в базу поле..
Поставил в базу поле 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 - Как получить правильный тип поля базы ? Как сделать правильно ?
|
|
|
|
| Администратор
|
Пост N: 3091
Зарегистрирован: 23.05.05
|
|
Отправлено: 15.12.13 15:33. Заголовок: Поле AutoInc не пред..
Поле AutoInc не предназначено для изменения. Оно заполняется автоматически при добавлении записи. При попытке что-либо записать в поле возникает ошибка EDBF_DATATYPE
|
|
|
|
| постоянный участник
|
Пост N: 3169
Зарегистрирован: 12.09.06
|
|
Отправлено: 15.12.13 18:33. Заголовок: Pasha пишет: Поле A..
Pasha пишет: цитата: | Поле AutoInc не предназначено для изменения. |
| А как тогда получить, что это тип поля AutoInc ? VALTYPE(FIELD->ID) возвращает N !
|
|
|
|
| |
Пост N: 3756
Зарегистрирован: 17.05.05
|
|
Отправлено: 15.12.13 19:22. Заголовок: Andrey пишет: А как..
Andrey пишет: цитата: | А как тогда получить, что это тип поля AutoInc ? |
| Пробни HB_FIELDTYPE()
|
|
|
|
| постоянный участник
|
Пост N: 419
Зарегистрирован: 13.10.05
|
|
Отправлено: 15.12.13 19:52. Заголовок: А как объявить поле..
А как объявить поле Auto increment ? Только программно ? Во вьюверах ничего такого нет.
|
|
|
|
| |
Пост N: 3757
Зарегистрирован: 17.05.05
|
|
Отправлено: 15.12.13 20:11. Заголовок: Vlad04 пишет: А как..
Vlad04 пишет: цитата: | А как объявить поле Auto increment ? |
| вероятно тип поля "+" типа так dbcreate("test",{{"tst","n",1,0},{"incrtest","+",3,0}},,.t.)
|
|
|
|
|
| постоянный участник
|
Пост N: 3170
Зарегистрирован: 12.09.06
|
|
Отправлено: 15.12.13 20:56. Заголовок: Vlad04 пишет: Тольк..
Vlad04 пишет: цитата: | Только программно ? Во вьюверах ничего такого нет. |
| Пашина утилита dbedit.exe - позволяет делать это. Да и многое другое !!!
|
|
|
|
| постоянный участник
|
Пост N: 3171
Зарегистрирован: 12.09.06
|
|
Отправлено: 15.12.13 21:02. Заголовок: Dima пишет: Пробни ..
Dima пишет: Возвращает пустую строчку. У меня хХарбор 1.2.3
|
|
|
|
| |
Пост N: 3758
Зарегистрирован: 17.05.05
|
|
Отправлено: 15.12.13 21:11. Заголовок: Andrey пишет: Возвр..
Andrey пишет: цитата: | Возвращает пустую строчку |
| Нет у меня хХарбор ;) Попробуй для теста Harbour , он же есть у тебя. Хотя кто знает может в хХарбор нужно юзать FIELDTYPE() , не проверял.
|
|
|
|
| |
Пост N: 3759
Зарегистрирован: 17.05.05
|
|
Отправлено: 15.12.13 21:14. Заголовок: Andrey пишет: Возвр..
Andrey пишет: цитата: | Возвращает пустую строчку. |
| Hb_fieldtype(номер поля) // норм работает
|
|
|
|
| постоянный участник
|
Пост N: 3172
Зарегистрирован: 12.09.06
|
|
Отправлено: 15.12.13 21:23. Заголовок: Dima пишет: Hb_fiel..
Dima пишет: цитата: | Hb_fieldtype(номер поля) // норм работает |
| Да - работает ! Описание в Хелпе по хХарбору нет, а я поставил имя поля.... Из-за этого и не сработало раньше. Спасибо БОЛЬШОЕ Дима !
|
|
|
|
| |
Пост N: 104
Зарегистрирован: 03.12.08
|
|
Отправлено: 16.12.13 20:31. Заголовок: Andrey вроде Вы испо..
Andrey вроде Вы используете DBF для хранения картинок ? У меня задача такая-же . Нужно помимо прочих стоково/числовых значений ещё и фото товара . Посоветуйте как лучше сделать ? На сегодняшний день я картинки держу в MEMO ... и перед просмотром записываю в файл и соответсвенно показ . Чую что есть лучшее решение .... HARBOUR + MiniGui
|
|
|
|
| |
Пост N: 3761
Зарегистрирован: 17.05.05
|
|
Отправлено: 16.12.13 20:40. Заголовок: Softlog86 Зачем так..
Softlog86 Зачем так усложнять ? Храните картинки как они есть в отдельной папке.
|
|
|
|
| |
Пост N: 383
Зарегистрирован: 08.07.06
|
|
Отправлено: 16.12.13 22:02. Заголовок: Dima пишет: Softlog..
Dima пишет: цитата: | Softlog86 Зачем так усложнять ? Храните картинки как они есть в отдельной папке. |
| +1 Если артикулов много - значит много будет картинок. Зачем нагружать систему, сваливая все в одну кучу, если можно удобно и комфортно хранить jpg файлы в отдельном каталоге ? Добавлю, что картинки (в отличие от самой БД) в большинстве случаев меняются гораздо реже, поэтому - какой смысл регулярно бекапить статичную по сути информацию ?
|
|
|
|
| постоянный участник
|
Пост N: 3174
Зарегистрирован: 12.09.06
|
|
Отправлено: 16.12.13 23:12. Заголовок: Softlog86 пишет: Н..
Softlog86 пишет: цитата: | На сегодняшний день я картинки держу в MEMO ... и перед просмотром записываю в файл и соответсвенно показ . Чую что есть лучшее решение .... HARBOUR + MiniGui |
| 1) Надо не забыть, что и в HARBOUR'e можно показывать картинки в терминале GTWVT. Смотрите примеры терминала GTWVT (он сейчас по другому называется GTWVG) или мой пример с фонтами (я его здесь на форуме выкладывал). 2) Можно сделать внешний показ картинки на МиниГуи - см. пример библиотеки - сохранения и показ графических файлов в базе формата DBFCDX в папке samples\Basic\Image2Dbf 3) Можно базу и показ товара сразу сделать на МиниГуи. Типа такого: Но это сложно. Я пока сам разбираюсь. Все зависит от конкретной задачи. Какие картинки нужно показывать, как часто их показывать и т.д. Выбор ваш. Если большие картинк, то может и не нужно их в базе хранить. Не знаю. Я раньше doc файлы хранил в базе, потом отказался, потому что база пухнет и копии файлов хранить неудобно.
|
|
|
|
| |
Пост N: 105
Зарегистрирован: 03.12.08
|
|
Отправлено: 17.12.13 10:46. Заголовок: У меня вся программа..
У меня вся программа на HARBOUR в GUI (MiniGUI) . Почему храню в одном файле ? 1) Файлов очень много ( больше 4-х тысяч) - нагрузка на файловую систему большая и это чувствуется ...... 2) С точки зрения интеллектуальной собственности ( трудов на создание графики было потрачено ого-го) - так что украсть картинки становится сложнее 3) Компактность всей системы : мне проще хранить несколько тысяч картинок в 1-м ( по правде в 2-х файлах :DBF + FPT ) = 170 МБ в общем - тема хранения в отдельном каталоге пофайлово не рассматривается . До этого вся графика зиповалась с паролем и доставалась для показа - но были потери во времени и иногда программа самопроизвольно вываливалась ( не смог победить) ...
|
|
|
|
|
| постоянный участник
|
Пост N: 3176
Зарегистрирован: 12.09.06
|
|
Отправлено: 17.12.13 11:51. Заголовок: Softlog86 пишет: До..
Softlog86 пишет: цитата: | До этого вся графика зиповалась с паролем и доставалась для показа |
| JPG-файл зиповать бесполезно... Лучше его криптовать - HB_Crypt(). Softlog86 пишет: цитата: | иногда программа самопроизвольно вываливалась ( не смог победить) |
| Записывай графику в базу с помощью функций из примера samples\Basic\Image2Dbf
|
|
|
|
| постоянный участник
|
Пост N: 149
Зарегистрирован: 29.05.10
|
|
Отправлено: 17.12.13 12:25. Заголовок: Softlog86 пишет: 2)..
Softlog86 пишет: цитата: | 2) С точки зрения интеллектуальной собственности ( трудов на создание графики было потрачено ого-го) |
| А можно увидеть хотя бы одну единственную? Andrey пишет: цитата: | JPG-файл зиповать бесполезно... |
| Почему?
|
|
|
|
| |
Пост N: 106
Зарегистрирован: 03.12.08
|
|
Отправлено: 17.12.13 12:47. Заголовок: Зиповал не для умень..
Зиповал не для уменьшения объема ( JPG сам по себе сжат) .... а ради сохранения всех файлов в одном хранилище с невозможностью достать из него ( конечнно умельцы смогут ... но какими средствами) Как я уже написал выше , цель спрятать картинки - чтоб конкурентам не упрощать работу .... пусть сами делают фото всех своих товаров ..... Пока ( уже три года) записываю в MEMO и меня в общем-то устраивает .... :) Не зная алгоритма выдернуть картинку из этого мемо не получится ..... так как ещё пишутся кой-какие ключи ... да и байты не в прямом порядке как они идут в настоящем JPG ...... в общем своего рода двойное криптование . Не в этом суть . Я спрашивал про запись JPG в поля новых типов .... Всем откликнувшимся - С П А С И Б О !!!!
|
|
|
|
| постоянный участник
|
Пост N: 3177
Зарегистрирован: 12.09.06
|
|
Отправлено: 17.12.13 13:31. Заголовок: HB_Crypt() лучшая фу..
HB_Crypt() лучшая функция для защиты, чем pkzip с ключом. Если писать в мемо поле fpt, то при некоторых значениях в строке, будет вылет базы, т.е. строку нужно преобразовать, заменить chr(26) и chr(0). Лучше картинки держать в P Picture или B Blob. Но как работать с этим я не знаю. Пробовал сделать пример не получилось. База не создается. Может кто даст примеры по работе с такими переменными ?
|
|
|
|
| постоянный участник
|
Пост N: 282
Зарегистрирован: 17.02.12
|
|
Отправлено: 17.12.13 13:46. Заголовок: Softlog86 пишет: ино..
Softlog86 пишет: цитата: | иногда программа самопроизвольно вываливалась ( не смог победить) |
| Попробуйте расставить в программе принудительную сборку мусора. У прогр. на MiniGui, при разрастании режимов, появляются такие особенности - у нас это было так. Вставка hb_gcAll(.T.) перед созданием окон - помогла.
|
|
|
|
| |
Пост N: 107
Зарегистрирован: 03.12.08
|
|
Отправлено: 17.12.13 21:10. Заголовок: На базе image2dbf и ..
На базе image2dbf и делалось .... :) . А тут прочитал что есть новые типы полей и задумался ......
|
|
|
|
| постоянный участник
|
Пост N: 3311
Зарегистрирован: 12.09.06
|
|
Отправлено: 31.03.14 11:36. Заголовок: Всем привет. Вот опя..
Всем привет. Вот опять вопрос про поле AutoInc (Auto increment): Как этот тип поля надежен в плане уникального ID ? Если в базе удалять записи, а потом сделать pack базы, ID по всей базе не изменится ? Кто пользуется этим типом поля ? Поделитесь опытом.
|
|
|
|
| Администратор
|
Пост N: 3143
Зарегистрирован: 23.05.05
|
|
Отправлено: 31.03.14 13:09. Заголовок: Тест показал, что по..
Тест показал, что после pack значения autoinc полей не изменяются.
|
|
|
|
| moderator
|
Пост N: 574
Зарегистрирован: 11.02.10
|
|
Отправлено: 31.03.14 13:40. Заголовок: Pasha пишет: Тест п..
Pasha пишет: цитата: | Тест показал, что после pack значения autoinc полей не изменяются. |
| Подтверждаю. Мой тестовый пример см. ниже Скрытый текст
/* * 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
|
|
|
|
|
| постоянный участник
|
Пост N: 3312
Зарегистрирован: 12.09.06
|
|
Отправлено: 31.03.14 15:14. Заголовок: Ну спасибо БОЛЬШОЕ !..
Ну спасибо БОЛЬШОЕ !
|
|
|
|
|
| постоянный участник
|
Пост N: 427
Зарегистрирован: 13.10.05
|
|
Отправлено: 01.04.14 13:35. Заголовок: Вот только для новых..
цитата: | Вот только для новых типов полей нет программ просмотра |
| А.Кресина консольные просмотрщики нормально открывают. Фильтровать можно по ключевому полю, редактировать все остальные поля,кроме autoinc ,но так оно и должно быть.
|
|
|
|
| постоянный участник
|
Пост N: 3910
Зарегистрирован: 12.09.06
|
|
Отправлено: 21.01.15 17:25. Заголовок: Искал по форуму, не ..
Искал по форуму, не нашёл. Хотя помню, что уже спрашивал... Как определить, есть ли такая переменная в программе. Т.е. определена ли GLOBAL переменная или нет ?
|
|
|
|
| |
Пост N: 4413
Зарегистрирован: 17.05.05
|
|
Отправлено: 21.01.15 17:42. Заголовок: Andrey пишет: Как о..
|
|
|
|
| постоянный участник
|
Пост N: 3911
Зарегистрирован: 12.09.06
|
|
Отправлено: 21.01.15 19:06. Заголовок: Спасибо ! :sm36: ..
Спасибо !
|
|
|
|
| |
Пост N: 4414
Зарегистрирован: 17.05.05
|
|
Отправлено: 21.01.15 22:30. Заголовок: Andrey пишет: перем..
Andrey пишет: вбиваем это в поиск , жмем плюсик с права и ставим галю искать все слова .....всего одна страничка результат
|
|
|
|
| постоянный участник
|
Пост N: 4385
Зарегистрирован: 12.09.06
|
|
Отправлено: 17.07.15 10:46. Заголовок: Пытаюсь работать с н..
Пытаюсь работать с новым типом поля "+" AutoInc 4 Auto increment Есть база с полем ID тип "+". Допустим numba - учетный уникальный номер в этой базе (сплошной). Нужно ли делать индексный файл по этому полю для поиска типа SEEK(numba) или можно обойтись DBGOTO(numba) ??? А если база была упакована, то можно проверить IF FIELD->ID # numba .... Что будет быстрей ? Проще наверно без доп. индекса. Но может я и неправ. Подскажите пожалуйста.
|
|
|
|
| постоянный участник
|
Пост N: 764
Зарегистрирован: 17.02.12
|
|
Отправлено: 17.07.15 10:56. Заголовок: Andrey пишет:Проще н..
Andrey пишет: цитата: | Проще наверно без доп. индекса. Но может я и неправ |
| Не надо путать (совмещать) + и RecNo. Пример (в dbf 1000 записей) copy to 10 записей, delete их же и pack, append from тех же десяти записей и получим LastRec такой же, а RecNo не совпадает с ID +. Выводы делай сам
|
|
|
|
| |
Пост N: 466
Зарегистрирован: 08.07.06
|
|
Отправлено: 17.07.15 12:33. Заголовок: Andrey пишет: А есл..
Andrey пишет: цитата: | А если база была упакована, то можно проверить IF FIELD->ID # numba .... Что будет быстрей ? Проще наверно без доп. индекса. Но может я и неправ. Подскажите пожалуйста. |
| GOTO будет ВСЕГДА быстрей. Потому что сначала идет вычисление по индексу, после чего - GOTO на нужную запись. Если таблица наподобие справочника, из которого никогда не будут удаляться записи (id) - тогда можно не использовать "+" autoinc поле, достаточно будет RECNO() в качестве идентификатора. Во всех остальных случаях (COPY TO, APPEND FROM..., PACK..., SORT...) - без уникального ID не обойтись. И autoinc-поле вполне надежный помощник в данном случае.
|
|
|
|
| постоянный участник
|
Пост N: 765
Зарегистрирован: 17.02.12
|
|
Отправлено: 17.07.15 12:53. Заголовок: Sergy пишет:Если таб..
Sergy пишет: цитата: | Если таблица наподобие справочника, |
| то вполне можно и locate обойтись и наличие индекса на + не большая нагрузка. Если вы один разработчик базы, то можно рассчитывать на работу без pack и применения утилит типа dbedit (продвинутым пользователем), иначе возможны риски ..., а так да "autoinc-поле вполне надежный помощник"
|
|
|
|
| постоянный участник
|
Пост N: 4455
Зарегистрирован: 12.09.06
|
|
Отправлено: 19.08.15 16:48. Заголовок: Вывожу поле "=..
Вывожу поле "=" или "@" через cValToChar((Alias())->TS) Получаю только "19.08.15" Как правильно выводить ?
|
|
|
|
|
| постоянный участник
|
Пост N: 795
Зарегистрирован: 17.02.12
|
|
Отправлено: 19.08.15 18:44. Заголовок: Andrey Пробуй: HB_T..
Andrey Пробуй: HB_TSTOSTR HB_TTOC HB_TTOD HB_TTON HB_TTOS HB_STOT HB_STRTOTS
|
|
|
|
| |
Пост N: 5234
Зарегистрирован: 17.05.05
|
|
Отправлено: 19.08.15 21:27. Заголовок: Andrey HB_TSTOSTR (..
Andrey HB_TSTOSTR (HB_DATETIME()) остальное не пробовал , так что пробуй , Сергей верно написал.
|
|
|
|
| постоянный участник
|
Пост N: 4457
Зарегистрирован: 12.09.06
|
|
Отправлено: 19.08.15 23:37. Заголовок: Dima пишет: HB_TSTO..
Dima пишет: цитата: | HB_TSTOSTR (HB_DATETIME()) |
| То что надо !
|
|
|
|
| |
Пост N: 5437
Зарегистрирован: 17.05.05
|
|
Отправлено: 26.12.15 22:43. Заголовок: Получил в логе (у кл..
Получил в логе (у клиента) ошибку 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
|
|
|
|
| |
Пост N: 150
Зарегистрирован: 05.10.06
|
|
Отправлено: 16.04.16 16:22. Заголовок: Попробовал добавить ..
Попробовал добавить в БД тип поля AI + при открытии в ADS выдает ошибка, такой тип ADS не поддерживает?
|
|
|
|
| |
Пост N: 5604
Зарегистрирован: 17.05.05
|
|
Отправлено: 16.04.16 16:54. Заголовок: MIKHAIL Глянь HELP ..
|
|
|
|
| |
Пост N: 151
Зарегистрирован: 05.10.06
|
|
Отправлено: 16.04.16 21:21. Заголовок: Dima пишет: Насколь..
Dima пишет: цитата: | Насколько я понял из сырца тип надо указать как "+" |
| Да, создает, но тип фалов ADSVFP, тип поля при этом определяет как числовой. У меня есть некоторые сомнения, если потом буду на Letodb переводить, будет ли он понимать эти таблицы или лучше не париться а использовать числовое поле и уникальный индекс в DBFCDX ?
|
|
|
|
| |
Пост N: 5605
Зарегистрирован: 17.05.05
|
|
Отправлено: 16.04.16 21:32. Заголовок: MIKHAIL пишет: буде..
MIKHAIL пишет: цитата: | будет ли он понимать эти таблицы |
| я бы проверил , но чую что должен понимать.
|
|
|
|
| |
Пост N: 891
Зарегистрирован: 20.02.11
|
|
Отправлено: 16.04.16 23:00. Заголовок: В ADS есть все тип..
В ADS есть все типы полей. Догадываюсь что AI это автоинкремент В ADS поле называется AUTOINC. Все поддердиваемые типы есть в справе
|
|
|
|
| постоянный участник
|
Пост N: 4866
Зарегистрирован: 12.09.06
|
|
Отправлено: 24.04.16 18:09. Заголовок: Использую в DBFCDX п..
Использую в DBFCDX поле "+" AutoInc. Раньше (ещё в клипере) вёл свой AutoInc через отдельную базу. Хочу переделать. Можно ли как то изменить этот номер ? Нужно проставить свои значения в поле AutoInc.
|
|
|
|
| постоянный участник
|
Пост N: 957
Зарегистрирован: 17.02.12
|
|
Отправлено: 24.04.16 19:05. Заголовок: Andrey пишет:Можно л..
Andrey пишет: цитата: | Можно ли как то изменить этот номер ? |
| Поле защищено от записи. Свои значения можно получить в поле создав базу в последовательности старых значений и заполнив "дырки"
|
|
|
|
| постоянный участник
|
Пост N: 4868
Зарегистрирован: 12.09.06
|
|
Отправлено: 24.04.16 19:48. Заголовок: SergKis пишет: Поле..
SergKis пишет: В других базах это поле править можно ! Очень жалко... SergKis пишет: цитата: | Свои значения можно получить в поле создав базу в последовательности старых значений и заполнив "дырки" |
| Да дебилизм получается... У меня ID свой у некоторых заказчиках очень большой есть, типа 2315032. В своё время делал разноску по филиалам и надавал большие ID филиалам. Дырки заполнять не надо, пускай остаются. Со справочниками улиц тоже фигня получается. Лет 15 назад сделал его, переделать на новое поле получается нельзя.
|
|
|
|
| постоянный участник
|
Пост N: 958
Зарегистрирован: 17.02.12
|
|
Отправлено: 24.04.16 20:21. Заголовок: Andrey пишет: У меня..
Andrey пишет: цитата: | У меня ID свой у некоторых заказчиках очень большой |
| Думаю путаешь Autoincrement (+1 с фиксацией в заголовке dbf) и логический ID записи, формируемый какими то алгоритмами.
|
|
|
|
| постоянный участник
|
Пост N: 4869
Зарегистрирован: 12.09.06
|
|
Отправлено: 24.04.16 20:44. Заголовок: SergKis пишет: лог..
SergKis пишет: цитата: | логический ID записи, формируемый какими то алгоритмами. |
| Да вот захотел этот свой логический ID переделать на правильный AutoInc.
|
|
|
|
| |
Пост N: 490
Зарегистрирован: 08.07.06
|
|
Отправлено: 25.04.16 11:21. Заголовок: Думаю, реально запро..
Думаю, реально запросить у разработчиков место хранения инкрементного поля Harbour тут: https://groups.google.com/forum/#!forum/harbour-users После чего двоичным редактором поправить на нужное значение. Либо функция RDDI_*, DBI_* какая-то отвечает за это... Так же стоит обратить внимание на алгоритм работы autoinc полей в случае команды APPEND FROM: в принимающей базе эти поля продолжат наращивать свое значение последовательно, вне зависимости от значения полей источника. Это позволяет исключить ситуацию появления двух одинаковых значений.
|
|
|
|
| постоянный участник
|
Пост N: 1189
Зарегистрирован: 09.10.06
|
|
Отправлено: 25.04.16 23:49. Заголовок: Andrey пишет: Испол..
Andrey пишет: цитата: | Использую в DBFCDX поле "+" AutoInc. Раньше (ещё в клипере) вёл свой AutoInc через отдельную базу. Хочу переделать. Можно ли как то изменить этот номер ? Нужно проставить свои значения в поле AutoInc. |
| Для новых наработок используйте "I:+", 8, например dbCreate( "tablewithai", { { "AI", "I:+", 8, 0 } } ) Тогда и поле менять сможете, и "большой ID" использовать Кстати, через ..опу, можете попробовать старые справочники импортировать.
|
|
|
|
| постоянный участник
|
Пост N: 4871
Зарегистрирован: 12.09.06
|
|
Отправлено: 26.04.16 10:14. Заголовок: Петр пишет: Для нов..
Петр пишет: цитата: | Для новых наработок используйте "I:+", 8, |
| Что за новый тип поля ?
|
|
|
|
| |
Пост N: 5628
Зарегистрирован: 17.05.05
|
|
Отправлено: 26.04.16 10:19. Заголовок: Andrey пишет: Что з..
Andrey пишет: Петр все же описал :) До кучи 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.
|
|
|
|
| постоянный участник
|
Пост N: 4872
Зарегистрирован: 12.09.06
|
|
Отправлено: 26.04.16 10:41. Заголовок: А есть примеры как э..
А есть примеры как это делать ? DBS_COUNTER flag - как его использовать ?
|
|
|
|
| |
Пост N: 5629
Зарегистрирован: 17.05.05
|
|
Отправлено: 26.04.16 11:49. Заголовок: Andrey пишет: DBS_C..
Andrey пишет: цитата: | DBS_COUNTER flag - как его использовать ? |
| Инфа на подумать... 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
|
|
|
|
| |
Пост N: 5630
Зарегистрирован: 17.05.05
|
|
Отправлено: 26.04.16 12:13. Заголовок: Видать так dbFieldIn..
Видать так dbFieldInfo( DBS_COUNTER, FieldPos( <cFieldName> ) )
|
|
|
|
| постоянный участник
|
Пост N: 1190
Зарегистрирован: 09.10.06
|
|
Отправлено: 26.04.16 19:51. Заголовок: Dima пишет: Видать ..
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 |
|
|
|
|
|
| постоянный участник
|
Пост N: 4874
Зарегистрирован: 12.09.06
|
|
Отправлено: 26.04.16 21:15. Заголовок: Петр пишет: И еще п..
Петр пишет: цитата: | И еще по типам данных полей БД "Z" - column is compressed "E" - column is encrypted |
| Это что за интересный тип полей ? Т.е. можно туда допустим текстовый файл передать, он будет храниться в архивном виде ? Какая длина поля максимальная по этому типу ? А другой тип для чего ? Всё интересней и интересней...
|
|
|
|
| постоянный участник
|
Пост N: 1191
Зарегистрирован: 09.10.06
|
|
Отправлено: 26.04.16 23:07. Заголовок: Andrey пишет: Это ч..
Andrey пишет: цитата: | Это что за интересный тип полей ? |
| Это не тип полей, это свойства полей, т.н. "field flags" - i.e. "C:Z" или "M:Z" или "B:Z" Т.е. поле символьное сжатое или мемо сжатое или.. Andrey пишет: цитата: | Какая длина поля максимальная по этому типу ? |
| см. выше Andrey пишет: опять-таки не тип, а поле символьное зашифрованое или мемо зашифрованое или.. Andrey пишет: цитата: | Т.е. можно туда допустим текстовый файл передать, он будет храниться в архивном виде ? |
| Храниться будет в том виде, в котором поместите. До сих пор за все манипуляции с полями dbf файла отвечает программист. Автоматически ничего не будет ни сжиматься, на шифроваться. По крайней мере сейчас, дальше все могет быть. Так что или ждите или пишите usrrdd, используйте hb_gzipio - "полуфабрикатов" в harbour предостаточно.
|
|
|
|
| постоянный участник
|
Пост N: 4992
Зарегистрирован: 12.09.06
|
|
Отправлено: 06.07.16 02:31. Заголовок: Петр пишет: dbCreat..
Петр пишет: цитата: | dbCreate( "tableWithAI", { { "AI", "I:+", 8, 0 } } ) |
| Добавил такое поле в базу. При создании базы счётчик есть. После этого при добавлении записей - поле по нулям. Т.е. нет приращения в поле. Пробовал в утилите Павла - dbedit.exe
|
|
|
|
| |
Пост N: 5841
Зарегистрирован: 17.05.05
|
|
Отправлено: 06.07.16 08:26. Заголовок: Andrey пишет: Пробо..
Andrey пишет: цитата: | Пробовал в утилите Павла - dbedit.exe |
| Пробовать надо не в утилите Она не понимает формат поля "I:+" Проверил работает , смотри пример выше , Петр давал. Но Harbour должен быть не старее чем февраль 2015 , иначе ни куя не сработает. Кроме того не известно каким Harbour собран Dbedit
|
|
|
|
| постоянный участник
|
Пост N: 4993
Зарегистрирован: 12.09.06
|
|
Отправлено: 06.07.16 12:03. Заголовок: Dima пишет: Но Harb..
Dima пишет: цитата: | Но Harbour должен быть не старее чем февраль 2015 |
| Собирал на новом МиниГуи, там Харбор свежее. А хХарбор поддерживает эти типы полей ?
|
|
|
|
| |
Пост N: 5842
Зарегистрирован: 17.05.05
|
|
Отправлено: 06.07.16 12:32. Заголовок: Andrey пишет: Собир..
Andrey пишет: цитата: | Собирал на новом МиниГуи, там Харбор свежее. |
| Значит там работает
|
|
|
|
| постоянный участник
|
Пост N: 5091
Зарегистрирован: 12.09.06
|
|
Отправлено: 08.09.16 14:55. Заголовок: Dima пишет: А глянь..
Dima пишет: цитата: | А глянь пример C:\MiniGUI\SAMPLES\Advanced\RibbonBar\ |
| Спасибо Дима ! То что нужно. Там вверху стоит FIELD NOMBRE,DIRECCION,LOCALIDAD,PAIS,CODPOST,;
|
|
|
|
| |
Пост N: 6004
Зарегистрирован: 17.05.05
|
|
Отправлено: 08.09.16 15:00. Заголовок: Andrey А темку я пе..
|
|
|
|
| постоянный участник
|
Пост N: 5711
Зарегистрирован: 12.09.06
|
|
Отправлено: 03.02.18 11:18. Заголовок: Всем привет. Сделал ..
Всем привет. Сделал года два назад своё поле IMZ типа: @ DayTime 8 Date & Time Сергей ранее писал про него, что туда нужно самому писать. Ничего в него не писал никогда, сейчас собрался его подключить и вижу, что некоторые записи уже исправлены: Как такое могло случиться ? Блин, как в кино: не виновата я, он сам пришёл....
|
|
|
|
| |
Пост N: 6717
Зарегистрирован: 17.05.05
|
|
Отправлено: 03.02.18 17:59. Заголовок: Andrey пишет: Как т..
Andrey пишет: цитата: | Как такое могло случиться ? |
| Сам и записал , но забыл как обычно
|
|
|
|
| постоянный участник
|
Пост N: 5712
Зарегистрирован: 12.09.06
|
|
Отправлено: 03.02.18 21:34. Заголовок: Dima пишет: Сам и з..
Dima пишет: цитата: | Сам и записал , но забыл как обычно |
| Да обыскал все свои исходники - нет у меня записи нигде в поле IMZ. Может ли такое случить (самопроизвольно) если базы копировались из одной в другою ?
|
|
|
|
| Администратор
|
Пост N: 3664
Зарегистрирован: 23.05.05
|
|
Отправлено: 05.02.18 09:57. Заголовок: В поле @ aka TimeSta..
В поле @ aka TimeStamp dbfcdx автоматически записывает время последнего изменения текущей записи.
|
|
|
|
| постоянный участник
|
Пост N: 5715
Зарегистрирован: 12.09.06
|
|
Отправлено: 05.02.18 13:21. Заголовок: Уф... Теперь стало п..
Уф... Теперь стало понятней. А какое поле можно сделать для своего редактирования для типа поля TimeStamp ?
|
|
|
|
| постоянный участник
|
Пост N: 1716
Зарегистрирован: 17.02.12
|
|
Отправлено: 05.02.18 13:36. Заголовок: ChangLog.txt. 2009-1..
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 |
|
|
|
|
|
| |
Пост N: 574
Зарегистрирован: 08.07.06
|
|
Отправлено: 05.02.18 23:31. Заголовок: Pasha пишет: В поле..
Pasha пишет: цитата: | В поле @ aka TimeStamp dbfcdx автоматически записывает время последнего изменения текущей записи. |
| Уверен, что Harbour сам никогда ничего не пишет в поле типа "@" (FT_TIMESTAMP). Потому что для этого предназначено поле типа "=" (FT_MODTIME). Andrey пишет: цитата: | А какое поле можно сделать для своего редактирования для типа поля TimeStamp ? |
| Уточню - что указанное поведение полей "@" и "=" относится к Harbour. Как с этим в xH - не в курсе.
|
|
|
|
| постоянный участник
|
Пост N: 1717
Зарегистрирован: 17.02.12
|
|
Отправлено: 05.02.18 23:43. Заголовок: Sergy :sm36: для ..
Sergy для xhb ставим RddInfo( RDDI_TABLETYPE, DB_DBF_VFP ) и тоже ок. letodb 1-ой версии (2х поточная) сервер собирался на xhb, это использует, на клиент не передаются такие поя, но с триггером на сервере ок.
|
|
|
|
| Администратор
|
Пост N: 3665
Зарегистрирован: 23.05.05
|
|
Отправлено: 06.02.18 08:03. Заголовок: Sergy пишет: Уверен..
Sergy пишет: цитата: | Уверен, что Harbour сам никогда ничего не пишет в поле типа "@" (FT_TIMESTAMP). Потому что для этого предназначено поле типа "=" (FT_MODTIME). |
| В Harbour это так. А в xHarbour в функции hb_dbfUpdateStampFields время пишется и в HB_FT_TIMESTAMP, и в HB_FT_MODTIME
|
|
|
|
| постоянный участник
|
Пост N: 5716
Зарегистрирован: 12.09.06
|
|
Отправлено: 06.02.18 08:58. Заголовок: Pasha пишет: В Harb..
Pasha пишет: цитата: | В Harbour это так. А в xHarbour в функции hb_dbfUpdateStampFields время пишется и в HB_FT_TIMESTAMP, и в HB_FT_MODTIME |
| Понял я в чем дело. У меня базы работают одновременно и с терминалкой (хХарбор) и на МиниГуи (Харбор). Значит это мне терминалка пишет всякую фигню в базу. От терминалки юзера не хотят отказываться, придётся пока это поле "@" пока не трогать. Поставил в начале базы новые типы полей и все вьювера перестали работать. Нечего юзерам лазить по базам.
|
|
|
|
| |
Пост N: 1172
Зарегистрирован: 20.02.11
|
|
Отправлено: 06.02.18 20:01. Заголовок: Andrey пишет: От те..
Andrey пишет: цитата: | От терминалки юзера не хотят отказываться, придётся пока это поле "@" пока не трогать. |
| Перекомпилируй под харбур и все, можешь трогать. Все же в харбур более адекватная работа с этими полями.
|
|
|
|
| постоянный участник
|
Пост N: 5717
Зарегистрирован: 12.09.06
|
|
Отправлено: 06.02.18 20:41. Заголовок: Haz пишет: Перекомп..
Haz пишет: цитата: | Перекомпилируй под харбур и все, можешь трогать. Все же в харбур более адекватная работа с этими полями. |
| Да уже не хочется заморачиваться с терминалкой. Заканчиваю перевод проекта на МиниГуи, а старый проект хочу сворачивать.
|
|
|
|
| постоянный участник
|
Пост N: 6062
Зарегистрирован: 12.09.06
|
|
Отправлено: 27.09.18 22:55. Заголовок: AADD( aDbf , {"D..
AADD( aDbf , {"DT_ADD" ,"T", 8, 0 } ) // RDD-TimeStamp дата+время+миллисекунды Пишу в поле для теста : t1 := hb_DateTime() t2 := hb_NtoT( hb_TtoN( t1 ) - nI * 100 ) ? "t1=",t1, "t2=",t2, Valtype(t2) (TEMPDBF)->DT_ADD := t2 // дату+время вставки записи В отладке так: t1= 2018-09-27 22:37:03.755 t2= 2018-06-19 22:37:03.755 T t1= 2018-09-27 22:37:03.774 t2= 2018-03-11 22:37:03.774 T t1= 2018-09-27 22:37:03.792 t2= 2017-12-01 22:37:03.792 T t1= 2018-09-27 22:37:03.81 t2= 2017-08-23 22:37:03.81 T t1= 2018-09-27 22:37:03.828 t2= 2017-05-15 22:37:03.828 T В базе в поле DT_ADD: 27.09.2018 22:37:03.774 27.09.2018 22:37:03.792 27.09.2018 22:37:03.810 27.09.2018 22:37:03.828 Чудеса ?
|
|
|
|
| постоянный участник
|
Пост N: 2076
Зарегистрирован: 17.02.12
|
|
Отправлено: 28.09.18 05:49. Заголовок: Andrey пишет Чудеса ..
Andrey пишет Не знаю, но догадываюсь как ты их творишь. t1 := hb_DateTime() t2 := hb_NtoT( hb_TtoN( t1 ) - nI * 100 ) (TEMPDBF)->DT_DEL := t1 (TEMPDBF)->DT_REST := t2 dbSkip(0) ? "t1=",t1, "t2=",t2, 'DT_DEL=',(TEMPDBF)->DT_DEL,'DT_REST',(TEMPDBF)->DT_REST результат t1= 2018-09-28 05:41:42.659 t2= 2018-06-20 05:41:42.659 DT_DEL= 2018-09-28 05:41:42.659 DT_REST= 2018-06-20 05:41:42.659 t1= 2018-09-28 05:41:42.675 t2= 2018-03-12 05:41:42.675 DT_DEL= 2018-09-28 05:41:42.675 DT_REST= 2018-03-12 05:41:42.675 t1= 2018-09-28 05:41:42.675 t2= 2017-12-02 05:41:42.675 DT_DEL= 2018-09-28 05:41:42.675 DT_REST= 2017-12-02 05:41:42.675 t1= 2018-09-28 05:41:42.675 t2= 2017-08-24 05:41:42.675 DT_DEL= 2018-09-28 05:41:42.675 DT_REST= 2017-08-24 05:41:42.675 t1= 2018-09-28 05:41:42.691 t2= 2017-05-16 05:41:42.691 DT_DEL= 2018-09-28 05:41:42.691 DT_REST= 2017-05-16 05:41:42.691 ...
|
|
|
|
| Администратор
|
Пост N: 3804
Зарегистрирован: 23.05.05
|
|
Отправлено: 28.09.18 09:22. Заголовок: Andrey пишет: Чудес..
Andrey пишет: А в чем прикол, кроме нехватки одной строки ? Или это шарада типа "Найди 10 различий" ?
|
|
|
|
| постоянный участник
|
Пост N: 2077
Зарегистрирован: 17.02.12
|
|
Отправлено: 28.09.18 09:29. Заголовок: Pasha пишет А в чем ..
Pasha пишет цитата: | А в чем прикол, кроме нехватки одной строки ? Или это шарада типа "Найди 10 различий" ? |
| Просто Андрей, как всегда, просмотрел, что после его команд, стоит (TEMPDBF)->DT_ADD := (TEMPDBF)->TS которая переносит значение из поля '=' ( TS ) в поле DT_ADD. у меня есть вариант prg файла
|
|
|
|
| постоянный участник
|
Пост N: 2078
Зарегистрирован: 17.02.12
|
|
Отправлено: 28.09.18 09:31. Заголовок: PS А хотел он заполн..
PS А хотел он заполнить DT_ADD более ранними значениями TimeStamp
|
|
|
|
| Администратор
|
Пост N: 3805
Зарегистрирован: 23.05.05
|
|
Отправлено: 28.09.18 09:41. Заголовок: Да там странный код ..
Да там странный код какой-то. От даты зачем-то отнимается большое количество дней (если nI - целое, а там фиг его знает). Это можно сделать проще: Вместо: hb_NtoT( hb_TtoN( t1 ) - nI * 100 ) можно сделать просто: t1 - nI * 100 поскольку тип TimeStamp - это просто double, где целая часть - дата, а дробная - время. Ну и наверное что-то еще перепутано с переменными, поскольку DT_ADD получает значение t1.
|
|
|
|
| постоянный участник
|
Пост N: 2079
Зарегистрирован: 17.02.12
|
|
Отправлено: 28.09.18 10:05. Заголовок: Pasha пишет Ну и нав..
Pasha пишет цитата: | Ну и наверное что-то еще перепутано с переменными, поскольку DT_ADD получает значение t1 |
| Путаницы нет, идет добавление записей в тест. таблицу ("мусорные" значения) с полями +,=,^ t1 := hb_DateTime(), в поле DT_ADD пишет t2, а следом идет запись в DT_ADD из поля TS (тип =, rdd заполнение ) т.е. значение t1 и rdd одинаковые, что логично
|
|
|
|
| Администратор
|
Пост N: 3806
Зарегистрирован: 23.05.05
|
|
Отправлено: 28.09.18 11:03. Заголовок: В коде этого же нет,..
В коде этого же нет, а я увы не телепат. Если так, то все понятно, все логично
|
|
|
|
| постоянный участник
|
Пост N: 6063
Зарегистрирован: 12.09.06
|
|
Отправлено: 28.09.18 12:30. Заголовок: SergKis пишет: Прос..
SergKis пишет: цитата: | Просто Андрей, как всегда, просмотрел, что после его команд, стоит (TEMPDBF)->DT_ADD := (TEMPDBF)->TS которая переносит значение из поля '=' ( TS ) в поле DT_ADD. |
| Как всегда Спасибо !
|
|
|
|
| постоянный участник
|
Пост N: 6157
Зарегистрирован: 12.09.06
|
|
Отправлено: 15.01.19 23:57. Заголовок: Можно ли базу Харбор..
Можно ли базу Харбора с новыми полями: + 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 открыть через ADS или локальный клиент ADS ? Сразу возникает вопрос зачем ? А чтобы другой программист мог при логиниться к базе и выбрать нужные записи.
|
|
|
|
| Администратор
|
Пост N: 3823
Зарегистрирован: 23.05.05
|
|
Отправлено: 16.01.19 09:56. Заголовок: Открываем advantage...
Открываем advantage.chm (у меня нашелся для ads 11), ищем раздел DBF Field Types and Specifications там упоминается поля типа AutoInc, TimeStamp RowVer, ModTime похоже нет. Может в более поздних версиях и есть, надо смотреть.
|
|
|
|
| |
Пост N: 6998
Зарегистрирован: 17.05.05
|
|
Отправлено: 16.01.19 10:33. Заголовок: http://devzone.advan..
|
|
|
|
| |
Пост N: 1426
Зарегистрирован: 20.02.11
|
|
Отправлено: 16.01.19 15:11. Заголовок: Эти поля в полном со..
Эти поля в полном составе есть только в нативном формате ADS , т.е в ADT цитата: | А чтобы другой программист мог при логиниться к базе и выбрать нужные записи. |
| другой программист может логиниться и выбирать через DBDCDX , и если нужно , то результат писать в свой ADS . Вобщем проблемы не вижу при работе в харбуре. Если речь идет о доступе из другого языка программирования к расширенным типам полей DBF, то у меня сомнения что это вообще возможно.
|
|
|
|
| постоянный участник
|
Пост N: 6158
Зарегистрирован: 12.09.06
|
|
Отправлено: 16.01.19 15:18. Заголовок: Haz пишет: другой п..
Haz пишет: цитата: | другой программист может логиниться и выбирать через DBDCDX , и если нужно , то результат писать в свой ADS . Вобщем проблемы не вижу |
| Другой программист на Дельфи работает. Вот и хочет получить доступ к моей базе через Дельфи.
|
|
|
|
| |
Пост N: 1427
Зарегистрирован: 20.02.11
|
|
Отправлено: 16.01.19 15:20. Заголовок: Andrey пишет: Друго..
Andrey пишет: цитата: | Другой программист на Дельфи работает. Вот и хочет получить доступ к моей базе через Дельфи. |
|
Скорее всего пусть забудет об этой идее , вопрос не в ADS а в том что RDD в дельфи скорее всего таких типов не знает в DBF
|
|
|
|
| |
Пост N: 1428
Зарегистрирован: 20.02.11
|
|
Отправлено: 16.01.19 15:22. Заголовок: Андрей , если бы тво..
Андрей , если бы твоя база была в ADT , то все получилось бы. Если базы не на теробайты, то проще сделать конвертор DBF->ADT а к ADT дельфист легко цепанется через свой ADS
|
|
|
|
| Администратор
|
Пост N: 3824
Зарегистрирован: 23.05.05
|
|
Отправлено: 16.01.19 16:05. Заголовок: Насколько я помню, д..
Насколько я помню, для Delphi используется клиент от Extend Systems, или кто там его купил-перекупил, наследник TDataSet Так что сами разработчики поддержку своих же типов данных должны были сделать. Другой вопрос, что не все типы данных поддерживает сам Ads
|
|
|
|
| |
Пост N: 1429
Зарегистрирован: 20.02.11
|
|
Отправлено: 16.01.19 16:20. Заголовок: Pasha пишет: Так чт..
Pasha пишет: цитата: | Так что сами разработчики поддержку своих же типов данных должны были сделать. Другой вопрос, что не все типы данных поддерживает сам Ads |
| Так и я об этом же, нативный формат ADS поддерживает все эти типы и компонента доступа к ADS из Delphi соответственно их тоже поймет, но ... в НАТИВНОМ формате ( ADT ) В спецификации DBF от ADS эти поля не поддерживаются полностью ( ModTime и RowVersion не заявлены ) . Это не значит, что вывалит с ошибкой , но и не гарантирует правильное чтение данных . В случае с DBF нужно пробовать ... , а в случае с ADT уже можно работать. Точно сработает если конвертировать средствами харбур базу из DBF в ADT и рыть эту ADT из Delphi
|
|
|
|
| постоянный участник
|
Пост N: 6159
Зарегистрирован: 12.09.06
|
|
Отправлено: 17.01.19 17:27. Заголовок: Haz пишет: Скорее в..
Haz пишет: цитата: | Скорее всего пусть забудет об этой идее , вопрос не в ADS а в том что RDD в дельфи скорее всего таких типов не знает в DBF |
| Haz пишет: цитата: | Если базы не на теробайты, то проще сделать конвертор DBF->ADT а к ADT дельфист легко цепанется через свой ADS |
| Т.е. совместный доступ сразу из Харбора и Дельфи не возможен ? А то Дельфист службу хочет ваять и передавать мои записи куда то через шлюз в другую прогу.
|
|
|
|
| постоянный участник
|
Пост N: 2174
Зарегистрирован: 17.02.12
|
|
Отправлено: 17.01.19 20:01. Заголовок: Andrey пишет А то Де..
Andrey пишет цитата: | А то Дельфист службу хочет ваять и передавать мои записи куда то через шлюз в другую прогу. |
| Ты уверен, что надо напрямую пускать стороннего пользователя в данные клиента из ЧУЖОЙ проги ? Могут возникнуть нюансы. Игорь, по мне, верно предлагает решение export\import
|
|
|
|
| |
Пост N: 1431
Зарегистрирован: 20.02.11
|
|
Отправлено: 17.01.19 20:47. Заголовок: Andrey пишет: Т.е...
Andrey пишет: цитата: | Т.е. совместный доступ сразу из Харбора и Дельфи не возможен |
| Возможен, при стандартных полях, ты же решил использовать расширенные. Отсюда и нюансы
|
|
|
|
| постоянный участник
|
Пост N: 6160
Зарегистрирован: 12.09.06
|
|
Отправлено: 17.01.19 23:23. Заголовок: SergKis пишет: Ты у..
SergKis пишет: цитата: | Ты уверен, что надо напрямую пускать стороннего пользователя в данные клиента из ЧУЖОЙ проги ? Могут возникнуть нюансы. Игорь, по мне, верно предлагает решение export\import |
| Да я предлагал делать выгрузку из своей базы в обычный DBF. Отказался программист, он решил что сам сделает службу, подключаясь напрямую к базе. Там у руководства своё видение, пускай тогда пробует. Посмотрим что будет. Хороший полигон для проверки.
|
|
|
|
| постоянный участник
|
Пост N: 2175
Зарегистрирован: 17.02.12
|
|
Отправлено: 17.01.19 23:43. Заголовок: Andrey пишет Посмотр..
Andrey пишет цитата: | Посмотрим что будет. Хороший полигон для проверки. |
| Если у тебя в базе не деньги, то ... пробовать, можно. Но как отследишь "чужую" модификацию, или слив данных на сторону ?
|
|
|
|
| постоянный участник
|
Пост N: 6161
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.01.19 18:02. Заголовок: SergKis пишет: Если..
SergKis пишет: цитата: | Если у тебя в базе не деньги, то ... пробовать, можно. |
| В том то и дело, что в базе приход оплаты абонентов. Я с себя всякую ответственность снимаю, захотело руководство и пусть у них голова болит...
|
|
|
|
| |
Пост N: 191
Зарегистрирован: 17.10.05
|
|
Отправлено: 20.01.19 13:05. Заголовок: Андрей, я когда-то ..
Андрей, я когда-то на Дельфи применял компонент VKDBF http://vlad-karpov.narod.ru/Components.html#VK%20DBF Он поддерживает 60 разширеных типов полей. CDX-индексы тоже. Глянь, может вашему дельфисту сгодится. Я одновременно работал с Делфи и Харбором с одной базой dbf-файлов.
|
|
|
|
| постоянный участник
|
Пост N: 6163
Зарегистрирован: 12.09.06
|
|
Отправлено: 21.01.19 00:03. Заголовок: krutoff пишет: Я од..
krutoff пишет: цитата: | Я одновременно работал с Делфи и Харбором с одной базой dbf-файлов. |
| Спасибо БОЛЬШОЕ !
|
|
|
|
| постоянный участник
|
Пост N: 6164
Зарегистрирован: 12.09.06
|
|
Отправлено: 22.01.19 15:44. Заголовок: Pasha пишет: Поле A..
Pasha пишет: цитата: | Поле AutoInc не предназначено для изменения. Оно заполняется автоматически при добавлении записи. При попытке что-либо записать в поле возникает ошибка EDBF_DATATYPE |
| Если есть такое поле в базе, то при переносе в новую базу значение таких полей автоматом переноситься из старой базы ? Сделал небольшой тест, вроде переносятся. Хочется точно знать.
|
|
|
|
| |
Пост N: 1432
Зарегистрирован: 20.02.11
|
|
Отправлено: 22.01.19 20:56. Заголовок: Andrey пишет: Хочет..
Andrey пишет: Не переносятся! Не должны. Заполняются автоматом в новой базе в порядке добавления записей. Переносить умеют только системы бекап/ресторе.
|
|
|
|
| постоянный участник
|
Пост N: 6165
Зарегистрирован: 12.09.06
|
|
Отправлено: 23.01.19 11:48. Заголовок: Haz пишет: Не перен..
Haz пишет: цитата: | Не переносятся! Не должны. |
| Беру утилиту dbedit, открываю уже созданную базу, удаляю все записи AutoInc до 20-29 и после 32, т.е. делаю разрыв нумерации в базе. Потом делаю PACK. Создаю новую базу, добавляю из другой базы (меню: Операция, меню: Добавить из файла) и результат - ВСЕ записи в новой базе !
|
|
|
|
| |
Пост N: 1433
Зарегистрирован: 20.02.11
|
|
Отправлено: 23.01.19 12:45. Заголовок: Andrey пишет: ВСЕ ..
Andrey пишет: цитата: | ВСЕ записи в новой базе ! |
| Могу только поздравить! Видимо счетчик тикает только при dbAppend() Append From и Copy To его не изменяют. Даже не знаю это баг или фича
|
|
|
|
| |
Пост N: 44
Зарегистрирован: 22.01.14
|
|
Отправлено: 23.01.19 15:33. Заголовок: Andrey пишет: ВСЕ за..
Andrey пишет: цитата: | ВСЕ записи в новой базе ! |
| А если в тест добавить добавление нескольких новых записей? Как "ведет" себя поле AutoInc?
|
|
|
|
| постоянный участник
|
Пост N: 6166
Зарегистрирован: 12.09.06
|
|
Отправлено: 23.01.19 16:14. Заголовок: Haz пишет: Append F..
Haz пишет: цитата: | Append From и Copy To его не изменяют. Даже не знаю это баг или фича |
| Нужно тогда у Паши спросить, как он в своей утилите DBEDIT копирует записи из другой базы ? ZAlex пишет: цитата: | А если в тест добавить добавление нескольких новых записей? Как "ведет" себя поле AutoInc? |
| Проверил. Добавляет по счётчику, т.е. если в базе был 34 номер, то следующая запись становиться 35.
|
|
|
|
| постоянный участник
|
Пост N: 2177
Зарегистрирован: 17.02.12
|
|
Отправлено: 23.01.19 17:09. Заголовок: Andrey пишет Провери..
Andrey пишет цитата: | Проверил. Добавляет по счётчику |
| Небольшая правка Tsb_Basic\demo.prg показывает как работает AutoInc Скрытый текст
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
|
|
|
|
|
| |
Пост N: 1434
Зарегистрирован: 20.02.11
|
|
Отправлено: 24.01.19 00:05. Заголовок: SergKis пишет: как ..
SergKis пишет: Тоесть. При Copy to сохраняется значение, в остальных переприсввивание по счётчику
|
|
|
|
| |
Пост N: 6999
Зарегистрирован: 17.05.05
|
|
Отправлено: 24.01.19 00:28. Заголовок: Andrey пишет: Нужно..
|
|
|
|
| постоянный участник
|
Пост N: 2178
Зарегистрирован: 17.02.12
|
|
Отправлено: 24.01.19 01:22. Заголовок: Haz пишет Тоесть. Пр..
Haz пишет цитата: | Тоесть. При Copy to сохраняется значение, в остальных переприсввивание по счётчику |
| Да, при copy to сохраняется значение, при dbcreate счетчик с 0. dbappend, append from увеличивают счетчик в заголовке dbf. dbdelete + pack меняют только lastrec()
|
|
|
|
| постоянный участник
|
Пост N: 6731
Зарегистрирован: 12.09.06
|
|
Отправлено: 24.06.20 12:09. Заголовок: Всем привет ! Вот на..
|
|
|
|
| Администратор
|
Пост N: 3962
Зарегистрирован: 23.05.05
|
|
Отправлено: 25.06.20 13:46. Заголовок: dBASE Version 7 - эт..
dBASE Version 7 - это продукт еще из прошлого века, со своим форматом, там имя поля может быть до 32-х символов. Харбор его не поддерживает. Что касается номера версии dbf - это сигнатура файла, его первый байт, то стандартными средствами харбора его считать нельзя
|
|
|
|
| |
Пост N: 256
Зарегистрирован: 05.11.05
|
|
Отправлено: 25.06.20 22:55. Заголовок: Pasha пишет: станда..
Pasha пишет: цитата: | стандартными средствами харбора его считать нельзя |
| Любой файл можно прочитать. Просто как файл, не dbf.
|
|
|
|
| Администратор
|
Пост N: 3963
Зарегистрирован: 23.05.05
|
|
Отправлено: 26.06.20 09:00. Заголовок: Стандарт - это получ..
Стандарт - это получить средствами rdd. Все остальное - неформат. Например, в pArea есть структура dbfHeader, в которой этот байт уже есть, и файл читать не надо
|
|
|
|
| постоянный участник
|
Пост N: 3271
Зарегистрирован: 17.02.12
|
|
Отправлено: 26.06.20 10:50. Заголовок: rvu пишет Любой файл..
rvu пишет цитата: | Любой файл можно прочитать. Просто как файл, не dbf |
| Не все так просто. Например установка cdp в dbf не держится, точно уже не помню, но после закрытия dbf терялась. Пробовали устанавливать, правда, еще на hb 2.0 потом забросили с cdp. Ф-я была такая HB_FUNC( DBSETCDP ) { AREAP pArea = hb_rddGetCurrentWorkAreaPointer(); if( pArea && ISCHAR(1) ) { char * pCdp = hb_parc(1); if( pCdp ) pArea->cdPage = hb_cdpFind( (char *) pCdp ); } }
|
|
|
|
| постоянный участник
|
Пост N: 6734
Зарегистрирован: 12.09.06
|
|
Отправлено: 01.07.20 14:56. Заголовок: Всё понятно, что про..
Всё понятно, что прочитать какой формат DBF - это сложно. А есть список какие типы DBF может читать Харбор ? Я так понял что не все DBF можно открыть Харбором.
|
|
|
|
| постоянный участник
|
Пост N: 6799
Зарегистрирован: 12.09.06
|
|
Отправлено: 27.08.20 20:07. Заголовок: Беру поле базы "..
Беру поле базы "T" и загоняю в System.Clipboard := cValToChar(oBrw:GetValue(nCol)) Как эту строку записать в другое поле "T" ? Пробовал так, что то не та функция: xWrt := HB_STRTOTS( System.Clipboard ) oBrw:SetValue(nCol, xWrt)
|
|
|
|
| постоянный участник
|
Пост N: 6801
Зарегистрирован: 12.09.06
|
|
Отправлено: 27.08.20 23:05. Заголовок: Ответ получил, xWrt ..
Ответ получил, xWrt := hb_CToT( System.Clipboard )
|
|
|
|
| постоянный участник
|
Пост N: 6994
Зарегистрирован: 12.09.06
|
|
Отправлено: 17.07.21 21:07. Заголовок: Есть такие преобразо..
Есть такие преобразования поля: tRecno := SKLAD->TSZ // тип поля "=", RDD-TimeStamp дата+время+миллисекунды ? HB_TSTOSTR( tRecno ) , '"' + VALTYPE( HB_TSTOSTR( tRecno ) ) + '"' // "C" 2021-07-03 22:31:58.984 ? HB_TTOC( tRecno ) , '"' + VALTYPE( HB_TTOC( tRecno ) ) + '"' // "C" 03.07.21 22:31:58.984 ? HB_TTOD( tRecno ) , '"' + VALTYPE( HB_TTOD( tRecno ) ) + '"' // "D" 03.07.2021 ? HB_TTON( tRecno ) , '"' + VALTYPE( HB_TTON( tRecno ) ) + '"' // "N" 2459399.94 ? HB_TTOS( tRecno ) , '"' + VALTYPE( HB_TTOS( tRecno ) ) + '"' // "C" 20210703223158984 cDT := HB_TSTOSTR( tRecno ) ? HB_STRTOTS( cDT ) , '"' + VALTYPE( HB_STRTOTS( cDT ) ) + '"' // "T" 2021-07-03 22:31:58.699 ? HB_CToT(cDT) , '"' + VALTYPE( HB_CToT(cDT) ) + '"' // "T" 22:33:09.809 А как можно получить только время - 22:31:58.984 - строку ?
|
|
|
|
| Администратор
|
Пост N: 4038
Зарегистрирован: 23.05.05
|
|
Отправлено: 18.07.21 11:59. Заголовок: А как можно получить..
цитата: | А как можно получить только время - 22:31:58.984 - строку ? |
| Так ответ же сидит прямо в вопросе. Через substr ? substr(hb_ttoc(tRecno), 10)
|
|
|
|
| |
Пост N: 1707
Зарегистрирован: 20.02.11
|
|
Отправлено: 18.07.21 13:24. Заголовок: Andrey пишет: как м..
Andrey пишет: цитата: | как можно получить только время |
|
посмотреть параметры hb_ttoc() и выбрать нужный шаблон
|
|
|
|
| постоянный участник
|
Пост N: 3790
Зарегистрирован: 17.02.12
|
|
Отправлено: 18.07.21 13:29. Заголовок: Andrey пишет А как м..
Andrey пишет цитата: | А как можно получить только время - 22:31:58.984 - строку ? |
| cTime := hb_TtoC( tDateTime ) cTime := Subs( cTime, At(" ", cTime) + 1 ) или cTime := Subs(HB_TSTOSTR( tDateTime ), 12 ) cTime := Subs(HB_TSTOSTR( tDateTime ), 12, 8 ) или cTm1 := cTm2 := "" tDtm := hb_DateTime() tUtc := hb_TSToUTC( tDtm ) HB_TTOD( tDtm, @cTm1, "hh:mm:ss" ) HB_TTOD( tUtc, @cTm2, "hh:mm:ss" )
|
|
|
|
| постоянный участник
|
Пост N: 6996
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.07.21 15:07. Заголовок: Pasha пишет: Так от..
Pasha пишет: цитата: | Так ответ же сидит прямо в вопросе. Через substr ? substr(hb_ttoc(tRecno), 10) |
| Ну это понятно, что можно через substr(), хотелось как правильней. SergKis пишет: цитата: | cTm1 := cTm2 := "" tDtm := hb_DateTime() tUtc := hb_TSToUTC( tDtm ) HB_TTOD( tDtm, @cTm1, "hh:mm:ss" ) HB_TTOD( tUtc, @cTm2, "hh:mm:ss" ) |
| Спасибо !
|
|
|
|
| постоянный участник
|
Пост N: 6997
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.07.21 15:32. Заголовок: Что-то не идёт.... ..
Что-то не идёт.... cTm1 := cTm2 := "" ? 8, tDtm := HB_DATETIME() , '"' + VALTYPE( tDtm ) + '"' ? 9, tUtc := hb_TSToUTC( tDtm ) , '"' + VALTYPE( tUtc ) + '"' ? 10, HB_TTOD( tDtm, @cTm1, "hh:mm:ss" ) , '"' + VALTYPE( HB_TTOD( tDtm, @cTm1, "hh:mm:ss" ) ) + '"' ? 11, HB_TTOD( tUtc, @cTm2, "hh:mm:ss" ) , '"' + VALTYPE( HB_TTOD( tUtc, @cTm2, "hh:mm:ss" ) ) + '"' 8 2021-07-18 15:30:45.254 "T" 9 2021-07-18 12:30:45.254 "T" 10 18.07.2021 "D" 11 18.07.2021 "D"
|
|
|
|
| |
Пост N: 7414
Зарегистрирован: 17.05.05
|
|
Отправлено: 18.07.21 15:55. Заголовок: Лови :sm12: hb_Reg..
Лови hb_Regex( "([\d+]{2}[:][\d+]{2}[:][\d+]{2}[.][\d+]{3})" , hb_ttoc(HB_DATETIME()),.f.)[1]
|
|
|
|
| постоянный участник
|
Пост N: 6998
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.07.21 16:09. Заголовок: Dima пишет: Лови ..
Dima пишет: Спасибо большое ! Но это уже извращение... Хочется понять, какие есть функции в Харборе для этих операций ?
|
|
|
|
| постоянный участник
|
Пост N: 3791
Зарегистрирован: 17.02.12
|
|
Отправлено: 18.07.21 16:12. Заголовок: Andrey cTm1 := cT..
Andrey cTm1 := cTm2 := "" tDtm := hb_DateTime() tUtc := hb_TSToUTC( tDtm ) HB_TTOD( tDtm, @cTm1, "hh:mm:ss" ) HB_TTOD( tUtc, @cTm2, "hh:mm:ss" ) s_nHour := Val(cTm1) - Val(cTm2) ? procname() ? tDtm, cTm1 ? tUtc, cTm2 ? результат GMT2UTC 2021-07-18 16:09:11.557 16:09:11 2021-07-18 13:09:11.557 13:09:11
|
|
|
|
| постоянный участник
|
Пост N: 6999
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.07.21 16:15. Заголовок: SergKis пишет: резу..
SergKis пишет: Ступил... Но мне нужно время полностью 16:09:11.557 ! Как тогда указать формат ?
|
|
|
|
| постоянный участник
|
Пост N: 3792
Зарегистрирован: 17.02.12
|
|
Отправлено: 18.07.21 16:35. Заголовок: Andrey используй ко..
Andrey используй короткое cTime := Subs(HB_TSTOSTR( tDateTime ), 12 ) формат hh:mm:ss.fff
|
|
|
|
| постоянный участник
|
Пост N: 7000
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.07.21 16:38. Заголовок: SergKis пишет: форм..
SergKis пишет: Спасибо БОЛЬШОЕ ! По инету искал и не нашёл, всякую фигню поиск предлагает.
|
|
|
|
| постоянный участник
|
Пост N: 7040
Зарегистрирован: 12.09.06
|
|
Отправлено: 09.09.21 08:53. Заголовок: А как допустим выбра..
А как допустим выбрать все записи по определённой дате по базе, по полю типа "Т" ? Допустим есть база с полем SKLAD->TSZ, нужно выбрать все записи за текущую дату. dDate := DATE() cDate := ???? cFilter := "TSZ == " + cDate + ".AND. !DELETED()" SET FILTER TO &cFilter
|
|
|
|
| постоянный участник
|
Пост N: 3861
Зарегистрирован: 17.02.12
|
|
Отправлено: 09.09.21 10:53. Заголовок: Andrey см. http://c..
|
|
|
|
| постоянный участник
|
Пост N: 7042
Зарегистрирован: 12.09.06
|
|
Отправлено: 09.09.21 18:30. Заголовок: Так правильно ? :sm..
Так правильно ? cFilter := HB_CTOT( SKLAD->TSZ, "YYYYMMDD" ) + "==" + DTOS(dDate) + ".AND. !DELETED()"
|
|
|
|
| постоянный участник
|
Пост N: 3863
Зарегистрирован: 17.02.12
|
|
Отправлено: 09.09.21 21:38. Заголовок: Andrey пишет Так пра..
Andrey пишет Если работает то, да Еще такой вариант cDat := HB_DTOC(Date(), 'YYYY-MM-DD') cFilter := '!DELETED() .AND. "'+cDat+'" $ HB_TSTOSTR( SKLAD->TSZ)'
|
|
|
|
| постоянный участник
|
Пост N: 1694
Зарегистрирован: 09.10.06
|
|
Отправлено: 09.09.21 22:04. Заголовок: Andrey пишет: Так п..
Andrey пишет: цитата: | Так правильно ? cFilter := HB_CTOT( SKLAD->TSZ, " |
| Нет. Если я правильно понял у SKLAD->TSZ тип "T", а HB_CTOT ожидает принять в качестве первого аргумента строку. можно так hb_LeftEq( HB_TTOS(SKLAD->TSZ), DTOS(dDate) ) или так Empty( Int( SKLAD->TSZ - dDate ) ) или через HB_TTOC и т.п.
|
|
|
|
| постоянный участник
|
Пост N: 7049
Зарегистрирован: 12.09.06
|
|
Отправлено: 10.09.21 23:01. Заголовок: Вообще то по датам и..
Вообще то по датам и даже так ищёт: cFilter := "(TSZ>=CTOD('10.09.21').AND.TSZ<=CTOD('25.09.21') ).AND.!Deleted()"
|
|
|
|
| постоянный участник
|
Пост N: 3873
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.09.21 23:55. Заголовок: Andrey пишетпо датам..
Andrey пишет тогда проще можно SET DELETED ON SET FILTER TO TSZ >= 0d20210910 .AND. TSZ <= 0d20210925 GO TOP ... SET DELETED OFF
|
|
|
|
| постоянный участник
|
Пост N: 1696
Зарегистрирован: 09.10.06
|
|
Отправлено: 11.09.21 09:22. Заголовок: Andrey пишет: Но мн..
Andrey пишет: цитата: | Но мне нужно время полностью 16:09:11.557 ! Как тогда указать формат ? |
| "hh:mm:ss.fff" ? dDate := hb_TToD( hb_DateTime(), @cTime, "hh:mm:ss.fff" ) ? hb_DToC(dDate, 'YYYY-MM-DD'), cTime P.S. Я знаю, SergKis написал уже, но просто хотелось еще раз привлечь внимание Андрея к функции hb_TToD. Очень удобна для разбивки переменной (поля) DateTime на Date и Time , с последующим изменением в DATEPICKER и TIMEPICKER (MiniGUI).
|
|
|
|
| постоянный участник
|
Пост N: 1697
Зарегистрирован: 09.10.06
|
|
Отправлено: 11.09.21 10:15. Заголовок: Andrey пишет: Вообщ..
Andrey пишет: цитата: | Вообще то по датам и даже так ищёт |
| Это понятно цитата: | When date and timestamp values are used in <, <=, >, >=, = operations then VM compares only date part in both values. |
| SergKis пишет: цитата: | тогда проще можно SET DELETED ON SET FILTER TO TSZ >= 0d20210910 .AND. TSZ <= 0d20210925 |
| Да, но учтите, что Андрею скорее всего нужно, наверное, SET DELETED ON SET FILTER TO TSZ >= dDate1 .AND. TSZ <= dDate2 или SET FILTER TO TSZ >= tDateTime1 .AND. TSZ <= dDateTime2
|
|
|
|
| постоянный участник
|
Пост N: 3874
Зарегистрирован: 17.02.12
|
|
Отправлено: 11.09.21 10:57. Заголовок: Петр пишет что Андре..
Петр пишет цитата: | что Андрею скорее всего нужно, наверное, SET DELETED ON SET FILTER TO TSZ >= dDate1 .AND. TSZ <= dDate1 |
| Ему нужно вариант от составленной строки SET FILTER TO &('TSZ >= 0d20210910 .AND. TSZ <= 0d20210925') Он пишет выше везде cFilter := "..." и получить 'TSZ >= 0d'+DtoS(dDate1) и.т.д. проще
|
|
|
|
| постоянный участник
|
Пост N: 1698
Зарегистрирован: 09.10.06
|
|
Отправлено: 11.09.21 12:40. Заголовок: SergKis пишет: Ему ..
SergKis пишет: цитата: | Ему нужно вариант от составленной строки |
| Возможно. PUBLIC dDate1, dDate2 SET FILTER TO &('TSZ >= dDate1 .AND. TSZ <= dDate2') - тоже ведь не сложно? Но это детали реализации и предпочтений, в общем - вкусовщина.
|
|
|
|
| постоянный участник
|
Пост N: 3875
Зарегистрирован: 17.02.12
|
|
Отправлено: 11.09.21 14:46. Заголовок: Петр пишет тоже ведь..
Петр пишет Дело не в этом (переменные лучше PRIVATE вместо PUBLIC), а в том что строку фильтра можно сохранить в базе (там не только период но др. данные запроса), обозвав его "Отчет за I квартал ..." и таких строк\отчетов может быть много (создавать их может сам клиент или админ, гл. бух, "начальник транспортного цеха" и т.д.). Использовать хоть удаленный клиент и длительное время. PS В LetoDb строка фильтра должна быть в таком виде, как у Андрея, оптимизированный фильтр. В LetoDbf, кроме такого фильтра, есть механизм переноса PRIVATE, PUBLIC переменных на сторону сервера для исп. в выражении фильтра.
|
|
|
|
| постоянный участник
|
Пост N: 7050
Зарегистрирован: 12.09.06
|
|
Отправлено: 11.09.21 19:31. Заголовок: Спасибо вам БОЛЬШОЕ ..
Спасибо вам БОЛЬШОЕ !
|
|
|
|
| постоянный участник
|
Пост N: 7056
Зарегистрирован: 12.09.06
|
|
Отправлено: 13.09.21 18:11. Заголовок: tDateTime := hb_Date..
tDateTime := hb_DateTime() А как сделать пустую tDateTime ? Для даты есть функция CTOD(""), а здесь как ? И как проверить на пустое значение ? Функция Empty(tDateTime) будет работать ?
|
|
|
|
| постоянный участник
|
Пост N: 1706
Зарегистрирован: 09.10.06
|
|
Отправлено: 13.09.21 20:33. Заголовок: Andrey пишет: А как..
Andrey пишет: цитата: | А как сделать пустую tDateTime ? Для даты есть функция CTOD(""), а здесь как ? |
| hb_CToT("") Andrey пишет: цитата: | Функция Empty(tDateTime) будет работать ? |
| Да. Empty() работает для всех скалярных типов.
|
|
|
|
| постоянный участник
|
Пост N: 7057
Зарегистрирован: 12.09.06
|
|
Отправлено: 14.09.21 01:42. Заголовок: Петр СПАСИБО БОЛЬШОЕ..
Петр СПАСИБО БОЛЬШОЕ !
|
|
|
|
| |
Пост N: 678
Зарегистрирован: 08.07.06
|
|
Отправлено: 15.09.21 12:39. Заголовок: Andrey пишет: Для д..
Andrey пишет: цитата: | Для даты есть функция CTOD(""), |
| Чем не устраивает нулевое значение даты 0d0 ?
|
|
|
|
| постоянный участник
|
Пост N: 7060
Зарегистрирован: 12.09.06
|
|
Отправлено: 15.09.21 14:33. Заголовок: Вопрос был - А как с..
Вопрос был - А как сделать пустую tDateTime ?
|
|
|
|
| Администратор
|
Пост N: 4042
Зарегистрирован: 23.05.05
|
|
Отправлено: 15.09.21 15:43. Заголовок: кроме hb_ctot("&..
кроме hb_ctot("") есть еще hb_datetime(0, 0, 0, 0, 0, 0, 0)
|
|
|
Ответов - 158
, стр:
1
2
3
4
5
6
7
8
All
[только новые]
|
|