Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Очень популярная тема (более 25 ответов) ВыполнитьSQL_ИзТЗ обнуляет колонку при вставке в SQL (число прочтений - 7475 )
vectorov
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 14
Зарегистрирован: 08. Октября 2010
Пол: Мужской
ВыполнитьSQL_ИзТЗ обнуляет колонку при вставке в SQL
24. Января 2011 :: 10:13
Печать  
Добрый день.
При выполнении след кода
Код
Выбрать все
	ТекстДетали = "
	|INSERT INTO [dbo].[LINESJOUR]
	|           ([PRICE]
	|           ,[QTY]
	|           ,[DOCID]
	|           ,[AMOUNTTOTAL]
	|           ,[AMOUNTVAT]
	|           ,[AMOUNTCASH]
	|           ,[AMOUNTPREPAY]
	|           ,[COMISSIONAMOUNT]
	|           ,[COMISSIONPERCENT]
	|           ,[CREDITAGRNUM]
	|           ,[ITEMID]
	|	    ,[INSERTDATE])
	|     VALUES
	|           (?,?,?,?,?,?,?,?,?,?,?,?)
	|";
	РСДетали.Подготовить(ТекстДетали);
	РСДетали.ПостроитьПараметры();

	тбЭкспД = СоздатьОбъект("ТаблицаЗначений");
	тбЭкспД.НоваяКолонка("PRICE","Число");
	тбЭкспД.НоваяКолонка("QTY","Число");
	тбЭкспД.НоваяКолонка("IDDOC","Строка");
	тбЭкспД.НоваяКолонка("AMOUNTTOTAL","Число");
	тбЭкспД.НоваяКолонка("AMOUNTVAT","Число");
	тбЭкспД.НоваяКолонка("AMOUNTCASH_","Число");
	тбЭкспД.НоваяКолонка("AMOUNTPREPAY_","Число");
	тбЭкспД.НоваяКолонка("COMISSIONAMOUNT","Число");
	тбЭкспД.НоваяКолонка("COMISSIONPERCENT","Число");
	тбЭкспД.НоваяКолонка("CREDITAGRNUM_","Строка");
	тбЭкспД.НоваяКолонка("ITEMID","Строка");
	тбЭкспД.НоваяКолонка("INSERTDATE","Число");

...
//Заполнение тбЭкспД
...
	ДатаВставки = Число(Формат(ТекущаяДата(),"ДГГГГММДД")+СтрЗаменить(ТекущееВремя(),":",""));
	тбЭкспД.Заполнить(ДатаВставки,,,"INSERTDATE");
	РСДетали.ВыполнитьSQL_ИзТЗ(тбЭкспД);
 



в итоге колонка [INSERTDATE] (тип bigint) в таблице SQL-сервера нулевая, хотя в тбЭкспД она точно не нулевая.

Если колонку [INSERTDATE] сделать строкой на сиквеле и в 1С, всё вставляется без проблем.

Вопрос: я что-то делаю не так или так и должно быть?
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: ВыполнитьSQL_ИзТЗ обнуляет колонку при вставке в SQL
Ответ #1 - 24. Января 2011 :: 11:50
Печать  
в 1cpp не поддерживается преобразование из "Число" в "bigint"
=> "так и должно быть"
  

1&&2&&3
Наверх
 
IP записан
 
vectorov
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 14
Зарегистрирован: 08. Октября 2010
Пол: Мужской
Re: ВыполнитьSQL_ИзТЗ обнуляет колонку при вставке в SQL
Ответ #2 - 24. Января 2011 :: 12:04
Печать  
trad писал(а) 24. Января 2011 :: 11:50:
в 1cpp не поддерживается преобразование из "Число" в "bigint"
=> "так и должно быть"

Спасибо. Теперь прояснилось.

А в какой числовой тип 1срр может преобразовать "Число"?
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: ВыполнитьSQL_ИзТЗ обнуляет колонку при вставке в SQL
Ответ #3 - 24. Января 2011 :: 13:22
Печать  
например int, numeric
  

1&&2&&3
Наверх
 
IP записан
 
vectorov
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 14
Зарегистрирован: 08. Октября 2010
Пол: Мужской
Re: ВыполнитьSQL_ИзТЗ обнуляет колонку при вставке в SQL
Ответ #4 - 01. Февраля 2011 :: 12:33
Печать  
trad писал(а) 24. Января 2011 :: 13:22:
например int, numeric

Я столкнулся с другой проблемой, которая связана с bigint и ВыполнитьSQL_ИзТЗ: при попытке вставить данные в сиквел вызовом ВыполнитьSQL_ИзТЗ выдает следующее

State 22018, native 0, message [Microsoft][ODBC SQL Server Driver]Недопустимое символьное значение для указания отклонения

Проблема оказалась связана с тем, что на сиквеле есть поля с типом bigint.
Но если данные вставлять через ВыполнитьИнструкцию, то такой проблемы нет (этим способом не могу пользоваться, так как время выполнения сильно увеличивается).
Может кто-то объяснит странное поведение, я то думал что тип bigint вообще не поддерживается?
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: ВыполнитьSQL_ИзТЗ обнуляет колонку при вставке в SQL
Ответ #5 - 01. Февраля 2011 :: 13:40
Печать  
Ну а как ты вставлял bigint через ВыполнитьИнструкцию?.. не иначе как литералом в тексте запроса (или текстовым параметром, что то же самое). Это сработало, и это не удивительно.
А параметризированный запрос и его параметры требуют преобразования 1с-значения (числа в частности) в тип sql. Что в 1с++ проработано, на мой взгляд, не очень глубоко.

...
Цитата:
этим способом не могу пользоваться, так как время выполнения сильно увеличивается

можно еще попробовать РежимRPC(1) + текстовые параметры, которые в этом режиме превращаются в пареметры sp_executesql()
  

1&&2&&3
Наверх
 
IP записан
 
vectorov
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 14
Зарегистрирован: 08. Октября 2010
Пол: Мужской
Re: ВыполнитьSQL_ИзТЗ обнуляет колонку при вставке в SQL
Ответ #6 - 01. Февраля 2011 :: 14:03
Печать  
Спасибо за ответ.
Через ВыполнитьИнструкцию использовал текстовый параметр - тут главное было выяснить будет ли работать вообще.

А кому-то и где можно пожелания оставить по поводу bigint в параметризированном запросе - полезная же вещь и код в итоге простой и красивый?
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: ВыполнитьSQL_ИзТЗ обнуляет колонку при вставке в SQL
Ответ #7 - 01. Февраля 2011 :: 14:04
Печать  
(0) почему для поля INSERTDATE не использовать тип datetime
или в крайнем случае char(16)
  
Наверх
 
IP записан
 
vectorov
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 14
Зарегистрирован: 08. Октября 2010
Пол: Мужской
Re: ВыполнитьSQL_ИзТЗ обнуляет колонку при вставке в SQL
Ответ #8 - 01. Февраля 2011 :: 14:18
Печать  
Z1 писал(а) 01. Февраля 2011 :: 14:04:
(0) почему для поля INSERTDATE не использовать тип datetime
или в крайнем случае char(16)


В итоге и стали использовать nvarchar(14), но это 14 байт, а не 8. А записей в таблице планируются миллионы
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: ВыполнитьSQL_ИзТЗ обнуляет колонку при вставке в SQL
Ответ #9 - 01. Февраля 2011 :: 14:26
Печать  
vectorov писал(а) 01. Февраля 2011 :: 14:18:
Z1 писал(а) 01. Февраля 2011 :: 14:04:
(0) почему для поля INSERTDATE не использовать тип datetime
или в крайнем случае char(16)


В итоге и стали использовать nvarchar(14), но это 14 байт, а не 8. А записей в таблице планируются миллионы

ну так и используйте datetime 8 байт
то что записей милионы ну и что из этого ? место на диске
практически ничего не стоит.

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



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: ВыполнитьSQL_ИзТЗ обнуляет колонку при вставке в SQL
Ответ #10 - 01. Февраля 2011 :: 14:30
Печать  
Ну скажем nvarchar(14) это 2*14 = 28 байт
Да, а datetime - 8.
А smalldatetime так тот вообще 4 байта (если конечно диапазон и дискретность устроит)
  

1&&2&&3
Наверх
 
IP записан
 
vectorov
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 14
Зарегистрирован: 08. Октября 2010
Пол: Мужской
Re: ВыполнитьSQL_ИзТЗ обнуляет колонку при вставке в SQL
Ответ #11 - 01. Февраля 2011 :: 14:34
Печать  
trad писал(а) 01. Февраля 2011 :: 14:30:
Ну скажем nvarchar(14) это 2*14 = 28 байт
Да, а datetime - 8.
А smalldatetime так тот вообще 4 байта (если конечно диапазон и дискретность устроит)


datetime это хорошо бы.
Как мне вставить дату и обязательно текущее время через ВыполнитьSQL_ИзТЗ?
Я пробовал передавать как форматированную строку, но не получилось - ошибку уже не помню.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: ВыполнитьSQL_ИзТЗ обнуляет колонку при вставке в SQL
Ответ #12 - 01. Февраля 2011 :: 14:37
Печать  
vectorov писал(а) 01. Февраля 2011 :: 14:34:
trad писал(а) 01. Февраля 2011 :: 14:30:
Ну скажем nvarchar(14) это 2*14 = 28 байт
Да, а datetime - 8.
А smalldatetime так тот вообще 4 байта (если конечно диапазон и дискретность устроит)


datetime это хорошо бы.
Как мне вставить дату и обязательно текущее время через ВыполнитьSQL_ИзТЗ?
Я пробовал передавать как форматированную строку, но не получилось - ошибку уже не помню.

на поле INSERTDATE поставить default  getdate()
и убрать вообще из insert

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



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: ВыполнитьSQL_ИзТЗ обнуляет колонку при вставке в SQL
Ответ #13 - 01. Февраля 2011 :: 14:41
Печать  
Работать с параметризированным datetime/smalldatetime - проблем нет. Если будет нужно подскажем.
А, вообще, Z1 прав. Для твоей задачи идеальное решение.
  

1&&2&&3
Наверх
 
IP записан
 
vectorov
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 14
Зарегистрирован: 08. Октября 2010
Пол: Мужской
Re: ВыполнитьSQL_ИзТЗ обнуляет колонку при вставке в SQL
Ответ #14 - 01. Февраля 2011 :: 14:54
Печать  
trad писал(а) 01. Февраля 2011 :: 14:41:
Работать с параметризированным datetime/smalldatetime - проблем нет. Если будет нужно подскажем.

Подскажите, пожалуйста.

trad писал(а) 01. Февраля 2011 :: 14:41:
А, вообще, Z1 прав. Для твоей задачи идеальное решение.

В моем случае это поле обеспечивает версионность набора данных, вставляемых из ТЗ, поэтому getdate не подходит
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: ВыполнитьSQL_ИзТЗ обнуляет колонку при вставке в SQL
Ответ #15 - 01. Февраля 2011 :: 15:35
Печать  
vectorov писал(а) 01. Февраля 2011 :: 14:54:
trad писал(а) 01. Февраля 2011 :: 14:41:
Работать с параметризированным datetime/smalldatetime - проблем нет. Если будет нужно подскажем.

Подскажите, пожалуйста.


Цитата:
Цитата:
Цитата(Изучающий 1С @ ++Apr 24 2006, 11:24)
и ещё почему
рс.ДобПараметр(1,10,17,0); //Дата
а не
рс.ДобПараметр(1,10,8,0); //Дата
?

если nLen < 17 то тип smalldatetime
если nLen >= 17 то тип datetime
http://itland.ru/forum//index.php?s=&showtopic=15640&view=findpost&p=82784
  

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



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: ВыполнитьSQL_ИзТЗ обнуляет колонку при вставке в SQL
Ответ #16 - 01. Февраля 2011 :: 15:38
Печать  
vectorov писал(а) 01. Февраля 2011 :: 14:54:
В моем случае это поле обеспечивает версионность набора данных, вставляемых из ТЗ, поэтому getdate не подходит

Ну так если это для версионности, то ему правильнее быть identity.
... и можно даже оставаться бигинтом.
это во-первых.

во-вторых
твое
Число(Формат(ТекущаяДата(),"ДГГГГММДД")+СтрЗаменить(ТекущееВремя(),":",""));
ничем не лучше getdate()

в-третьих
если все же хочется иметь "временнУю" и в то же время безопасную версионность, то лучшим, на мой взгляд будет


INSERTDATE smalldatetime NOT NULL DEFAULT (getdate()),
ROW_ID int IDENTITY (1, 1) NOT NULL
  

1&&2&&3
Наверх
 
IP записан
 
vectorov
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 14
Зарегистрирован: 08. Октября 2010
Пол: Мужской
Re: ВыполнитьSQL_ИзТЗ обнуляет колонку при вставке в SQL
Ответ #17 - 01. Февраля 2011 :: 16:41
Печать  
Спасибо за всё.
Теперь всё стало понятным.

По поводу identity: не могу я его использовать, так как данные я вставляю в две таблицы (шапка и детали) и мне необходимо иметь ключ для их связки, а identity мне не позволит использовать ВыполнитьSQL_ИзТЗ без изысков программирования.
Или я не прав?
  
Наверх
 
IP записан
 
Mikeware
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 262
Зарегистрирован: 27. Июля 2006
Пол: Мужской
Re: ВыполнитьSQL_ИзТЗ обнуляет колонку при вставке в SQL
Ответ #18 - 01. Февраля 2011 :: 16:47
Печать  
Тема как по заказу.есь день бъюсь со вставкой времени в ВыполнитьSQL_ИзТЗ...
В таблице есть поля - типа datetime,  туда нужно вставить _время_
Пытаюсь в ТЗ записать дату и время строкой, и оттуда выполнить запрос с преобразованием типа:
INSERT
      D__CARS_IMP
     (ACTIVE ,NAME ,MARK ,QUANT ,MAX_LEN ,MAX_TIME ,MAX_NUM, NOMER, START_TIME, CLOSE_TIME
     ,DRIVER_ID, RENTED, MAX_SUM1, MAX_SUM2, UNLOAD_TYP, CATEGORY_ID, EXT_STRID, STR1, STR2, STR3
     ,INT1,INT2,INT3,DISP_ID)
     VALUES(?, ?, ?, ?, ?
,convert(datetime ,? )
,? ,?,cast(? аs datetime) ,cast(? аs datetime) ,? ,? ,? ,? ,? ,? ,? ,? ,? ,? ,? ,? , ?, ?)
Ну и получаю либо "недопустимый формат времени", либо ошибку в параметрах...
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: ВыполнитьSQL_ИзТЗ обнуляет колонку при вставке в SQL
Ответ #19 - 01. Февраля 2011 :: 18:14
Печать  
vectorov писал(а) 01. Февраля 2011 :: 16:41:
По поводу identity: не могу я его использовать, так как данные я вставляю в две таблицы (шапка и детали) и мне необходимо иметь ключ для их связки, а identity мне не позволит использовать ВыполнитьSQL_ИзТЗ без изысков программирования.
Или я не прав?

Прав в общем то.
Единственный, как я вижу, путь для использования identity - это уйти от ВыполнитьSQL_ИзТЗ.
Т.е. устанавливать параметры вручную, выполнять вставку в шапку. Получать @@IDENTITY. Использовать его для вставки в детали.
минус - менее эффективная передача параметров на сервер.
  

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



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: ВыполнитьSQL_ИзТЗ обнуляет колонку при вставке в SQL
Ответ #20 - 01. Февраля 2011 :: 18:27
Печать  
Mikeware

для cast(? аs datetime) в ТЗ должна быть строка вида: 2011-02-01 21:11:35.513 можно без миллисекунд. (чтобы это потом вспомнить - пиши select getdate())
и ДобПарам(1,14,23,0) или ДобПарам(1,14,19,0)
  

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


I Love YaBB 2!

Сообщений: 262
Зарегистрирован: 27. Июля 2006
Пол: Мужской
Re: ВыполнитьSQL_ИзТЗ обнуляет колонку при вставке в SQL
Ответ #21 - 01. Февраля 2011 :: 20:30
Печать  
trad писал(а) 01. Февраля 2011 :: 18:27:
и ДобПарам(1,14,23,0) или ДобПарам(1,14,19,0)

а разве для ВыполнитьИзТЗ - нужны ДобПараметр()?
разве не автоматом строятся?
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: ВыполнитьSQL_ИзТЗ обнуляет колонку при вставке в SQL
Ответ #22 - 02. Февраля 2011 :: 05:45
Печать  
Если не добавлено ни одного параметра, то они строятся автоматом.
Но лучше это делать самому.
  

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



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: ВыполнитьSQL_ИзТЗ обнуляет колонку при вставке в SQL
Ответ #23 - 02. Февраля 2011 :: 06:01
Печать  
trad писал(а) 01. Февраля 2011 :: 18:14:
vectorov писал(а) 01. Февраля 2011 :: 16:41:
По поводу identity: не могу я его использовать, так как данные я вставляю в две таблицы (шапка и детали) и мне необходимо иметь ключ для их связки, а identity мне не позволит использовать ВыполнитьSQL_ИзТЗ без изысков программирования.
Или я не прав?

Прав в общем то.
Единственный, как я вижу, путь для использования identity - это уйти от ВыполнитьSQL_ИзТЗ.
Т.е. устанавливать параметры вручную, выполнять вставку в шапку. Получать @@IDENTITY. Использовать его для вставки в детали.
минус - менее эффективная передача параметров на сервер.

Можно еще покопать на предмет хранимой процедуры, типа, укладываем записываемые данные во временную таблицу, запускаем хранимую процедуру, которая по этим данным делает нужные инсерты, получает идентити, и т.д.
Вот, например, как у меня работает (там правда не идентити, а свои заморочки):
Код
Выбрать все
CREATE PROCEDURE [dbo].[CD_Update]
	@MyDate datetime,
	@MyDoc varchar(13),
	@Post varchar(9)
AS
DECLARE @SQLError int
SET @SQLError=0
BEGIN TRANSACTION
	--формируем список товаров на изменение
	SELECT Tovar, Date_T, iddoc_T,Active INTO #tmpCD_Update FROM CenaDogovor Where Date_F<=@MyDate and Date_T>@MyDate and Tovar in (SELECT Tovar from #tmpCenaDogovor) and Post=@Post
SET @SQLError=@@ERROR
IF @SQLError<>0 GOTO Error
	SELECT C.Tovar, Min(C.Date_F) as MinD, Min(CD.iddoc_f) as iddoc_f INTO #tmpMinCD_Update FROM CenaDogovor C LEFT JOIN CenaDogovor CD ON C.Tovar=CD.Tovar AND C.iddoc_f=CD.iddoc_f
		Where C.Tovar in (SELECT Tovar from #tmpCenaDogovor) and C.Post=@Post GROUP BY C.Tovar
SET @SQLError=@@ERROR
IF @SQLError<>0 GOTO Error
	--изменяем конечную дату по этому списку
	Update CenaDogovor SET Date_T=@MyDate, iddoc_T=@MyDoc  Where Date_F<=@MyDate and Date_T>@MyDate and Tovar in (SELECT Tovar from #tmpCD_Update) and Post=@Post
SET @SQLError=@@ERROR
IF @SQLError<>0 GOTO Error
	--добавляем новые строки
	insert into CenaDogovor select Date_F,'99990101',Tovar,Post,iddoc_F,'',Cena,ProcPlus,ProcMinus,Active from #tmpCenaDogovor
SET @SQLError=@@ERROR
IF @SQLError<>0 GOTO Error
	--изменяем конечную дату по этому списку
	Update CenaDogovor SET Date_T=t.Date_T, iddoc_T=t.iddoc_T From #tmpCD_Update t Where iddoc_F=@MyDoc and CenaDogovor.Tovar=t.Tovar
	Update CenaDogovor SET Date_T=t.MinD, iddoc_T=t.iddoc_f From #tmpMinCD_Update t Where CenaDogovor.iddoc_F=@MyDoc and CenaDogovor.Tovar=t.Tovar and Date_F<MinD
Error:
DROP TABLE #tmpCenaDogovor
DROP TABLE #tmpCD_Update
DROP TABLE #tmpMinCD_Update
IF @SQLError=0
  BEGIN
    COMMIT TRANSACTION
  END
ELSE
  BEGIN
    ROLLBACK TRANSACTION
  END

GO
 


  
Наверх
ICQ  
IP записан
 
vectorov
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 14
Зарегистрирован: 08. Октября 2010
Пол: Мужской
Re: ВыполнитьSQL_ИзТЗ обнуляет колонку при вставке в SQL
Ответ #24 - 02. Февраля 2011 :: 07:41
Печать  
trad писал(а) 02. Февраля 2011 :: 05:45:
Если не добавлено ни одного параметра, то они строятся автоматом.
Но лучше это делать самому.


А можно добавлять только именованные параметры, а остальные автоматом будут определяться, то есть добавил один параметр, значит надо добавлять все остальные?
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: ВыполнитьSQL_ИзТЗ обнуляет колонку при вставке в SQL
Ответ #25 - 02. Февраля 2011 :: 07:55
Печать  
vectorov писал(а) 02. Февраля 2011 :: 07:41:
то есть добавил один параметр, значит надо добавлять все остальные?
именно так
  

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


I Love YaBB 2!

Сообщений: 262
Зарегистрирован: 27. Июля 2006
Пол: Мужской
Re: ВыполнитьSQL_ИзТЗ обнуляет колонку при вставке в SQL
Ответ #26 - 03. Февраля 2011 :: 05:32
Печать  
Добавил параметры.
в ТЗ должна были строки вида как : 2011-02-01 21:11:35.513, так и 2011-02-01 21:11:35, колонки ТЗ были, соответственно, Строка  23 и Строка 19 параметры, соответственно,  ставил ДобПарам(1,14,23,0) / ДобПарам(1,14,19,0) - все равно "Недопустимый формат"
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: ВыполнитьSQL_ИзТЗ обнуляет колонку при вставке в SQL
Ответ #27 - 03. Февраля 2011 :: 06:22
Печать  
проверил
Код
Выбрать все
рс=СоздатьОбъект("ODBCRecordset");
рс.ВыполнитьИнструкцию("
|if exists (select * from tempdb..sysobjects where id = object_id('tempdb..#tmp1'))
|  drop table #tmp1
|create table #tmp1 (
|  f1 datetime not null
|)
|");

рс.ВыполнитьИнструкцию("insert into #tmp1 (f1) values (getdate())");

рс.Подготовить("insert into #tmp1 (f1) values (?)");
рс.ДобПараметр(1,10,17,0);
рс.УстПараметр(1,ТекущаяДата());
рс.ВыполнитьИнструкцию();

рс.Подготовить("insert into #tmp1 (f1) values (cast(? as datetime))");
рс.ДобПараметр(1,14,23,0);
рс.УстПараметр(1,"2011-02-01 21:11:35.513");
рс.ВыполнитьИнструкцию();

ТЗ=рс.ВыполнитьИнструкцию("select f1 [Поле $Строка] from #tmp1");
ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку()=1 Цикл
    Сообщить(ТЗ.Поле);
КонецЦикла;
 


получил
2011-02-03 09:04:25.083
2011-02-03 00:00:00.000
2011-02-01 21:11:35.513
  

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



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: ВыполнитьSQL_ИзТЗ обнуляет колонку при вставке в SQL
Ответ #28 - 03. Февраля 2011 :: 06:23
Печать  
когда копипастил твое выражение
cast(? аs datetime)
заметил что а - кириллическая
, но ошибка д.б. Incorrect syntax near 'аs'.
  

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


I Love YaBB 2!

Сообщений: 262
Зарегистрирован: 27. Июля 2006
Пол: Мужской
Re: ВыполнитьSQL_ИзТЗ обнуляет колонку при вставке в SQL
Ответ #29 - 03. Февраля 2011 :: 14:02
Печать  
trad писал(а) 03. Февраля 2011 :: 06:22:

Я исполнял запрос с помощью ВыполнитьSQLИзТЗ
поэтому параметры добавлял, но не устанавливал.
в тз тип данных - Строка.
В принципе, сделал обычным запросом в цикле. работает. Но некрасиво, конечно...
  
Наверх
ICQ  
IP записан
 
ezarucheisky
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 4
Зарегистрирован: 21. Января 2011
Re: ВыполнитьSQL_ИзТЗ обнуляет колонку при вставке в SQL
Ответ #30 - 03. Февраля 2011 :: 14:19
Печать  
Указать колонкам в ТЗ тип Дата для этих параметров не пробовал?
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: ВыполнитьSQL_ИзТЗ обнуляет колонку при вставке в SQL
Ответ #31 - 03. Февраля 2011 :: 14:22
Печать  
Mikeware,
Код
Выбрать все
рс.Подготовить("insert into #tmp1 (f1) values (cast(? as datetime))");
рс.ДобПараметр(1,14,23,0);
ИсхТЗ=СоздатьОбъект("ТаблицаЗначений");
ИсхТЗ.НоваяКолонка("Поле","Строка");
ИсхТЗ.НоваяСтрока();
ИсхТЗ.Поле = "2011-02-01 21:11:35.513";
ИсхТЗ.НоваяСтрока();
ИсхТЗ.Поле = "2011-02-02 21:11:35.513";
рс.ВыполнитьSQL_ИзТЗ(ИсхТЗ); 


проверил. работает.

м.б. версия 1с++ или ODBC-драйвера у тебя древние
  

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



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: ВыполнитьSQL_ИзТЗ обнуляет колонку при вставке в SQL
Ответ #32 - 03. Февраля 2011 :: 14:24
Печать  
ezarucheisky писал(а) 03. Февраля 2011 :: 14:19:
Указать колонкам в ТЗ тип Дата для этих параметров не пробовал?

в типе Дата нет времени
  

1&&2&&3
Наверх
 
IP записан
 
ezarucheisky
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 4
Зарегистрирован: 21. Января 2011
Re: ВыполнитьSQL_ИзТЗ обнуляет колонку при вставке в SQL
Ответ #33 - 03. Февраля 2011 :: 14:25
Печать  
// а так уже работать врядли будет:
рс.Подготовить("insert into #tmp1 (f1) values (cast(? as datetime))");
рс.ДобПараметр(1,14,23,0);
ИсхТЗ=СоздатьОбъект("ТаблицаЗначений");
ИсхТЗ.НоваяКолонка("Поле","Строка");
ИсхТЗ.НоваяСтрока();
ИсхТЗ.Поле = "02.02.2011 21:11:35.513";
ИсхТЗ.НоваяСтрока();
ИсхТЗ.Поле = "02.02.2011 21:11:35.513";
рс.ВыполнитьSQL_ИзТЗ(ИсхТЗ);
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: ВыполнитьSQL_ИзТЗ обнуляет колонку при вставке в SQL
Ответ #34 - 03. Февраля 2011 :: 14:27
Печать  
почему?
  

1&&2&&3
Наверх
 
IP записан
 
ezarucheisky
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 4
Зарегистрирован: 21. Января 2011
Re: ВыполнитьSQL_ИзТЗ обнуляет колонку при вставке в SQL
Ответ #35 - 03. Февраля 2011 :: 14:30
Печать  
trad писал(а) 03. Февраля 2011 :: 14:24:
ezarucheisky писал(а) 03. Февраля 2011 :: 14:19:
Указать колонкам в ТЗ тип Дата для этих параметров не пробовал?

в типе Дата нет времени


ага, запамятовал Печаль
  
Наверх
 
IP записан
 
Mikeware
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 262
Зарегистрирован: 27. Июля 2006
Пол: Мужской
Re: ВыполнитьSQL_ИзТЗ обнуляет колонку при вставке в SQL
Ответ #36 - 04. Февраля 2011 :: 17:18
Печать  
trad писал(а) 03. Февраля 2011 :: 14:22:
версия 1с++ или ODBC-драйвера у тебя древние

1с++ - довольно старая но уже 3-я
а вот драйвера - ставил недавно 2005 SQL (кллиентскую часть. попробую завтра снести или попробовать на юзерских машинах)
не подумал об этом.
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать