Форум » [x]Harbour » Новые типы переменных ? » Ответить

Новые типы переменных ?

Andrey: Подскажите пожалуйста, а с какого времени существуют новые типы данных в базах Харбор/хХарбор ? + AutoInc 4 Auto increment = ModTime 8 Last modified date & time of this record ^ RowVers 8 Row version number; modification count of this record @ DayTime 8 Date & Time I Integer 1, 2, 3, 4 or 8 Signed Integer ( Width : )" },; T Time 4 or 8 Only time (if width is 4 ) or Date & Time (if width is 8 ) (?) V Variant 3, 4, 6 or more Variable type Field Y Currency 8 64 bit integer with implied 4 decimal B Double 8 Floating point / 64 bit binary Не заметил разницы между этими типами (или не понял): + AutoInc 4 Auto increment ^ RowVers 8 Row version number; modification count of this record Кто может разъяснить их применение ? Какой максимальный размер импорта файла для типов: M Memo P Picture B Blob V VarField Не смог записать ни в одно поле файл размером 3198 Мб через утилиту DBedit. Ошибка - [more] Application Internal Error - c:\clipbin\dbedit.exe Terminated at: 2013.05.06 13:00:49 Неисправимая ошибка 9006: hb_xgrab не может распределить память Called from MEMOREAD(0) Called from _FREAD(0) in \ts\clip50.lib\_EDITMEM.prg Called from USER(0) in \ts\clip50.lib\_EDITMEM.prg Called from (b)EDITMEMO(0) in \ts\clip50.lib\_EDITMEM.prg Called from TEXTEDIT(0) in \ts\clip50.lib\_TEXT.prg Called from EDITMEMO(0) in \ts\clip50.lib\_EDITMEM.prg Called from EDITVARFIELD(1600) in source\dbedit.prg Called from (b)GETCOL(1573) in source\dbedit.prg Called from GETBROWSE(0) in \ts\clip50.lib\_editbro.prg Called from EDITBROWSE(0) in \ts\clip50.lib\_editbro.prg Called from DBMENU(0) in \ts\clip50.lib\_dbmenu.prg Called from MAIN(821) in source\dbedit.prg [/more] Может что не так делаю ?

Ответов - 158, стр: 1 2 3 4 5 6 7 8 All

SergKis: Andrey см. http://clipper.borda.ru/?1-6-0-00000001-000-140-0-1626772941 пост N: 1708

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

SergKis: Andrey пишет Так правильно ? Если работает то, да Еще такой вариант cDat := HB_DTOC(Date(), 'YYYY-MM-DD') cFilter := '!DELETED() .AND. "'+cDat+'" $ HB_TSTOSTR( SKLAD->TSZ)'


Петр: 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 и т.п.

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

SergKis: Andrey пишетпо датам и даже так ищёт тогда проще можно SET DELETED ON SET FILTER TO TSZ >= 0d20210910 .AND. TSZ <= 0d20210925 GO TOP ... SET DELETED OFF

Петр: 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).

Петр: 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

SergKis: Петр пишет что Андрею скорее всего нужно, наверное, SET DELETED ON SET FILTER TO TSZ >= dDate1 .AND. TSZ <= dDate1 Ему нужно вариант от составленной строки SET FILTER TO &('TSZ >= 0d20210910 .AND. TSZ <= 0d20210925') Он пишет выше везде cFilter := "..." и получить 'TSZ >= 0d'+DtoS(dDate1) и.т.д. проще

Петр: SergKis пишет: Ему нужно вариант от составленной строки Возможно. PUBLIC dDate1, dDate2 SET FILTER TO &('TSZ >= dDate1 .AND. TSZ <= dDate2') - тоже ведь не сложно? Но это детали реализации и предпочтений, в общем - вкусовщина.

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

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

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

Петр: Andrey пишет: А как сделать пустую tDateTime ? Для даты есть функция CTOD(""), а здесь как ? hb_CToT("") Andrey пишет: Функция Empty(tDateTime) будет работать ? Да. Empty() работает для всех скалярных типов.

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

Sergy: Andrey пишет: Для даты есть функция CTOD(""), Чем не устраивает нулевое значение даты 0d0 ?

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

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



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