|
|
|
Работа с базой скл из 1С | ☑ | ||
|---|---|---|---|---|
|
0
Мисти
05.10.14
✎
20:54
|
[Id] [uniqueidentifier] NULL
Есть там такое поле. Если его не заполнять, то всё нормально, но у меня есть ситуация, когда Id может быть, а может и не быть, т.е. мне бы хотелось написать в программе Если СокрЛП(СтрДоговорСКЛ.Id)="" Тогда Cmd.Parameters(10).Value = null; Иначе Cmd.Parameters(10).Value = СтрДоговорСКЛ.Id; КонецЕсли; Но, походе, скл мой null не нравится! А иначе надо прямо указывать все поля для заполнения, а их где 15, а где 27. Да, и полей с Id В 1 таблице может быть несколько. Как быть? Может, как-то null по-другому рисовать? |
|||
|
1
zulu_mix
05.10.14
✎
20:56
|
а оно вообще nullable?
|
|||
|
2
Мисти
05.10.14
✎
20:58
|
В 1 строчке описание.
|
|||
|
3
zulu_mix
05.10.14
✎
21:00
|
ну попробуй Cmd.Parameters(10).Value = "null";
|
|||
|
4
zulu_mix
05.10.14
✎
21:00
|
я таким извратом не занимался если честно. я загонял сразу текст запроса
|
|||
|
5
КонецЦикла
05.10.14
✎
21:03
|
Что за база-то?
Записывай пустой тип значения того типа значения - или все поломается? |
|||
|
6
Мисти
05.10.14
✎
21:06
|
(5) Говорят, нельзя! говорят, должно остаться пустым.
Если в запросе написать все нужные поля и этого не указывать вовсе, то всё прекрасно записывается, в этом столбце остается null по умолчанию. |
|||
|
7
КонецЦикла
05.10.14
✎
21:08
|
(6) ОК
Проблема ясна Тогда пиши так: Если СокрЛП(СтрДоговорСКЛ.Id)="" Тогда // Cmd.Parameters(10).Value = null; Иначе Cmd.Parameters(10).Value = СтрДоговорСКЛ.Id; КонецЕсли; |
|||
|
8
Мисти
05.10.14
✎
21:12
|
Нет, так не получится! Тогда надо сначала указывать все поля..
Или нет?? Вот это открытие! Поле указано и не заполняется и всё успешно записывается?? |
|||
|
9
Мисти
05.10.14
✎
21:13
|
Т.е. я думала, что поля, которые я не буду заполнять, я должна заранее определить как NULL, вот так:
ТекстЗапроса = "INSERT INTO gtw_ObjectInContract VALUES |(NULL, |?, |?, |?, |?, |NULL, |?, |?, |?)"; |
|||
|
10
Fragster
гуру
05.10.14
✎
21:19
|
как в (0) при условии prepared statements как в (9) работает.
единственное, можно параметры не в саму команду писать, а в ComМассив("VT_VARIABLE") и передавать параметром в Execute() |
|||
|
11
Fragster
гуру
05.10.14
✎
21:20
|
а вот без сообщения об ошибке как-то не круто рассуждать.
|
|||
|
12
КонецЦикла
05.10.14
✎
21:24
|
insert into ObjectInContract (Id25) values ('33')
Ставишь только id25 А еще есть default values - но это уже 80 lvl |
|||
|
13
КонецЦикла
05.10.14
✎
21:32
|
(8) Ну как? Спать не будешь точно :)
Или будешь? Поле НЕ УКАЗАНО в перечислении полей - тогда работает |
|||
|
14
Мисти
05.10.14
✎
21:40
|
Ничего не поняла. Наверное, таки спать пора.
Мне понравилась идея, что я перечислю для заполнения 10полей (как в п. 9), а заполню только часть, какие не сочту нужным - не заполню. У нее есть шанс сообразить, что я имела в виду. |
|||
|
15
КонецЦикла
05.10.14
✎
21:44
|
Млин, я рассчитывал на о-зм... жаль...
Допустим, в таблице ObjectInContract есть поля id2, id3, id25 Надо вставить id3, id25, а id2 оставить NULL Пишешь insert into ObjectInContract (id3, id25) values ('33', '44') |
|||
|
16
Мисти
05.10.14
✎
21:55
|
(15) Так это понятно! Это у меня в 0 описано
"А иначе надо прямо указывать все поля для заполнения, а их где 15, а где 27. Да, и полей с Id В 1 таблице может быть несколько. " - так вот, все 27, где 4 могут быть типа ид и любой из них может быть не заполнен - это что же за простыня получится?? Каждый раз я в общем случае должна заполнить все поля. |
|||
|
17
КонецЦикла
05.10.14
✎
21:57
|
(16) Ну ты и зануда!
Динамически формируй запрос, примени фантазию Если проще можно сделать так insert into ObjectInContract default values Потом проапдейтить пару поле - будет меньше простыня |
|||
|
18
КонецЦикла
05.10.14
✎
21:58
|
Не, девушки-программистки это пистец...
|
|||
|
19
КонецЦикла
05.10.14
✎
22:00
|
Что значит "и полей с Id В 1 таблице может быть несколько"?
Поля должны иметь уникальное имя в пределах таблицы |
|||
|
20
Мисти
06.10.14
✎
10:31
|
Там может быть ид договора, ид контрагента и т.д., у которых те же ограничения.
А если я везде напишу попытка - исключение? При первичной выгрузке этих ид наверняка нет, а потом - они скорее всего будут, в 99 из 100. |
|||
|
21
КонецЦикла
06.10.14
✎
14:04
|
Ну и что? Трудно написать процедуру формирования текста запроса? Она будет смотреть заполненность значения и формировать отдельно текст списка полей и текст списка значений. Никакой простыни и близко в коде не будет. Несколько строчек.
|
|||
|
22
Мисти
06.10.14
✎
14:17
|
(21) У меня разных таких таблиц штук 20 - это вообще всё переписать!
Причем, если написать непосредственно в базе insert [dbo].[gtw_AccountBillingInfoExport]( [Id], [ModifiedOnBPMonline], [DoDelete], [AccountId], [CountryUi1C], [INN], [OKPOCode], [BankBIK], [AccountNumber]) values( NULL, GETDATE(), 0, NULL, NULL, '12312312', '123123312', 'asdasd', 'asdasd' ), то работает, а если из 1С, то нет. Может есть какой-то фокус, чтобы их null определить из 1с? |
|||
|
23
Sammo
06.10.14
✎
14:33
|
(22) Сделай хранимку с параметрами и вызывай ее из 1с.
Но вообще-то у меня инсерт | NULL, работает Текс запроса дальше как используется? Command? Поля поддерживает NULL? |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |