Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) ТП+ПоставщикДанныхODBC.MSSQL и колонка типа DateTime (число прочтений - 5946 )
dnp
Senior Member
****
Отсутствует


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
ТП+ПоставщикДанныхODBC.MSSQL и колонка типа DateTime
24. Сентября 2009 :: 11:12
Печать  
Тоже сделал себе хранение журнала регистрации на MS-SQL, использовать готовые не удосужился Печаль самоделка уже пару лет пишет данные... А вот просмотр - чего там записано - не делал вообще, проверил с помощью 1CQA и успокоился. Сейчас понадобилось, и вот наступаю на грабли: получить данные в ТЗ простым запросом могу, а ТабличноеПоле с поставщиком ОДБЦ упирается.

Среди прочих полей в таблице есть поле EvMoment типа DateTime, которое заполняется INSERTR'ом функцией grttime()
Код
Выбрать все
"INSERT INTO " + ИмяТаблицыЖР + " VALUES (
|	GETDATE()
|	,'" + ИмяПользователя() + "'
|	,'E'
|	,'" + EvCat + "' .....
 


Заполняется это поле вполне нормально, в ТЗ видно.

Цепляю к таблице ТП, и получаю:
1. Если в моем запросе "SELECT EvMoment as Позиция ..." то в ТП от каждой даты видно по 20 строк или по сколько умещается за раз на экране, отладка показывает в запросе
Код
Выбрать все
{call sp_executesql(N'
select top 20
EvMoment as Позиция,
....
where EvMoment < @OKParam_0
order by EvMoment desc
',N'@OKParam_0 datetime'
,{d '2009-09-18'})} 



или

2. Если в своем запросе делаю типизацию как в здесь, то есть "SELECT EvMoment as [Позиция $Строка]..." то в ТП вижу только начальные данные, при попытке пролистать - получаю ошибку как на картинке,

а в отладке запрос такой:
Код
Выбрать все
{call sp_executesql(N'
select top 20
EvMoment as Позиция,
....
where EvMoment < @OKParam_0
order by EvMoment desc
',N'@OKParam_0 datetime'
,'2009-09-24 18:03:22.463')} 



Запрос устанавливается так:
Код
Выбрать все
Поставщик.УстТекстЗапроса( ТекстЗапроса );
ДобКолонкуТП( тп, "Позиция",,,128,,0 );
//.....
Поставщик.УстКлючПорядка( "Позиция" );
Поставщик.УстИдПоле( "Позиция" );
 



Где ошибся?..

ЗЫ: 1C++ 3.0.1.23
  

varchar2datetime.PNG ( 2 KB | Загрузки )
varchar2datetime.PNG
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: ТП+ПоставщикДанныхODBC.MSSQL и колонка типа DateTime
Ответ #1 - 24. Сентября 2009 :: 11:59
Печать  
в QA запусти этот запрос
Код
Выбрать все
{call sp_executesql(N'
select top 20
EvMoment as Позиция,
....
where EvMoment < @OKParam_0
order by EvMoment desc
',N'@OKParam_0 datetime'
,'2009-09-24 18:03:22.463')}  


будет ошибка?
  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: ТП+ПоставщикДанныхODBC.MSSQL и колонка типа DateTime
Ответ #2 - 24. Сентября 2009 :: 12:01
Печать  
и еще твой ключ порядка не гарантирует уникальности, а это не приемлимо
  

1&&2&&3
Наверх
 
IP записан
 
dnp
Senior Member
****
Отсутствует


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: ТП+ПоставщикДанныхODBC.MSSQL и колонка типа DateTime
Ответ #3 - 24. Сентября 2009 :: 15:34
Печать  
Спасибо, про то, что gettime() не гарантирует уникальности - как-то иначе думал, а сейчас соображаю - и в самом деле, вполне может быть совпадение. Хоть и мало шансов, особенно в данном применении и при моей нагрузке. Уникальность переделаю (или... нехорошее подозрение у меня, хехе Улыбка )

Запрос в 1CQA дал ту же ошибку
Error converting data type varchar to datetime.

Странно, ведь у avgreen так работает... Придется прикрутить его КОП к тестовой базе, и посмотреть..
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: ТП+ПоставщикДанныхODBC.MSSQL и колонка типа DateTime
Ответ #4 - 25. Сентября 2009 :: 04:38
Печать  
dnp писал(а) 24. Сентября 2009 :: 15:34:
Спасибо, про то, что gettime() не гарантирует уникальности - как-то иначе думал, а сейчас соображаю - и в самом деле, вполне может быть совпадение. Хоть и мало шансов, особенно в данном применении и при моей нагрузке. Уникальность переделаю (или... нехорошее подозрение у меня, хехе Улыбка )

в подобных случаях я добавляю к таблице поле:
row_id int IDENTITY(1, 1) NOT NULL
и создаю кластерный PK (EvMoment,row_id)
эти же поля использую в КП
  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: ТП+ПоставщикДанныхODBC.MSSQL и колонка типа DateTime
Ответ #5 - 25. Сентября 2009 :: 04:55
Печать  
dnp писал(а) 24. Сентября 2009 :: 15:34:
Запрос в 1CQA дал ту же ошибку
Error converting data type varchar to datetime.

покажи вточности строку задающую время в запросе который в QA не работает
ps
не 1CQA, а QA
  

1&&2&&3
Наверх
 
IP записан
 
dnp
Senior Member
****
Отсутствует


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: ТП+ПоставщикДанныхODBC.MSSQL и колонка типа DateTime
Ответ #6 - 25. Сентября 2009 :: 05:07
Печать  
trad писал(а) 24. Сентября 2009 :: 12:01:
и еще твой ключ порядка не гарантирует уникальности, а это не приемлимо

В общем решил не тупить, добавил в таблицы колонку
Код
Выбрать все
ALTER TABLE kps_mlg ADD EvID BIGINT PRIMARY KEY IDENTITY 


и переключил УстИдПоле() и УстКлючПорядка() на неё. Теперь всё работает.
Спасибо Улыбка
  
Наверх
ICQ  
IP записан
 
dnp
Senior Member
****
Отсутствует


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: ТП+ПоставщикДанныхODBC.MSSQL и колонка типа DateTime
Ответ #7 - 25. Сентября 2009 :: 05:15
Печать  
trad писал(а) 25. Сентября 2009 :: 04:55:
покажи вточности строку задающую время в запросе который в QA не работает
ps
не 1CQA, а QA

Про "ps" - извиняюсь, втупил, запускал в 1CQA... в родном SQL QA не знаю как написать путь к таблице Печаль
"ts1.jreg.kps_mlg" не канает (сервер.база.таблица), говорит - не знает такого объекта. Сижу гуглю.
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: ТП+ПоставщикДанныхODBC.MSSQL и колонка типа DateTime
Ответ #8 - 25. Сентября 2009 :: 05:16
Печать  
QA коннектишь к серверу ts1
потом выбираешь БД jreg
и все. никаких путей не надо
  

1&&2&&3
Наверх
 
IP записан
 
dnp
Senior Member
****
Отсутствует


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: ТП+ПоставщикДанныхODBC.MSSQL и колонка типа DateTime
Ответ #9 - 25. Сентября 2009 :: 05:24
Печать  
Да, точно, увидел в заголовке QA путь к немоей базе, понял ошибку.

Однако
Код
Выбрать все
{call sp_executesql(N'
select top 20
   EvMoment
FROM kps_mlg
   where EvMoment < @OKParam_0
order by EvMoment desc
',N'@OKParam_0 datetime'
,'2009-09-24 18:03:22.463')} 



в QA пашет а в 1CQA нет.
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: ТП+ПоставщикДанныхODBC.MSSQL и колонка типа DateTime
Ответ #10 - 25. Сентября 2009 :: 05:38
Печать  
выполни в 1CQA
select cast('2009-09-24 18:03:22.463' as datetime) [$Строка]
покажи результат
  

1&&2&&3
Наверх
 
IP записан
 
dnp
Senior Member
****
Отсутствует


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: ТП+ПоставщикДанныхODBC.MSSQL и колонка типа DateTime
Ответ #11 - 25. Сентября 2009 :: 05:39
Печать  
Ошибка выполнения запроса:
State 22007, native 242, message [Microsoft][ODBC SQL Server Driver][SQL Server]The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: ТП+ПоставщикДанныхODBC.MSSQL и колонка типа DateTime
Ответ #12 - 25. Сентября 2009 :: 05:48
Печать  
ищи, ты где то меняешь формат даты
set dateformat
этого делать нельзя
  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: ТП+ПоставщикДанныхODBC.MSSQL и колонка типа DateTime
Ответ #13 - 25. Сентября 2009 :: 05:50
Печать  
dnp писал(а) 25. Сентября 2009 :: 05:07:
В общем решил не тупить, добавил в таблицы колонку
Код
Выбрать все
ALTER TABLE kps_mlg ADD EvID BIGINT PRIMARY KEY IDENTITY 


и переключил УстИдПоле() и УстКлючПорядка() на неё. Теперь всё работает.
Спасибо Улыбка

и зря.
теперь ты не сможешь нормально ограничивать интервал просмотра журнала
  

1&&2&&3
Наверх
 
IP записан
 
dnp
Senior Member
****
Отсутствует


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: ТП+ПоставщикДанныхODBC.MSSQL и колонка типа DateTime
Ответ #14 - 25. Сентября 2009 :: 06:02
Печать  
setdateformat я ни где не делаю, ибо 1С у меня ДБФочная, и только ЖурналРегистрации пишется перехватчиком на SQLсервер. Соответственно с SQLем я почти ни как не работаю вообще. Подключаюсь к базе так:
Код
Выбрать все
СтрокаПодключения =
"driver={SQL Server};
|server=" + СерверБазыЖР + ";
|database=" + ИмяБазыЖР + ";
|uid=" + ИмяЮзерЖР + ";
|pwd=" + ПассЮзераЖР + "";
База	= СоздатьОбъект( "ODBCDataBase" );
Если ( База.Соединение( СтрокаПодключения ) <> 1 ) Тогда
 


возможно, что на моем компе кривые региональные настройки - люблю менять разделитель дробной части с запятой на точку, чтою Эксель не парил мозг при открытии некоторых текстовых файлов или копипасте...

Цитата:
и зря

мммм.... а как же быть с неуникальностью этого поля? Проверил - реально есть повторы. Что значит "нормально"? Просто мне нужно было подробно просмотреть 21-е сентября, и вот только что с ограничилкой в виде
Код
Выбрать все
WHERE
EvCat = 'Forms'
and EvMoment > convert( datetime, '2009-09-20',121)
and EvMoment < convert( datetime, '2009-09-22',121) 


всё отлично фильтранулось. Хотя нагрузку на сервер я в этот момент не глянул, может он и зашкалил...
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать