ChanServ changed the topic of #libreoffice-ru to: Канал поддержки русскоязычных пользователей LibreOffice | Wiki TDF http://tdf.io/wikiru | On-line документация http://tdf.io/helpru | Логи канала: http://goo.gl/gzwdwU
JohnDoe_71Rus has joined #libreoffice-ru
UNIm95 has joined #libreoffice-ru
JohnDoe_71Rus has quit [Ping timeout: 268 seconds]
<lo-ru-tg> <w​oodyfire> Всем доброго дня. Подскажите (помогите) разобраться как привильно готовить дату.
<lo-ru-tg> <w​oodyfire> Как отправляю на сервер
<lo-ru-tg> <w​oodyfire> sSQL = "CALL api_cpps_old.proc_add_data_test((?))"
<lo-ru-tg> <w​oodyfire> Проблема следущего рода. Мне необходимо отправить на сервер дату с типом 'timestamp'
<lo-ru-tg> <w​oodyfire> oPrep = oConn.PrepareStatement(sSQL)
<lo-ru-tg> <w​oodyfire> IF g_dfData.DepData.dtDetection <> "00:00:00" Then
<lo-ru-tg> <w​oodyfire> oPrep.setString(30,g_dfData.DepData.dtDetection)
<lo-ru-tg> <w​oodyfire> Else
<lo-ru-tg> <w​oodyfire> oPrep.setNull(30,g_dfData.DepData.dtDetection)
<lo-ru-tg> <w​oodyfire> End If
<lo-ru-tg> <w​oodyfire> в общем подготавливается как строка , а надо как timestamp. Как сделать? setDate, setTimestamp что то не работает. говорит, что объект не создан.
<lo-ru-tg> <w​oodyfire> [EDIT] Всем доброго дня. Подскажите (помогите) разобраться как правильно готовить дату.
<lo-ru-tg> <w​oodyfire> Проблема следущего рода. Мне необходимо отправить на сервер дату с типом 'timestamp'
<lo-ru-tg> <w​oodyfire> Как отправляю на сервер
<lo-ru-tg> <w​oodyfire> sSQL = "CALL api_cpps_old.proc_add_data_test((?))"
<lo-ru-tg> <w​oodyfire> oPrep = oConn.PrepareStatement(sSQL)
<lo-ru-tg> <w​oodyfire> IF g_dfData.DepData.dtDetection <> "00:00:00" Then
<lo-ru-tg> <w​oodyfire> oPrep.setString(30,g_dfData.DepData.dtDetection)
<lo-ru-tg> <w​oodyfire> Else
<lo-ru-tg> <w​oodyfire> oPrep.setNull(30,g_dfData.DepData.dtDetection)
<lo-ru-tg> <w​oodyfire> End If
<lo-ru-tg> <w​oodyfire> в общем подготавливается как строка , а надо как timestamp. Как сделать? setDate, setTimestamp что то не работает. говорит, что объект не создан.
<lo-ru-tg> <Mike> "setDate, setTimestamp что то не работает" - это очень подробно! 😉
JohnDoe_71Rus has joined #libreoffice-ru
<lo-ru-tg> <Mike> просто сообщение "объект не создан" - и всё?
<lo-ru-tg> <Mike> и почему 30,
UNIm95 has quit [Ping timeout: 268 seconds]
<lo-ru-tg> <Mike> XParameters::setDate принимает com::sun::star::util::Date. И ещё подозрительны вторые кавычки вокруг параметра (который первый в запросе - так что всё же: почему 30?) - но тут я не знаю, как SQL к этому отнесётся
UNIm95 has joined #libreoffice-ru
<lo-ru-tg> <w​oodyfire> потому-что сам запрос вот:
<lo-ru-tg> <w​oodyfire> sSQL = "CALL api_cpps_old.proc_add_data_test((NULL,?,?,?,?,?," _
<lo-ru-tg> <w​oodyfire> & "?,?,?,?,?,?,?,?,?,?," _
<lo-ru-tg> <w​oodyfire> & "?,?,?,?,?,?,?,?,?,?," _
<lo-ru-tg> <w​oodyfire> & "?,?,?,?,?,?,?,?,?,?," _
<lo-ru-tg> <w​oodyfire> & "?,?,?,?,?,?,?,?,?,?," _
<lo-ru-tg> <w​oodyfire> & "?,?,?,?,?,?,?,?,?,?," _
<lo-ru-tg> <w​oodyfire> & "?,?,?,?,?,?,?,?,?,?," _
<lo-ru-tg> <w​oodyfire> & "?,?,?,?,?,?,?,?,?,?," _
<lo-ru-tg> <w​oodyfire> & "?,?,?,?,?,?,?,?,?,?," _
<lo-ru-tg> <w​oodyfire> & "?,?,?,?,?,?,?,?,?,?," _
<lo-ru-tg> <w​oodyfire> & "?,?,?,?,?,?,?,?,?,?," _
<lo-ru-tg> <Mike> а, ок - непричёсанный пример 😊
<lo-ru-tg> <w​oodyfire> Сейчас попытаюсь все подробно объяснить. Сейчас паралельно общался к ребятами в группе по PostgreSQL. Вот что там интересненькое выяснилось.
<lo-ru-tg> <w​oodyfire> Вы уверены, что там нет нормального варианта?"
<lo-ru-tg> <w​oodyfire> "Т.е. этот клиент посылает непараметризованные запросы — тупо "клеит" строки.
<lo-ru-tg> <w​oodyfire> Это там был задан такой вопрос на который я пока ответа не знаю
<lo-ru-tg> <w​oodyfire> сейчас перепишу и выдам, что происходит
<lo-ru-tg> <w​oodyfire> Это все что мне пока извесно
<lo-ru-tg> 'Untitled Image' uploaded by w​oodyfire: https://i.imgur.com/rBlsQoJ.jpg
<lo-ru-tg> <w​oodyfire> использовал setTimestamp
<lo-ru-tg> <w​oodyfire> вместо setString
<lo-ru-tg> <Mike> и как он использовался?
<lo-ru-tg> <w​oodyfire> oPrep.setTimestamp(30,g_dfData.DepData.dtDetection)
<lo-ru-tg> <Mike> ... и g_dfData.DepData.dtDetection - строка?
<lo-ru-tg> 'Untitled Image' uploaded by w​oodyfire: https://i.imgur.com/f66Clrg.jpg
<lo-ru-tg> <w​oodyfire> Date
<lo-ru-tg> <w​oodyfire> неужели ручками под эту структуру готовить надо
<lo-ru-tg> <w​oodyfire> unsigned short Minutes;
<lo-ru-tg> <w​oodyfire> published struct DateTime
<lo-ru-tg> <w​oodyfire> unsigned long NanoSeconds;
<lo-ru-tg> <w​oodyfire> {
<lo-ru-tg> <w​oodyfire> unsigned short Seconds;
<lo-ru-tg> <w​oodyfire> unsigned short Hours;
<lo-ru-tg> <w​oodyfire> unsigned short Day;
<lo-ru-tg> <w​oodyfire> unsigned short Month;
<lo-ru-tg> <w​oodyfire> short Year;
<lo-ru-tg> <w​oodyfire> boolean IsUTC;
<lo-ru-tg> <w​oodyfire> };
<lo-ru-tg> 'чтоб потом вот тут использовать' uploaded by w​oodyfire: https://i.imgur.com/v6sVcfl.jpg
<lo-ru-tg> <Mike> dim d as Date
<lo-ru-tg> <Mike> dim dd as new com.sun.star.util.Date
<lo-ru-tg> <Mike> .Year = Year(d)
<lo-ru-tg> <Mike> d = "2020-01-28"
<lo-ru-tg> <Mike> .Day = Day(d)
<lo-ru-tg> <Mike> with dd
<lo-ru-tg> <Mike> .Month = Month(d)
<lo-ru-tg> <Mike> end with
<lo-ru-tg> <Mike> Это для Date - для DateTime похоже
<lo-ru-tg> <Mike> У этих структур нет конструкторов ис строк
<lo-ru-tg> <w​oodyfire> Спасибо огромное, заработало )
<lo-ru-tg> <w​oodyfire> dd = new "com.sun.star.util.DateTime"
<lo-ru-tg> <w​oodyfire> IF g_dfData.DepData.dtDetection <> "00:00:00" Then
<lo-ru-tg> <w​oodyfire> .Year = Year(g_dfData.DepData.dtDetection)
<lo-ru-tg> <w​oodyfire> with dd
<lo-ru-tg> <w​oodyfire> .Month = Month (g_dfData.DepData.dtDetection)
<lo-ru-tg> <w​oodyfire> .Day = Day(g_dfData.DepData.dtDetection)
<lo-ru-tg> <w​oodyfire> .Hours = Hour(g_dfData.DepData.dtDetection)
<lo-ru-tg> <w​oodyfire> .Minutes = Minute(g_dfData.DepData.dtDetection)
<lo-ru-tg> <w​oodyfire> .Seconds = Second(g_dfData.DepData.dtDetection)
<lo-ru-tg> <w​oodyfire> .NanoSeconds = 0
<lo-ru-tg> <w​oodyfire> .IsUTC = false
<lo-ru-tg> <w​oodyfire> end with
<lo-ru-tg> <w​oodyfire>
<lo-ru-tg> <Mike> а зачем dd в setNull?
<lo-ru-tg> <Mike> чтобы не делать кучу идентичных преобразований из строки в дату, лучше сделать хелпер типа
<lo-ru-tg> <Mike> Function cssDateTime(d As Date) As com.sun.star.util.DateTime
<lo-ru-tg> <Mike> .Year = Year(d)
<lo-ru-tg> <Mike> .Month = Month(d)
<lo-ru-tg> <Mike> cssDateTime = New com.sun.star.util.DateTime
<lo-ru-tg> <Mike> With cssDateTime
<lo-ru-tg> <Mike> .Day = Day(d)
<lo-ru-tg> <Mike> .Hours = Hour(d)
<lo-ru-tg> <Mike> .Minutes = Minute(d)
<lo-ru-tg> <Mike> .Seconds = Second(d)
<lo-ru-tg> <Mike> .NanoSeconds = 0
<lo-ru-tg> <Mike> .IsUTC = false
<lo-ru-tg> <Mike> и вызывать его как oPrep.setTimestamp(30,cssDateTime(g_dfData.DepData.dtDetection))
<lo-ru-tg> <Mike> О, все велосипеды уже давно придуманы: https://help.libreoffice.org/latest/en-US/text/sbasic/shared/03030115.html
<lo-ru-tg> <w​oodyfire> не. я сделаю проще как мне кажеться. я в своей структуре изначально сделаю не date, а datetime и при присваивании значения буду сразу готовить как полагается. Тогда при отправке не надо будет такое писать
<lo-ru-tg> <Mike> Это уж как угодно. На мой взгляд, может быть проще писать и читать
<lo-ru-tg> <Mike> If strDate = "" Then
<lo-ru-tg> <Mike> oPrep.setNull(30)
<lo-ru-tg> <Mike> Else
<lo-ru-tg> <Mike> oPrep.setTimestamp(30,CDateToUnoDateTime(strDate))
<lo-ru-tg> <Mike> End If
<lo-ru-tg> <Mike> чем проверять дату на какое-то спецзначение, означающее "не установлена"
<lo-ru-tg> <Mike> но если строка даты-времени может быть неоднозначной - будет ой
<lo-ru-tg> <w​oodyfire> вот так прописал. работает на ура.
<lo-ru-tg> <w​oodyfire> >чем проверять дату на какое-то спецзначение, означающее "не установлена"
<lo-ru-tg> <w​oodyfire> вот тут наверное да вы правы. Но надо посмотреть
<lo-ru-tg> <w​oodyfire> Да действительно
<lo-ru-tg> <w​oodyfire> sub test()
<lo-ru-tg> <w​oodyfire> ss = CDateToUnoDateTime(Date()+5)
<lo-ru-tg> <w​oodyfire> s = CDateToUnoDateTime(Date())
<lo-ru-tg> <w​oodyfire>
<lo-ru-tg> <w​oodyfire>
<lo-ru-tg> <w​oodyfire> sd = s - ss
<lo-ru-tg> <w​oodyfire> MsgBox sd , 0, "FormatDateTime"
<lo-ru-tg> <w​oodyfire> end sub
<lo-ru-tg> <w​oodyfire> так не работает
<lo-ru-tg> <w​oodyfire> sub test()
<lo-ru-tg> <w​oodyfire> s = Date()
<lo-ru-tg> <w​oodyfire> ss = Date()+5
<lo-ru-tg> <w​oodyfire>
<lo-ru-tg> <w​oodyfire> остановлюсь на Вашем предложенном варианте
<lo-ru-tg> <w​oodyfire> Спасибо огромное еще раз.
<lo-ru-tg> <Mike> о/
JohnDoe_71Rus has quit [Quit: KVIrc 5.0.0 Aria http://www.kvirc.net/]
UNIm95 has quit [Read error: Connection reset by peer]
UNIm95 has joined #libreoffice-ru
JohnDoe_71Rus has joined #libreoffice-ru
mikekaganski_ has joined #libreoffice-ru
mikekaganski has quit [Disconnected by services]
mikekaganski_ is now known as mikekaganski
UNIm95 has quit [Quit: Leaving.]
UNIm95 has joined #libreoffice-ru
JohnDoe_71Rus has quit [Quit: KVIrc 5.0.0 Aria http://www.kvirc.net/]