On-line: Andrey, гостей 2. Всего: 3 [подробнее..]
АвторСообщение
постоянный участник




Пост 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.
Ошибка - Скрытый текст

Может что не так делаю ?

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 158 , стр: 1 2 3 4 5 6 7 8 All [только новые]


администратор




Пост N: 3135
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.05.13 13:25. Заголовок: Andrey пишет: Подск..


Andrey пишет:

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


c 2009 вроде

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2869
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 07.05.13 09:07. Заголовок: Andrey пишет: Неисп..


Andrey пишет:

 цитата:
Неисправимая ошибка 9006: hb_xgrab не может распределить память



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

Но это плохое решение - загонять гигабайты в мемо-поле. Оно все-таки для этого не предназначено.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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) ?


Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост 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


Спасибо: 1 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3093
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.11.13 11:05. Заголовок: Подскажите пожалуйст..


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

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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 -

Как получить правильный тип поля базы ?
Как сделать правильно ?

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3091
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 15.12.13 15:33. Заголовок: Поле AutoInc не пред..


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

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3169
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.12.13 18:33. Заголовок: Pasha пишет: Поле A..


Pasha пишет:

 цитата:
Поле AutoInc не предназначено для изменения.



А как тогда получить, что это тип поля AutoInc ?

VALTYPE(FIELD->ID) возвращает N !




Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 3756
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 15.12.13 19:22. Заголовок: Andrey пишет: А как..


Andrey пишет:

 цитата:
А как тогда получить, что это тип поля AutoInc ?


Пробни HB_FIELDTYPE()

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 419
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 15.12.13 19:52. Заголовок: А как объявить поле..


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

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 3757
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 15.12.13 20:11. Заголовок: Vlad04 пишет: А как..


Vlad04 пишет:

 цитата:
А как объявить поле Auto increment ?


вероятно тип поля "+"

типа так dbcreate("test",{{"tst","n",1,0},{"incrtest","+",3,0}},,.t.)

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3170
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.12.13 20:56. Заголовок: Vlad04 пишет: Тольк..


Vlad04 пишет:

 цитата:
Только программно ? Во вьюверах ничего такого нет.


Пашина утилита dbedit.exe - позволяет делать это. Да и многое другое !!!

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3171
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.12.13 21:02. Заголовок: Dima пишет: Пробни ..


Dima пишет:

 цитата:
Пробни HB_FIELDTYPE()


Возвращает пустую строчку.
У меня хХарбор 1.2.3

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 3758
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 15.12.13 21:11. Заголовок: Andrey пишет: Возвр..


Andrey пишет:

 цитата:
Возвращает пустую строчку


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

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 3759
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 15.12.13 21:14. Заголовок: Andrey пишет: Возвр..


Andrey пишет:

 цитата:
Возвращает пустую строчку.


Hb_fieldtype(номер поля) // норм работает

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3172
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.12.13 21:23. Заголовок: Dima пишет: Hb_fiel..


Dima пишет:

 цитата:
Hb_fieldtype(номер поля) // норм работает



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


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 104
Зарегистрирован: 03.12.08
ссылка на сообщение  Отправлено: 16.12.13 20:31. Заголовок: Andrey вроде Вы испо..


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

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 3761
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.12.13 20:40. Заголовок: Softlog86 Зачем так..


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

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 383
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 16.12.13 22:02. Заголовок: Dima пишет: Softlog..


Dima пишет:

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


+1
Если артикулов много - значит много будет картинок. Зачем нагружать систему, сваливая все в одну кучу, если можно удобно и комфортно хранить jpg файлы в отдельном каталоге ?

Добавлю, что картинки (в отличие от самой БД) в большинстве случаев меняются гораздо реже, поэтому - какой смысл регулярно бекапить статичную по сути информацию ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




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


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 105
Зарегистрирован: 03.12.08
ссылка на сообщение  Отправлено: 17.12.13 10:46. Заголовок: У меня вся программа..


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

в общем - тема хранения в отдельном каталоге пофайлово не рассматривается . До этого вся графика зиповалась с паролем и доставалась для показа - но были потери во времени и иногда программа самопроизвольно вываливалась ( не смог победить) ...



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3176
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.12.13 11:51. Заголовок: Softlog86 пишет: До..


Softlog86 пишет:

 цитата:
До этого вся графика зиповалась с паролем и доставалась для показа


JPG-файл зиповать бесполезно... Лучше его криптовать - HB_Crypt().

Softlog86 пишет:

 цитата:
иногда программа самопроизвольно вываливалась ( не смог победить)


Записывай графику в базу с помощью функций из примера samples\Basic\Image2Dbf

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 149
Зарегистрирован: 29.05.10
ссылка на сообщение  Отправлено: 17.12.13 12:25. Заголовок: Softlog86 пишет: 2)..


Softlog86 пишет:

 цитата:
2) С точки зрения интеллектуальной собственности ( трудов на создание графики было потрачено ого-го)


А можно увидеть хотя бы одну единственную?

Andrey пишет:

 цитата:
JPG-файл зиповать бесполезно...



Почему?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 106
Зарегистрирован: 03.12.08
ссылка на сообщение  Отправлено: 17.12.13 12:47. Заголовок: Зиповал не для умень..


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


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3177
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.12.13 13:31. Заголовок: HB_Crypt() лучшая фу..


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

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 282
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 17.12.13 13:46. Заголовок: Softlog86 пишет: ино..


Softlog86 пишет:
 цитата:
иногда программа самопроизвольно вываливалась ( не смог победить)


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

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 107
Зарегистрирован: 03.12.08
ссылка на сообщение  Отправлено: 17.12.13 21:10. Заголовок: На базе image2dbf и ..


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


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3311
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 31.03.14 11:36. Заголовок: Всем привет. Вот опя..


Всем привет.
Вот опять вопрос про поле AutoInc (Auto increment):
Как этот тип поля надежен в плане уникального ID ?

Если в базе удалять записи, а потом сделать pack базы, ID по всей базе не изменится ?
Кто пользуется этим типом поля ? Поделитесь опытом.

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3143
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 31.03.14 13:09. Заголовок: Тест показал, что по..


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

Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 574
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 31.03.14 13:40. Заголовок: Pasha пишет: Тест п..


Pasha пишет:

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


Подтверждаю. Мой тестовый пример см. ниже
Скрытый текст


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3312
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 31.03.14 15:14. Заголовок: Ну спасибо БОЛЬШОЕ !..


Ну спасибо БОЛЬШОЕ !
Значит можно применять у себя в задачах !

Вот только для новых типов полей нет программ просмотра, кроме программы dbedit !


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 427
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 01.04.14 13:35. Заголовок: Вот только для новых..



 цитата:
Вот только для новых типов полей нет программ просмотра


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

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3910
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 21.01.15 17:25. Заголовок: Искал по форуму, не ..


Искал по форуму, не нашёл. Хотя помню, что уже спрашивал...

Как определить, есть ли такая переменная в программе.
Т.е. определена ли GLOBAL переменная или нет ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4413
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 21.01.15 17:42. Заголовок: Andrey пишет: Как о..


Andrey пишет:

 цитата:
Как определить, есть ли такая переменная в программе.


http://clipper.borda.ru/?1-4-0-00000671-000-0-0-1313577707

PS
Писать надо было не в этой теме а во ФЛЕЙМЕ

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3911
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 21.01.15 19:06. Заголовок: Спасибо ! :sm36: ..


Спасибо !

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4414
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 21.01.15 22:30. Заголовок: Andrey пишет: перем..


Andrey пишет:

 цитата:
переменная в программе


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

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4385
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.07.15 10:46. Заголовок: Пытаюсь работать с н..


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

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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 +. Выводы делай сам

Спасибо: 0 
ПрофильЦитата Ответить





Пост 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-поле вполне надежный помощник в данном случае.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 765
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 17.07.15 12:53. Заголовок: Sergy пишет:Если таб..


Sergy пишет:
 цитата:
Если таблица наподобие справочника,


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

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4455
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.08.15 16:48. Заголовок: Вывожу поле "=&#..


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

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5234
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 19.08.15 21:27. Заголовок: Andrey HB_TSTOSTR (..


Andrey
HB_TSTOSTR (HB_DATETIME())

остальное не пробовал , так что пробуй , Сергей верно написал.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4457
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.08.15 23:37. Заголовок: Dima пишет: HB_TSTO..


Dima пишет:

 цитата:
HB_TSTOSTR (HB_DATETIME())


То что надо !

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост 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

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 150
Зарегистрирован: 05.10.06
ссылка на сообщение  Отправлено: 16.04.16 16:22. Заголовок: Попробовал добавить ..


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

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5604
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.04.16 16:54. Заголовок: MIKHAIL Глянь HELP ..


MIKHAIL
Глянь HELP
http://devzone.advantagedatabase.com/dz/webhelp/advantage9.0/server1/dbf_field_types_and_specifications.htm

Насколько я понял из сырца тип надо указать как "+"

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 151
Зарегистрирован: 05.10.06
ссылка на сообщение  Отправлено: 16.04.16 21:21. Заголовок: Dima пишет: Насколь..


Dima пишет:

 цитата:
Насколько я понял из сырца тип надо указать как "+"



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

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5605
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.04.16 21:32. Заголовок: MIKHAIL пишет: буде..


MIKHAIL пишет:

 цитата:
будет ли он понимать эти таблицы


я бы проверил , но чую что должен понимать.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 891
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 16.04.16 23:00. Заголовок: В ADS есть все тип..


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


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4866
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 24.04.16 18:09. Заголовок: Использую в DBFCDX п..


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


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 957
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.04.16 19:05. Заголовок: Andrey пишет:Можно л..


Andrey пишет:
 цитата:
Можно ли как то изменить этот номер ?


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

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4868
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 24.04.16 19:48. Заголовок: SergKis пишет: Поле..


SergKis пишет:

 цитата:
Поле защищено от записи.


В других базах это поле править можно !
Очень жалко...

SergKis пишет:

 цитата:
Свои значения можно получить в поле создав базу в последовательности старых значений и заполнив "дырки"


Да дебилизм получается... У меня ID свой у некоторых заказчиках очень большой есть, типа 2315032.
В своё время делал разноску по филиалам и надавал большие ID филиалам.
Дырки заполнять не надо, пускай остаются.

Со справочниками улиц тоже фигня получается.
Лет 15 назад сделал его, переделать на новое поле получается нельзя.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 958
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.04.16 20:21. Заголовок: Andrey пишет: У меня..


Andrey пишет:
 цитата:
У меня ID свой у некоторых заказчиках очень большой


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

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4869
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 24.04.16 20:44. Заголовок: SergKis пишет: лог..


SergKis пишет:

 цитата:
логический ID записи, формируемый какими то алгоритмами.



Да вот захотел этот свой логический ID переделать на правильный AutoInc.

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 490
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 25.04.16 11:21. Заголовок: Думаю, реально запро..


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

Так же стоит обратить внимание на алгоритм работы autoinc полей в случае команды APPEND FROM: в принимающей базе эти поля продолжат наращивать свое значение последовательно, вне зависимости от значения полей источника. Это позволяет исключить ситуацию появления двух одинаковых значений.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост 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" использовать

Кстати, через ..опу, можете попробовать старые справочники импортировать.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4871
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.04.16 10:14. Заголовок: Петр пишет: Для нов..


Петр пишет:

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



Что за новый тип поля ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост 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.



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4872
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.04.16 10:41. Заголовок: А есть примеры как э..


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

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост 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



Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5630
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 26.04.16 12:13. Заголовок: Видать так dbFieldIn..


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

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост 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



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4874
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.04.16 21:15. Заголовок: Петр пишет: И еще п..


Петр пишет:

 цитата:
И еще по типам данных полей БД
"Z" - column is compressed
"E" - column is encrypted



Это что за интересный тип полей ?
Т.е. можно туда допустим текстовый файл передать, он будет храниться в архивном виде ?
Какая длина поля максимальная по этому типу ?
А другой тип для чего ?

Всё интересней и интересней...

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост 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 предостаточно.




Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4992
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.07.16 02:31. Заголовок: Петр пишет: dbCreat..


Петр пишет:

 цитата:
dbCreate( "tableWithAI", { { "AI", "I:+", 8, 0 } } )


Добавил такое поле в базу.
При создании базы счётчик есть. После этого при добавлении записей - поле по нулям.
Т.е. нет приращения в поле.
Пробовал в утилите Павла - dbedit.exe

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5841
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.07.16 08:26. Заголовок: Andrey пишет: Пробо..


Andrey пишет:

 цитата:
Пробовал в утилите Павла - dbedit.exe



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

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4993
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.07.16 12:03. Заголовок: Dima пишет: Но Harb..


Dima пишет:

 цитата:
Но Harbour должен быть не старее чем февраль 2015


Собирал на новом МиниГуи, там Харбор свежее.

А хХарбор поддерживает эти типы полей ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5842
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.07.16 12:32. Заголовок: Andrey пишет: Собир..


Andrey пишет:

 цитата:
Собирал на новом МиниГуи, там Харбор свежее.


Значит там работает

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5091
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 08.09.16 14:55. Заголовок: Dima пишет: А глянь..


Dima пишет:

 цитата:
А глянь пример C:\MiniGUI\SAMPLES\Advanced\RibbonBar\


Спасибо Дима !
То что нужно.
Там вверху стоит FIELD NOMBRE,DIRECCION,LOCALIDAD,PAIS,CODPOST,;


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 6004
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 08.09.16 15:00. Заголовок: Andrey А темку я пе..


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

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5711
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 03.02.18 11:18. Заголовок: Всем привет. Сделал ..


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


Как такое могло случиться ?
Блин, как в кино: не виновата я, он сам пришёл....

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 6717
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 03.02.18 17:59. Заголовок: Andrey пишет: Как т..


Andrey пишет:

 цитата:
Как такое могло случиться ?


Сам и записал , но забыл как обычно

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5712
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 03.02.18 21:34. Заголовок: Dima пишет: Сам и з..


Dima пишет:

 цитата:
Сам и записал , но забыл как обычно


Да обыскал все свои исходники - нет у меня записи нигде в поле IMZ.

Может ли такое случить (самопроизвольно) если базы копировались из одной в другою ?

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3664
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 05.02.18 09:57. Заголовок: В поле @ aka TimeSta..


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

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5715
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.02.18 13:21. Заголовок: Уф... Теперь стало п..


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

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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



Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 574
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 05.02.18 23:31. Заголовок: Pasha пишет: В поле..


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


Уверен, что Harbour сам никогда ничего не пишет в поле типа "@" (FT_TIMESTAMP).
Потому что для этого предназначено поле типа "=" (FT_MODTIME).

Andrey пишет:
 цитата:
А какое поле можно сделать для своего редактирования для типа поля TimeStamp ?


Уточню - что указанное поведение полей "@" и "=" относится к Harbour. Как с этим в xH - не в курсе.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1717
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 05.02.18 23:43. Заголовок: Sergy :sm36: для ..


Sergy

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

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост 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


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5716
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.02.18 08:58. Заголовок: Pasha пишет: В Harb..


Pasha пишет:

 цитата:
В Harbour это так. А в xHarbour в функции hb_dbfUpdateStampFields время пишется и в HB_FT_TIMESTAMP, и в HB_FT_MODTIME


Понял я в чем дело. У меня базы работают одновременно и с терминалкой (хХарбор) и на МиниГуи (Харбор).
Значит это мне терминалка пишет всякую фигню в базу.
От терминалки юзера не хотят отказываться, придётся пока это поле "@" пока не трогать.
Поставил в начале базы новые типы полей и все вьювера перестали работать. Нечего юзерам лазить по базам.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1172
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.02.18 20:01. Заголовок: Andrey пишет: От те..


Andrey пишет:

 цитата:
От терминалки юзера не хотят отказываться, придётся пока это поле "@" пока не трогать.


Перекомпилируй под харбур и все, можешь трогать.
Все же в харбур более адекватная работа с этими полями.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5717
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.02.18 20:41. Заголовок: Haz пишет: Перекомп..


Haz пишет:

 цитата:
Перекомпилируй под харбур и все, можешь трогать.
Все же в харбур более адекватная работа с этими полями.


Да уже не хочется заморачиваться с терминалкой.
Заканчиваю перевод проекта на МиниГуи, а старый проект хочу сворачивать.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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

Чудеса ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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
...


Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3804
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 28.09.18 09:22. Заголовок: Andrey пишет: Чудес..


Andrey пишет:

 цитата:
Чудеса ?



А в чем прикол, кроме нехватки одной строки ? Или это шарада типа "Найди 10 различий" ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2077
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 28.09.18 09:29. Заголовок: Pasha пишет А в чем ..


Pasha пишет
 цитата:
А в чем прикол, кроме нехватки одной строки ? Или это шарада типа "Найди 10 различий" ?


Просто Андрей, как всегда, просмотрел, что после его команд, стоит
(TEMPDBF)->DT_ADD := (TEMPDBF)->TS
которая переносит значение из поля '=' ( TS ) в поле DT_ADD.
у меня есть вариант prg файла

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2078
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 28.09.18 09:31. Заголовок: PS А хотел он заполн..


PS
А хотел он заполнить DT_ADD более ранними значениями TimeStamp

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост 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.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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 одинаковые, что логично

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3806
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 28.09.18 11:03. Заголовок: В коде этого же нет,..


В коде этого же нет, а я увы не телепат.
Если так, то все понятно, все логично

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 6063
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.09.18 12:30. Заголовок: SergKis пишет: Прос..


SergKis пишет:

 цитата:
Просто Андрей, как всегда, просмотрел, что после его команд, стоит
(TEMPDBF)->DT_ADD := (TEMPDBF)->TS
которая переносит значение из поля '=' ( TS ) в поле DT_ADD.


Как всегда
Спасибо !

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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 ?

Сразу возникает вопрос зачем ?
А чтобы другой программист мог при логиниться к базе и выбрать нужные записи.

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3823
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 16.01.19 09:56. Заголовок: Открываем advantage...


Открываем advantage.chm (у меня нашелся для ads 11), ищем раздел DBF Field Types and Specifications

там упоминается поля типа AutoInc, TimeStamp

RowVer, ModTime похоже нет. Может в более поздних версиях и есть, надо смотреть.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 6998
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.01.19 10:33. Заголовок: http://devzone.advan..

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1426
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 16.01.19 15:11. Заголовок: Эти поля в полном со..


Эти поля в полном составе есть только в нативном формате ADS , т.е в ADT


 цитата:
А чтобы другой программист мог при логиниться к базе и выбрать нужные записи.


другой программист может логиниться и выбирать через DBDCDX , и если нужно , то результат писать в свой ADS .
Вобщем проблемы не вижу при работе в харбуре.
Если речь идет о доступе из другого языка программирования к расширенным типам полей DBF, то у меня сомнения что это вообще возможно.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 6158
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 16.01.19 15:18. Заголовок: Haz пишет: другой п..


Haz пишет:

 цитата:
другой программист может логиниться и выбирать через DBDCDX , и если нужно , то результат писать в свой ADS .
Вобщем проблемы не вижу



Другой программист на Дельфи работает.
Вот и хочет получить доступ к моей базе через Дельфи.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1427
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 16.01.19 15:20. Заголовок: Andrey пишет: Друго..


Andrey пишет:

 цитата:
Другой программист на Дельфи работает.
Вот и хочет получить доступ к моей базе через Дельфи.

Скорее всего пусть забудет об этой идее , вопрос не в ADS а в том что RDD в дельфи скорее всего таких типов не знает в DBF

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1428
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 16.01.19 15:22. Заголовок: Андрей , если бы тво..


Андрей , если бы твоя база была в ADT , то все получилось бы.
Если базы не на теробайты, то проще сделать конвертор DBF->ADT а к ADT дельфист легко цепанется через свой ADS

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3824
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 16.01.19 16:05. Заголовок: Насколько я помню, д..


Насколько я помню, для Delphi используется клиент от Extend Systems, или кто там его купил-перекупил, наследник TDataSet
Так что сами разработчики поддержку своих же типов данных должны были сделать.
Другой вопрос, что не все типы данных поддерживает сам Ads

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост 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

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 6159
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.01.19 17:27. Заголовок: Haz пишет: Скорее в..


Haz пишет:

 цитата:
Скорее всего пусть забудет об этой идее , вопрос не в ADS а в том что RDD в дельфи скорее всего таких типов не знает в DBF


Haz пишет:

 цитата:
Если базы не на теробайты, то проще сделать конвертор DBF->ADT а к ADT дельфист легко цепанется через свой ADS


Т.е. совместный доступ сразу из Харбора и Дельфи не возможен ?
А то Дельфист службу хочет ваять и передавать мои записи куда то через шлюз в другую прогу.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2174
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 17.01.19 20:01. Заголовок: Andrey пишет А то Де..


Andrey пишет
 цитата:
А то Дельфист службу хочет ваять и передавать мои записи куда то через шлюз в другую прогу.


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

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1431
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 17.01.19 20:47. Заголовок: Andrey пишет: Т.е...


Andrey пишет:

 цитата:

Т.е. совместный доступ сразу из Харбора и Дельфи не возможен


Возможен, при стандартных полях, ты же решил использовать расширенные. Отсюда и нюансы

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 6160
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.01.19 23:23. Заголовок: SergKis пишет: Ты у..


SergKis пишет:

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


Да я предлагал делать выгрузку из своей базы в обычный DBF.
Отказался программист, он решил что сам сделает службу, подключаясь напрямую к базе.
Там у руководства своё видение, пускай тогда пробует.
Посмотрим что будет. Хороший полигон для проверки.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2175
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 17.01.19 23:43. Заголовок: Andrey пишет Посмотр..


Andrey пишет
 цитата:
Посмотрим что будет. Хороший полигон для проверки.


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

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 6161
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.01.19 18:02. Заголовок: SergKis пишет: Если..


SergKis пишет:

 цитата:
Если у тебя в базе не деньги, то ... пробовать, можно.


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

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 191
Зарегистрирован: 17.10.05
ссылка на сообщение  Отправлено: 20.01.19 13:05. Заголовок: Андрей, я когда-то ..


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

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 6163
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 21.01.19 00:03. Заголовок: krutoff пишет: Я од..


krutoff пишет:

 цитата:
Я одновременно работал с Делфи и Харбором с одной базой dbf-файлов.


Спасибо БОЛЬШОЕ !

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 6164
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 22.01.19 15:44. Заголовок: Pasha пишет: Поле A..


Pasha пишет:

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



Если есть такое поле в базе, то при переносе в новую базу значение таких полей автоматом переноситься из старой базы ?

Сделал небольшой тест, вроде переносятся.
Хочется точно знать.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1432
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 22.01.19 20:56. Заголовок: Andrey пишет: Хочет..


Andrey пишет:

 цитата:
Хочется точно знать


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

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 6165
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 23.01.19 11:48. Заголовок: Haz пишет: Не перен..


Haz пишет:

 цитата:
Не переносятся! Не должны.


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

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1433
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 23.01.19 12:45. Заголовок: Andrey пишет: ВСЕ ..


Andrey пишет:

 цитата:
ВСЕ записи в новой базе !


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

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 44
Зарегистрирован: 22.01.14
ссылка на сообщение  Отправлено: 23.01.19 15:33. Заголовок: Andrey пишет: ВСЕ за..


Andrey пишет:

 цитата:
ВСЕ записи в новой базе !


А если в тест добавить добавление нескольких новых записей?
Как "ведет" себя поле AutoInc?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 6166
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 23.01.19 16:14. Заголовок: Haz пишет: Append F..


Haz пишет:

 цитата:
Append From и Copy To его не изменяют. Даже не знаю это баг или фича


Нужно тогда у Паши спросить, как он в своей утилите DBEDIT копирует записи из другой базы ?

ZAlex пишет:

 цитата:
А если в тест добавить добавление нескольких новых записей?
Как "ведет" себя поле AutoInc?



Проверил. Добавляет по счётчику, т.е. если в базе был 34 номер, то следующая запись становиться 35.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2177
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 23.01.19 17:09. Заголовок: Andrey пишет Провери..


Andrey пишет
 цитата:
Проверил. Добавляет по счётчику


Небольшая правка Tsb_Basic\demo.prg показывает как работает AutoInc Скрытый текст


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1434
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 24.01.19 00:05. Заголовок: SergKis пишет: как ..


SergKis пишет:

 цитата:
как работает AutoInc


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

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 6999
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 24.01.19 00:28. Заголовок: Andrey пишет: Нужно..


Andrey пишет:

 цитата:
Нужно тогда у Паши спросить, как он в своей утилите DBEDIT копирует записи из другой базы ?


Думаю по тому же алгоритму как и в LETO Backup .
Сырцы есть , сам глянь.

PS
Тема если что http://clipper.borda.ru/?1-7-0-00000010-000-10001-0-1330362141

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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()

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 6731
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 24.06.20 12:09. Заголовок: Всем привет ! Вот на..


Всем привет !
Вот нашёл в инете:
Data File Header Structure for the dBASE Version 7 Table File https://www.dbase.com/Knowledgebase/INT/db7_file_fmt.htm
Структура DBF-файла http://www.autopark.ru/ASBProgrammerGuide/DBFSTRUC.HTM

А для Харбора есть подобные описание ?
Может кто встречал.

И что за тип полей OLE ?
Кто нибудь с ним работал ?

И ещё вопрос, можно в Харборе определить версию DBF-файла ?
У многих просмоторщиков есть такая функция.

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3962
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 25.06.20 13:46. Заголовок: dBASE Version 7 - эт..


dBASE Version 7 - это продукт еще из прошлого века, со своим форматом, там имя поля может быть до 32-х символов.
Харбор его не поддерживает.

Что касается номера версии dbf - это сигнатура файла, его первый байт, то стандартными средствами харбора его считать нельзя

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 256
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 25.06.20 22:55. Заголовок: Pasha пишет: станда..


Pasha пишет:

 цитата:
стандартными средствами харбора его считать нельзя



Любой файл можно прочитать. Просто как файл, не dbf.

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3963
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 26.06.20 09:00. Заголовок: Стандарт - это получ..


Стандарт - это получить средствами rdd. Все остальное - неформат. Например, в pArea есть структура dbfHeader, в которой этот байт уже есть, и файл читать не надо

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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 );
}
}


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 6734
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 01.07.20 14:56. Заголовок: Всё понятно, что про..


Всё понятно, что прочитать какой формат DBF - это сложно.
А есть список какие типы DBF может читать Харбор ?
Я так понял что не все DBF можно открыть Харбором.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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)


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 6801
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.08.20 23:05. Заголовок: Ответ получил, xWrt ..


Ответ получил, xWrt := hb_CToT( System.Clipboard )

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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 - строку ?

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 4038
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 18.07.21 11:59. Заголовок: А как можно получить..



 цитата:
А как можно получить только время - 22:31:58.984 - строку ?



Так ответ же сидит прямо в вопросе. Через substr
? substr(hb_ttoc(tRecno), 10)

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1707
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 18.07.21 13:24. Заголовок: Andrey пишет: как м..


Andrey пишет:

 цитата:
как можно получить только время

посмотреть параметры hb_ttoc() и выбрать нужный шаблон

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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" )

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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" )


Спасибо !

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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"


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост 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]


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 6998
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.07.21 16:09. Заголовок: Dima пишет: Лови ..


Dima пишет:

 цитата:
Лови


Спасибо большое !
Но это уже извращение...
Хочется понять, какие есть функции в Харборе для этих операций ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 6999
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.07.21 16:15. Заголовок: SergKis пишет: резу..


SergKis пишет:

 цитата:
результат


Ступил...
Но мне нужно время полностью 16:09:11.557 !
Как тогда указать формат ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3792
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 18.07.21 16:35. Заголовок: Andrey используй ко..


