|
v7: Как в ВыполнитьSQL_ИзТЗ передать DATETIME? | ☑ | ||
---|---|---|---|---|
0
toypaul
гуру
10.12.13
✎
12:46
|
Как в 1C++ в методе ВыполнитьSQL_ИзТЗ в таблице передать datetime (дату и время)?
Как строку 1998-09-24 10:02:20 передать не получается. |
|||
1
МихаилМ
10.12.13
✎
13:09
|
получается . скорее всего Вы наступили на грабли: в скл >=2008
поменялся формат представления литерала даты |
|||
2
Mikeware
10.12.13
✎
13:18
|
(1) у меня тоже не получалось, на 2000.
(0) передавай как строку и кастуй к datetime в замом запросе |
|||
3
Sorm
10.12.13
✎
13:23
|
(0) Передавай как обычно "yyyyMMddhhmmss"
|
|||
4
Mikeware
10.12.13
✎
13:26
|
(3) попробовал. не получилось
|
|||
5
Sorm
10.12.13
✎
13:27
|
(0) Сорри, ошибся.
(4) Однако тоже. Что за ..? Ща разберемся. |
|||
6
toypaul
гуру
10.12.13
✎
13:31
|
у меня 2000 сервер. есть мысль, что в 1С++ идет преобразование строки к дате некорректно. то есть 1С++ смотрит что поле datetime и думает (ИМХО) что будет передаваться тип Дата.
ну и следовательно выдается ошибка Неверный параметр дата. |
|||
7
toypaul
гуру
10.12.13
✎
13:33
|
(2) пробовал в параметрическом запросе писать как
VALUES(?,?,CONVERT(DATETIME,?),?) так выдает другую ошибку. видимо придется делать построчную вставку ... |
|||
8
Sorm
10.12.13
✎
13:34
|
(0) Хммм.. работает и 'yyyy-MM-dd hh:mm:ss' и 'dd-MM-yyyy hh:mm:ss'.
|
|||
9
toypaul
гуру
10.12.13
✎
13:35
|
(8) код какой?
|
|||
10
toypaul
гуру
10.12.13
✎
13:35
|
у меня такой не работает
ТабЛога = СоздатьОбъект("ТаблицаЗначений"); ТабЛога.НоваяКолонка("base_from","Строка",3); ТабЛога.НоваяКолонка("base_to","Строка",3); //ТабЛога.НоваяКолонка("eventdate","Строка",19); //1998-09-24 10:02:20 ТабЛога.НоваяКолонка("eventdate","Дата"); //1998-09-24 10:02:20 ТабЛога.НоваяКолонка("result","Число",1); ТабЛога.НоваяКолонка("direction","Число",1); ТабЛога.НоваяКолонка("error","Строка",300); ТекДата = ТекущаяДата(); ДатаСКЛ = Формат(ДатаГод(ТекДата),"Ч(0)4")+"-"+Формат(ДатаЧисло(ТекДата),"Ч(0)2")+"-"+Формат(ДатаМесяц(ТекДата),"Ч(0)2"); ДатаСКЛ = ДатаСКЛ + " "+ ТекущееВремя(); Сообщить(ДатаСКЛ); ТабЛога.НоваяСтрока(); ТабЛога.base_from = "111"; ТабЛога.base_to = "222"; ТабЛога.eventdate = ТекущаяДата(); ТабЛога.result = 0; ТабЛога.direction = 1; ТабЛога.error = "ввв"; Сообщить(ТабЛога.eventdate); ТабЛога.НоваяСтрока(); ТабЛога.base_from = "333"; ТабЛога.base_to = "444"; ТабЛога.eventdate = ТекущаяДата(); ТабЛога.result = 1; ТабЛога.direction = 2; ТабЛога.error = ""; ЗаписатьТаблицуЛогаУРБД(ТабЛога); |
|||
11
toypaul
гуру
10.12.13
✎
13:36
|
ой. это я уже переделывал.
|
|||
12
toypaul
гуру
10.12.13
✎
13:36
|
вот такой код
ТабЛога = СоздатьОбъект("ТаблицаЗначений"); ТабЛога.НоваяКолонка("base_from","Строка",3); ТабЛога.НоваяКолонка("base_to","Строка",3); ТабЛога.НоваяКолонка("eventdate","Строка",19); //1998-09-24 10:02:20 //ТабЛога.НоваяКолонка("eventdate","Дата"); //1998-09-24 10:02:20 ТабЛога.НоваяКолонка("result","Число",1); ТабЛога.НоваяКолонка("direction","Число",1); ТабЛога.НоваяКолонка("error","Строка",300); ТекДата = ТекущаяДата(); ДатаСКЛ = Формат(ДатаГод(ТекДата),"Ч(0)4")+"-"+Формат(ДатаЧисло(ТекДата),"Ч(0)2")+"-"+Формат(ДатаМесяц(ТекДата),"Ч(0)2"); ДатаСКЛ = ДатаСКЛ + " "+ ТекущееВремя(); Сообщить(ДатаСКЛ); ТабЛога.НоваяСтрока(); ТабЛога.base_from = "111"; ТабЛога.base_to = "222"; ТабЛога.eventdate = ДатаСКЛ; ТабЛога.result = 0; ТабЛога.direction = 1; ТабЛога.error = "ввв"; Сообщить(ТабЛога.eventdate); ТабЛога.НоваяСтрока(); ТабЛога.base_from = "333"; ТабЛога.base_to = "444"; ТабЛога.eventdate = ДатаСКЛ; ТабЛога.result = 1; ТабЛога.direction = 2; ТабЛога.error = ""; ЗаписатьТаблицуЛогаУРБД(ТабЛога); |
|||
13
toypaul
гуру
10.12.13
✎
13:37
|
Процедура ЗаписатьТаблицуЛогаУРБД(ТабЛога)
RecordSet.Подготовить("INSERT urbd_log.dbo.log(base_from,base_to,eventdate,result,direction,error) VALUES (?,?,?,?,?,?)"); RecordSet.ВыполнитьSQL_ИзТЗ(ТабЛога); КонецПроцедуры // ЗаписатьТаблицуЛогаУРБД |
|||
14
toypaul
гуру
10.12.13
✎
13:38
|
пля ... ну я тупой
|
|||
15
toypaul
гуру
10.12.13
✎
13:38
|
хотя один фиг. перепутал дату с месяцем - всеравно месяц за 12 не вылазит...
|
|||
16
МихаилМ
10.12.13
✎
13:39
|
(13)
а где описание параметров ? |
|||
17
toypaul
гуру
10.12.13
✎
13:39
|
2013-12-10 13:38:35
2013-12-10 13:38:35 RecordSet.ВыполнитьSQL_ИзТЗ(ТабЛога); {E:\PROJECTS\1C\V7\***\ТИС\EXTFORMS\ОБМЕНУРБД.ERT(302)}: Произошла ошибка при выполнении запроса. State 22007, native 0, message [Microsoft][ODBC SQL Server Driver]Недопустимый формат времени |
|||
18
toypaul
гуру
10.12.13
✎
13:40
|
(16) я с 1С++ не дружу. про какое описание параметров речь?
|
|||
19
toypaul
гуру
10.12.13
✎
13:43
|
если писать как в (10), то работает без всякого описания параметров
|
|||
20
Mikeware
10.12.13
✎
13:45
|
(19)
ДобПараметр(<?>) AddParam(<?>) Синтаксис: ДобПараметр(<IOType>,<nSQLType>,<nLen>,<nDec>,<pname>) Назначение: добавляет описание параметра для параметризированного запроса. Параметры: <IOType> - (Число) * 1 - SQL_PARAM_INPUT * 2 - SQL_PARAM_OUTPUT * 3 - SQL_PARAM_INPUT_OUTPUT <nSQLType> - (Число) * 1 - SQL_BIT * 2 - SQL_TINYINT * 3 - SQL_SMALLINT * 4 - SQL_INTEGER * 5 - SQL_REAL * 6 - SQL_FLOAT * 7 - SQL_DOUBLE * 8 - SQL_TYPE_DATE * 9 - SQL_TYPE_TIME * 10 - SQL_TYPE_TIMESTAMP * 11 - SQL_NUMERIC * 12 - SQL_DECIMAL * 13 - SQL_BIGINT * 14 - SQL_CHAR * 15 - SQL_VARCHAR * 16 - SQL_LONGVARCHAR * 17 - SQL_BINARY * 18 - SQL_VARBINARY * 19 - SQL_LONGVARBINARY <nLen> - (Число) длина <nDec> - (Число) точность <pname> - (Строка) Необязательный параметр. именованный параметр вида Par1, необязательный параметр. |
|||
21
Mikeware
10.12.13
✎
13:45
|
(16)Но с ним тоже не работало
|
|||
22
toypaul
гуру
10.12.13
✎
15:08
|
тынц
|
|||
23
Sorm
10.12.13
✎
15:13
|
(22) Профайлер запусти, посмотри, что там тебе 1с++ пытается с датой сделать.
|
|||
24
toypaul
гуру
10.12.13
✎
15:25
|
(23) да ничего не пытается. ошибка видимо возникает до отправки запроса на сервер.
|
|||
25
Serginio1
10.12.13
✎
15:35
|
||||
26
Serginio1
10.12.13
✎
15:44
|
Проще сделать Insert в цикле.
ТекстЗапроса = "insert into #ВидДок (Vid,ID36,ID10) values ('"+Вид+"','"+ИД36+"',"+ИД10+")"; рс.Выполнить(ТекстЗапроса) |
|||
27
Дык ё
10.12.13
✎
15:53
|
10 это SQL_TYPE_TIMESTAMP, это одибисишный тип который для MSSQL соответствует типу datetime, а не timestamp.
Дело в том, что следующим параметром необходимо указать длину буфера в байтах, которая должна быть не меньше длины структуры SQL_TIMESTAMP_STRUCT. Т.е. так надо: ЗапросОстатковРезервов.AddParam(1,10,20,0); (c) DmitrO |
|||
28
toypaul
гуру
10.12.13
✎
16:24
|
(27) хитро.
но уже сделал запрос в цикле :) |
|||
29
Jaap Vduul
10.12.13
✎
16:27
|
А я бы вот так сделал и не парился:
alter table dbo.log add constraint log_eventdate_def default getDate() for eventdate |
|||
30
КонецЦикла
10.12.13
✎
16:40
|
А что нельзя самому построчно засунуть?
|
|||
31
Ёпрст
10.12.13
✎
18:40
|
||||
32
toypaul
гуру
11.12.13
✎
10:09
|
(31) спасибо. попробую.
пробовал искать на 1спп форуме, но видимо как-то не так искал. искал по ВыполнитьSQL_ИзТЗ - вообще ничего не нашло |
|||
33
toypaul
гуру
11.12.13
✎
10:16
|
(31) да работает. видимо все-таки надо было добавить параметр правильно ... ну и cast
|
|||
34
Ёпрст
11.12.13
✎
10:40
|
(33) заметь, кто вопрос там спрашивал
:) |
|||
35
toypaul
гуру
11.12.13
✎
10:58
|
(34) :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |