|
05.09.2006, 18:55 | #1 |
Участник
|
Доброго времени суток товарищи. Вот возникла тут проблемка. Необходимо производить экспорт данных в dbf. НО экспорт даты не проходит ни под каким видом.
Код: DBFConn.Execute('insert into XXXXX.DBF(XXXXXX) values('+FORMAT(01022006D)+')'); Спасиб большое. |
|
05.09.2006, 19:08 | #2 |
Moderator
|
Тут скорей всего ошибка в национальном формате даты. Попробуйте создать дату формата ММ.ДД.ГГГГ.
|
|
06.09.2006, 09:08 | #3 |
Участник
|
В том то и проблема, дата задана хитро, чтобы не стояло на первом месте дата или месяц по идее экспорт должен прокатывать. Напрягает то что в сообщении ошибки выдаётся дата 01.02.06, хотя в коде задана формально дата 01.02.2006. Есть подозрение что ошибка связана именно с усечением года в дате. Как перенастроить или изменить формат даты не знаю
|
|
06.09.2006, 10:43 | #4 |
Участник
|
Цитата:
Сообщение от ksandr
В том то и проблема, дата задана хитро, чтобы не стояло на первом месте дата или месяц по идее экспорт должен прокатывать. Напрягает то что в сообщении ошибки выдаётся дата 01.02.06, хотя в коде задана формально дата 01.02.2006. Есть подозрение что ошибка связана именно с усечением года в дате. Как перенастроить или изменить формат даты не знаю
|
|
06.09.2006, 11:05 | #5 |
Участник
|
функция Format увы не прокатывает. Попробовал вставить в лоб текстовую переменную- 01.02.2006, пишет туже ошибку. Народ неужели никто не сталкивался с экспортом даты в DBF ?
|
|
06.09.2006, 12:14 | #6 |
Участник
|
Попробуй 'ГГГММДД' - без разделителей
либо cast('ГГГММДД' as datetime)
__________________
YEP! тел. (905) 561-94-00 |
|
06.09.2006, 12:59 | #7 |
Участник
|
Мне кажется , что вам необходимо написать так:
date_str := '20060201'; - тип text simvol - это текстовая константа ' (верхняя запятая) DBFConn.Execute('insert into XXXXX.DBF(XXXXXX) values( CONVERT(datetime,'+simvol date_str + simvol + ' ))' ); |
|
06.09.2006, 16:46 | #8 |
Участник
|
Не совсем понял что такое cast ?
Цитата:
Посмотрел формат даты в настройках винды. Форма dd.MM.yyyy Соотвественно строка типа 01012006 должна прокатывать без проблем Неужели никто не пробывал |
|
06.09.2006, 17:00 | #9 |
Участник
|
А, разве в Navsion есть "insert into" ??? INSERT INTO ... VALUES - это инструкция sql запроса. Если вы пытаетсь с помощью insert into добавить запись, то необходимо использовать CONVERT для конвертации даты. CONVERT - это часть sql запроса. И к стандартным функциям Nav не имеет никакого отношения.
|
|
06.09.2006, 17:29 | #10 |
Участник
|
|
|
07.09.2006, 08:26 | #11 |
Участник
|
Цитата:
Насчет cast не помню, кажется кто-то не "держал" эту функцию... И запись строкового представления 'YYYYMMDD' в поле типа date или datetime по любому записывает именно дату.
__________________
YEP! тел. (905) 561-94-00 |
|
07.09.2006, 09:08 | #12 |
Участник
|
Код: DBFConn.Execute('insert into XXXXX.DBF(D_SCHF) values(cast('+FORMAT(DateExport)+' as datetime) )'); для функции convert пишет, неопределённая функция Convert в выражении. DBFConn - 'Microsoft ActiveX Data Objects 2.6 Library'.Connection |
|
07.09.2006, 10:58 | #13 |
Участник
|
Цитата:
Сообщение от ksandr
Код: DBFConn.Execute('insert into XXXXX.DBF(D_SCHF) values(cast('+FORMAT(DateExport)+' as datetime) )'); для функции convert пишет, неопределённая функция Convert в выражении. DBFConn - 'Microsoft ActiveX Data Objects 2.6 Library'.Connection Код: DBFConn.Execute('insert into XXXXX.DBF(D_SCHF) values(cast('''+FORMAT(DateExport)+''' as datetime) )');
__________________
YEP! тел. (905) 561-94-00 |
|
07.09.2006, 10:32 | #14 |
Участник
|
А у меня прекрасно пишет дату. Привожу кусочки кода:
DBFBase Automation 'Microsoft ActiveX Data Objects 2.8 Library'.Connection PERS Automation 'Microsoft ActiveX Data Objects 2.8 Library'.Recordset CREATE(DBFBase); DBFBase.Open('DRIVER=Microsoft dBASE Driver (*.dbf);DRIVERID=277;DBQ=' + FilePath); FileName:='PERS0001.dbf'; CREATE(PERS); PERS.Open(FileName,DBFBase,2,3); PERS.AddNew; IF Employee."Birth Date"<>0D THEN PERS.Fields().Item('DateRog').Value :=Employee."Birth Date"; PERS.Update; PERS.Close(); CLEAR(PERS); |
|
12.09.2006, 07:21 | #15 |
GMCS
|
Я делаю так:
str cmdtext; LoginProperty LP; Connection connection; Statement stmt; ; LP = new LoginProperty(); LP.setDSN("Файлы dBASE"); connection = new OdbcConnection(LP); cmdtext = " Insert into XXXX (DDD1) "; cmdtext += strfmt("VALUES ('%1'), transDate"); stmt.executeUpdate(cmdtext); Работает. Нужно только указать в свойствах ODBC "Файлы dBASE" (в системе) путь до папки с файлом dbf. |
|