Andrey
используй короткое cTime := Subs(HB_TSTOSTR( tDateTime ), 12 )
формат
hh:mm:ss.fff

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7000
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.07.21 16:38. Заголовок: SergKis пишет: форм..


SergKis пишет:

 цитата:
формат
hh:mm:ss.fff


Спасибо БОЛЬШОЕ !
По инету искал и не нашёл, всякую фигню поиск предлагает.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7040
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 09.09.21 08:53. Заголовок: А как допустим выбра..


А как допустим выбрать все записи по определённой дате по базе, по полю типа "Т" ?
Допустим есть база с полем SKLAD->TSZ, нужно выбрать все записи за текущую дату.
dDate := DATE() 
cDate := ????
cFilter := "TSZ == " + cDate + ".AND. !DELETED()"
SET FILTER TO &cFilter


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3861
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.09.21 10:53. Заголовок: Andrey см. http://c..

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7042
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 09.09.21 18:30. Заголовок: Так правильно ? :sm..


Так правильно ?
cFilter := HB_CTOT( SKLAD->TSZ, "YYYYMMDD" ) + "==" + DTOS(dDate) + ".AND. !DELETED()"

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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)'

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост 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 и т.п.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7049
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.09.21 23:01. Заголовок: Вообще то по датам и..


Вообще то по датам и даже так ищёт:
cFilter := "(TSZ>=CTOD('10.09.21').AND.TSZ<=CTOD('25.09.21') ).AND.!Deleted()"

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост 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).

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост 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

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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) и.т.д. проще

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1698
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 11.09.21 12:40. Заголовок: SergKis пишет: Ему ..


SergKis пишет:

 цитата:
Ему нужно вариант от составленной строки


Возможно.

PUBLIC dDate1, dDate2
SET FILTER TO &('TSZ >= dDate1 .AND. TSZ <= dDate2') - тоже ведь не сложно?

Но это детали реализации и предпочтений, в общем - вкусовщина.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3875
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 11.09.21 14:46. Заголовок: Петр пишет тоже ведь..


Петр пишет
 цитата:
тоже ведь не сложно?


Дело не в этом (переменные лучше PRIVATE вместо PUBLIC), а в том что строку фильтра можно сохранить в базе (там не только период но др. данные запроса), обозвав его "Отчет за I квартал ..." и таких строк\отчетов может быть много (создавать их может сам клиент или админ, гл. бух, "начальник транспортного цеха" и т.д.). Использовать хоть удаленный клиент и длительное время.

PS
В LetoDb строка фильтра должна быть в таком виде, как у Андрея, оптимизированный фильтр. В LetoDbf, кроме такого фильтра, есть механизм переноса PRIVATE, PUBLIC переменных на сторону сервера для исп. в выражении фильтра.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7050
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 11.09.21 19:31. Заголовок: Спасибо вам БОЛЬШОЕ ..


Спасибо вам БОЛЬШОЕ !

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7056
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 13.09.21 18:11. Заголовок: tDateTime := hb_Date..


tDateTime := hb_DateTime()

А как сделать пустую tDateTime ?
Для даты есть функция CTOD(""), а здесь как ?
И как проверить на пустое значение ?
Функция Empty(tDateTime) будет работать ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1706
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 13.09.21 20:33. Заголовок: Andrey пишет: А как..


Andrey пишет:

 цитата:
А как сделать пустую tDateTime ?
Для даты есть функция CTOD(""), а здесь как ?



hb_CToT("")

Andrey пишет:

 цитата:
Функция Empty(tDateTime) будет работать ?


Да. Empty() работает для всех скалярных типов.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7057
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 14.09.21 01:42. Заголовок: Петр СПАСИБО БОЛЬШОЕ..


Петр СПАСИБО БОЛЬШОЕ !

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 678
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 15.09.21 12:39. Заголовок: Andrey пишет: Для д..


Andrey пишет:

 цитата:
Для даты есть функция CTOD(""),


Чем не устраивает нулевое значение даты 0d0 ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7060
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.09.21 14:33. Заголовок: Вопрос был - А как с..


Вопрос был - А как сделать пустую tDateTime ?

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 4042
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 15.09.21 15:43. Заголовок: кроме hb_ctot("&..


кроме hb_ctot("") есть еще hb_datetime(0, 0, 0, 0, 0, 0, 0)

Спасибо: 1 
ПрофильЦитата Ответить
Ответов - 158 , стр: 1 2 3 4 5 6 7 8 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 571
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет