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

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

rvu: Pasha пишет: стандартными средствами харбора его считать нельзя Любой файл можно прочитать. Просто как файл, не dbf.

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


SergKis: rvu пишет Любой файл можно прочитать. Просто как файл, не dbf Не все так просто. Например установка cdp в dbf не держится, точно уже не помню, но после закрытия dbf терялась. Пробовали устанавливать, правда, еще на hb 2.0 потом забросили с cdp. Ф-я была такая[pre2] HB_FUNC( DBSETCDP ) { AREAP pArea = hb_rddGetCurrentWorkAreaPointer(); if( pArea && ISCHAR(1) ) { char * pCdp = hb_parc(1); if( pCdp ) pArea->cdPage = hb_cdpFind( (char *) pCdp ); } } [/pre2]

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

Andrey: Беру поле базы "T" и загоняю в System.Clipboard := cValToChar(oBrw:GetValue(nCol)) Как эту строку записать в другое поле "T" ? Пробовал так, что то не та функция:[pre2] xWrt := HB_STRTOTS( System.Clipboard ) oBrw:SetValue(nCol, xWrt)[/pre2]

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

Andrey: Есть такие преобразования поля: [pre2] 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 [/pre2] А как можно получить только время - 22:31:58.984 - строку ?

Pasha: А как можно получить только время - 22:31:58.984 - строку ? Так ответ же сидит прямо в вопросе. Через substr ? substr(hb_ttoc(tRecno), 10)

Haz: Andrey пишет: как можно получить только время посмотреть параметры hb_ttoc() и выбрать нужный шаблон

SergKis: 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" )

Andrey: 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" ) Спасибо !

Andrey: Что-то не идёт....[pre2] 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" [/pre2]

Dima: Лови [pre2] hb_Regex( "([\d+]{2}[:][\d+]{2}[:][\d+]{2}[.][\d+]{3})" , hb_ttoc(HB_DATETIME()),.f.)[1] [/pre2]

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

SergKis: Andrey [pre2] 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 [/pre2]

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

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

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

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



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