|
Запись новой строки из таблицы в MS SQL Server | ☑ | ||
---|---|---|---|---|
0
catherineskoch
10.12.19
✎
19:44
|
Здравствуйте, очень нужна помощь.
В общем, есть БД в MS SQL Server Есть 1С БП, в которую дописана обработка соединения с БД. С божьей помощью я вывела таблицу из БД в таблицу на форму в 1С. Вот код соединения с БД: Процедура ВыполнитьОбработкуНасервере() //Инициализация переменных ИмяСервераSQL = "WIN-1D641A4LV0A\SQLEXPRESS"; ПользовательSQL = "sa"; ПарольSQL = "123"; БазаДанныхSQL = "BROK1"; ТаблицаSQL = "BROK1.dbo.MN"; //Подключение к SQL-серверу Попытка Соединение = Новый COMОбъект("ADODB.Connection"); Команда = Новый COMОбъект("ADODB.Command"); Выборка = Новый COMОбъект("ADODB.RecordSet"); Соединение.ConnectionString = "driver={SQL Server};" + "server="+ИмяСервераSQL+";"+ "uid="+ПользовательSQL+";"+ "pwd="+ПарольSQL+";"+ "database="+БазаДанныхSQL+";"; Соединение.ConnectionTimeout = 30; Соединение.CommandTimeout = 600; //Открытие соединение Соединение.Open(); Команда.ActiveConnection = Соединение; Сообщить("Успешное подключение!"); Исключение Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки; таблица.Очистить(); ТекстИнструкции ="SELECT BROK1.dbo.MN.MN_DOC_NUMBER, | BROK1.dbo.PRODUCTS.P_NAME, | BROK1.dbo.MN.MN_QUANTITY | FROM BROK1.dbo.MN | JOIN BROK1.dbo.PRODUCTS | ON BROK1.dbo.PRODUCTS.P_NAME = BROK1.dbo.MN.MN_PRODUCT"; Команда.CommandText = ТекстИнструкции; ЗаписиSQL = Команда.Execute() Пока ЗаписиSQL.EOF=0 Цикл // Заполнение созданной таблицы НоваяСтрока = Таблица.Добавить(); НоваяСтрока.MN_DOC_NUMBER = ЗаписиSQL.Fields(0).Value; НоваяСтрока.P_NAME = ЗаписиSQL.Fields(1).Value; НоваяСтрока.MN_QUANTITY = ЗаписиSQL.Fields(2).Value; ЗаписиSQL.MoveNext(); КонецЦикла; КонецПроцедуры Это выглядит вот таким образом https://ibb.co/w6fzRcD И вот теперь, что я хочу. Я хочу добавить кнопочку "Записать новую запись в БД", после нажатия которой добавленная запись записывается в базу данных. Как это сделать, подскажите, пожалуйста. |
|||
1
Ёпрст
10.12.19
✎
19:46
|
(0) читайте про insert
|
|||
2
catherineskoch
10.12.19
✎
19:48
|
Я знаю, как написать запрос
вот например INSERT INTO BROK1.dbo.MN ([MN_DOC_NUMBER], [MN_PRODUCT],[MN_QUANTITY]) VALUES ('2', 'Продукция 1', '3') Но как реализовать это из 1С? |
|||
3
MyNick
10.12.19
✎
19:50
|
(2) ну очевидно что
Команда.CommandText = ТекстИнструкции; Команда.Execute() |
|||
4
Ёпрст
10.12.19
✎
19:50
|
(2) что значит как ?
|
|||
5
Ёпрст
10.12.19
✎
19:51
|
*RecordSet = Новый COMОбъект("ADODB.RecordSet"); //это лишнее
|
|||
6
catherineskoch
10.12.19
✎
19:55
|
(4), а как сделать, чтобы в VALUES были значения из полей таблицы? вот как выглядит таблица https://ibb.co/LZzCNCm
и еще, не могли бы Вы подсказать, как реализовать цикл, если например будут добавляться сразу несколько записей? ЭтоНовый подойдет? |
|||
7
catherineskoch
10.12.19
✎
19:57
|
Так, не пояснила про ЭтоНовый, то есть как я это понимаю, цикл как-то должен проверить, какие записи являются новыми и только их записать
|
|||
8
Ёпрст
10.12.19
✎
19:58
|
(6) обходишь свою коллекцию и собираешь строку для инсерта динамически.
Если это не разовая задача, то можно через внешние источники слепить, там прям "1с -ый" синтаксис будет |
|||
9
Ёпрст
10.12.19
✎
19:58
|
(7) тогда проверяешь, если запись есть по ключевым полям, тогда update, иначе insert
|
|||
10
Ёпрст
10.12.19
✎
20:00
|
||||
11
catherineskoch
10.12.19
✎
20:08
|
(6) я что-то читала про внешние источники, мне сказали их не трогать и делать все через COMO объекты, вот.
что Вы написали в (10) я поняла только интуитивно, не уверена, что смогу вообще это как-то реализовать и мне кажется, что Вы сейчас очень переоценили мои знания и способности. Смотрите, вот я начинаю писать процедуру &НаСервере Процедура ЗаписьНовуюЗаписьНаСервере() как отсюда обратиться к таблице и проверить, что строка является новой? далее, если она новая, то надо выполнить запрос на добавление текст запроса и все также для меня загадка, как обратиться к полям таблицы.... КонецПроцедуры |
|||
12
catherineskoch
10.12.19
✎
20:10
|
Вот что я смогла написать в той же процедуре, где и чтение записей
//Для каждого стр из Таблица цикл // ТекстТекущейИнструкции = "INSERT INTO BROK1.dbo.MN ([MN_DOC_NUMBER], [MN_PRODUCT],[MN_QUANTITY]) // | VALUES '"+Стр.MN_DOC_NUMBER+"', '"+Стр.P_NAME+"', '"+Стр.MN_QUANTITY+"'"; // Команда.CommandText = ТекстТекущейИнструкции; // ЗаписиSQL = Команда.Execute(); //КонецЦикла; И вот не могу сообразить как сделать не для каждого, а для новой стр из таблицы |
|||
13
Ёпрст
10.12.19
✎
20:10
|
(11) для начала, нужно определиться, что вы считаете "новой" строкой. Там где все поля совпадают ?
|
|||
14
catherineskoch
10.12.19
✎
20:12
|
(13) ну вот я нажимаю "добавить" и ввожу значения. пока что вообще нет необходимости проверять является ли она уникальной, просто чтобы была добавлена самостоятельно в 1С
|
|||
15
catherineskoch
10.12.19
✎
20:12
|
Хотя наверное будет проще проверить является ли она уникальной, а не просто новой, так? Наверное..
|
|||
16
H A D G E H O G s
10.12.19
✎
21:09
|
(11) Прекратите трогать тех, кто сказал вам про ВнешниеИсточники и сделайте по человечьи, тоесть через ВнешниеИсточники
|
|||
17
AAA
11.12.19
✎
04:04
|
(0)Зачем вообще Вам вставка записи средствами SQL ? Поясните свою задачу более предметно. Что Вы хотите добавить ?
|
|||
18
Sserj
11.12.19
✎
04:23
|
(12)
ТекстТекущейИнструкции = " |IF NOT exists(SELECT * | FROM BROK1.dbo.MN | WHERE MN_DOC_NUMBER = '"+Стр.MN_DOC_NUMBER+"' | AND MN_PRODUCT = '"+Стр.P_NAME+"' | AND MN_QUANTITY = '"+Стр.MN_QUANTITY+"'" | ) |INSERT INTO BROK1.dbo.MN ([MN_DOC_NUMBER], [MN_PRODUCT],[MN_QUANTITY]) |VALUES '"+Стр.MN_DOC_NUMBER+"', '"+Стр.P_NAME+"', '"+Стр.MN_QUANTITY+"' |" |
|||
19
Sserj
11.12.19
✎
04:34
|
+(18) Кстати кажется при вставке значения должны быть в скобках:
INSERT INTO BROK1.dbo.MN ([MN_DOC_NUMBER], [MN_PRODUCT],[MN_QUANTITY]) VALUES ('"+Стр.MN_DOC_NUMBER+"', '"+Стр.P_NAME+"', '"+Стр.MN_QUANTITY+"')" |
|||
20
catherineskoch
11.12.19
✎
15:55
|
(19) общаться конструкцией Стр.ИмяПоля можно в том случае, если используется цикл для каждого стр из таблица цикл
иначе непонятно, что за стр вот у меня и возникают вопросы, как это сделать |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |