Вход | Регистрация


1С:Предприятие ::

Метки: 

Помогите с скл-запросом!

Я
   Мисти
 
04.09.18 - 18:39
{ОбщийМодуль.ОбменДаннымиСНовойСРМ.Модуль(1074)}: Ошибка при вызове метода контекста (Parameters)
            Cmd.Parameters(0).Value = СтрКонтрСКЛ.UI1C;
по причине:
Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Ошибка синтаксиса или нарушение прав доступа - вот такая ошибка вылетает, до этого говорила, что у меня количество параметров не совпадает.
Было написано так - ТекстЗапроса = "INSERT INTO gtw_Accounts () VALUES
и дальше 20 вопросов (20 полей) и для каждого поля присвоение -
            Cmd.CommandText = ТекстЗапроса;
            Cmd.Parameters(0).Value = СтрКонтрСКЛ.UI1C;
 
 
   Мисти
 
1 - 04.09.18 - 18:41
100 раз пересчитала - полей 20, вопросов 20, присвоений 20.
Нет больше идей, кроме как назвать поля и поименно проставить значения.
Как написать запрос INSERT с перечислением полей?
   Мисти
 
2 - 04.09.18 - 18:41
ТекстЗапроса = "SELECT top 1 * FROM gtw_Accounts WHERE ([UI1C] = ?) and ([From1C]= ?)";
        Cmd.CommandText = ТекстЗапроса;
        Cmd.Parameters(0).Value = СтрКонтрСКЛ.UI1C;
        Cmd.Parameters(1).Value = Истина;
        Выборка = Cmd.Execute();
 Вот в таком духе?
   Beduin
 
3 - 04.09.18 - 18:47
(2) Попробуй так Cmd.Parameters[0].Value
   Мисти
 
4 - 04.09.18 - 18:48
то, что в (2) - работает.
Мне нужно запрос на добавление (инсерт) с перечислением полей.
   Fram
 
5 - 04.09.18 - 18:50
(0) не мешало бы в скобках перечислить названия полей.
в Management Studio запрос проходит?
   Beduin
 
6 - 04.09.18 - 18:50
   Fram
 
7 - 04.09.18 - 18:51
короче читайте MSDN
   Cool_Profi
 
8 - 04.09.18 - 18:51
NSERT INTO gtw_Accounts (f1, f2....) VALUES
   Мисти
 
9 - 04.09.18 - 18:52
ТекстЗапроса = "INSERT INTO gtw_Accounts
            |(UI1C = ?,FromBPM = ?, From1C = ?, DoDelete = ?, Name = ?, AccountOwnerShip = ?,  FullName = ?, ParentAccountId = ?,PhoneNumber = ?,Region = ?,City = ?,
            |ZIP = ?,LegalAddress = ?, FactAddress = ?, INN = ?,  OKPO = ?, KPP = ?,OGRN = ?, Email = ?)";

Вот на такой запрос ругается тем, что в топике.
   Fram
 
10 - 04.09.18 - 18:53
(9) еще раз (7)
 
 Рекламное место пустует
   Мисти
 
11 - 04.09.18 - 18:53
просто перечислить, потом просто все значения перечислить - не очень удобно, их много, я пишу как в (2)
   Fram
 
12 - 04.09.18 - 18:54
(11) к сожалению, программисты Майкрософт не знали как Вам будет удобно и сделали так как сделали
   Мисти
 
13 - 04.09.18 - 18:54
(10) Мне всего-то одна команда! Там понаписано уже 5 тыщ строк и всё работает 3 года, а теперь - доработка, поле добавили (два) и всё сломалось.
   Мисти
 
14 - 04.09.18 - 18:55
ТекстЗапроса = "update gtw_Accounts set FromBPM = ?, DoDelete = ?, Name = ?,AccountOwnerShip = ?,  FullName = ?, ParentAccountId = ?,PhoneNumber = ?,Region = ?,City = ?,
            |ZIP = ?,LegalAddress = ?, FactAddress = ?, INN = ?,  OKPO = ?, KPP = ?,OGRN = ?,Email = ?  WHERE (UI1C = ?) and ([From1C]= ?)"; 
            Cmd.CommandText = ТекстЗапроса;
            Cmd.Parameters(0).Value = Ложь;
            Cmd.Parameters(1).Value = СтрКонтрСКЛ.DoDelete;
 Вот вариант для обновления записи, хочу такой же для вставки.
   Fram
 
15 - 04.09.18 - 18:55
(13) -> (12)
   Fram
 
16 - 04.09.18 - 18:55
(14) -> (7)
   Fram
 
17 - 04.09.18 - 18:58
Открываете Management Studio и пишите там свой запрос пока он не заработает как надо. После этого переносите его в 1С и заменяете значения плюсиками
   Мисти
 
18 - 04.09.18 - 19:04
(17) ТекстЗапроса = "INSERT INTO gtw_Accounts  - если мне нужно только одно поле INN - как написать?
Чтоб сначала запрос, потом присвоение значений?
   Fram
 
19 - 04.09.18 - 19:09
(18) я правильно понял, что у вас таблица из 20 полей, и Вы хотите добавить новую запись и заполнить только 1 поле? понимаете, что остальные поля пустыми будут?
   Мисти
 
20 - 04.09.18 - 19:10
Да, пусть пустые.
Сейчас заполню 3, потом еще 17. Надо понять, что там не так и почему все 20 не заполняются.
   Fram
 
21 - 04.09.18 - 19:13
(20) ну раз у вас гугл, яндекс и прочее не работает, вот
INSERT INTO (названиеполя1, названиеполя2,..) VALUES (знаяениеполя1, знаяениеполя2,..)
   Fram
 
22 - 04.09.18 - 19:13
пардон
INSERT INTO имятаблицы (названиеполя1, названиеполя2,..) VALUES (знаяениеполя1, знаяениеполя2,..)
   Cool_Profi
 
23 - 04.09.18 - 19:14
А что, ничего не изменилось за последний месяц? И Масяна продолжает тупить?
   Fram
 
24 - 04.09.18 - 19:17
(23) ну, рвения и упорства у нее не отнять. работодателя жаль только )
   Мисти
 
25 - 04.09.18 - 19:18
(21) Это мне гугл показал.
Но мне чтоб через параметры, вот в таком духе -
ТекстЗапроса = "SELECT top 1 * FROM gtw_Accounts WHERE ([UI1C] = ?) and ([From1C]= ?)";

        Cmd.CommandText = ТекстЗапроса;
        Cmd.Parameters(0).Value = СтрКонтрСКЛ.UI1C;
        Cmd.Parameters(1).Value = Истина;
        Выборка = Cmd.Execute();
 Вот в таком духе?
   Fram
 
26 - 04.09.18 - 19:21
(25) я не знаю что еще можно добавить ко всему вышенаписанному
   Мисти
 
27 - 04.09.18 - 19:33
(26) А я так и догадалась, что Вы темой не очень владеете. Спасибо за желание помочь всё равно!
   Fram
 
28 - 04.09.18 - 19:36
(27) вы наверно издеваетесь. любой первокурсник зная (17) и (22) напишет нужный запрос за полчаса, а вы как двоечница готового решения ждете
   Мисти
 
29 - 04.09.18 - 19:38
Какие полчаса?  мне нужна одна строчка!!
   Salimbek
 
30 - 04.09.18 - 23:07
(29) Ну держи:
ТекстЗапроса = "INSERT INTO gtw_Accounts
            |(UI1C, FromBPM, From1C, DoDelete, Name, AccountOwnerShip, FullName, ParentAccountId, PhoneNumber, Region, City,
            |ZIP, LegalAddress, FactAddress, INN, OKPO, KPP, OGRN, Email)
            |VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
Только уточняю, что тут 19 полей, а не 20, как вы пишете в (0). И то, как было написано в (0), т.е. INTO gtw_Accounts() без указания полей в скобочках, работает, но только если количество значений совпадает с количеством полей в таблице, и порядок - тоже такой же, как и в самой таблице. А если вы пытаетесь засунуть 20 полей в 19 колонок - то может и ругаться.
   Мисти
 
31 - 04.09.18 - 23:10
Да, я знаю, у меня одно поле заведомо null, и я вместо вопроса так про него и пишу.
Спасибо большое! Пока выгрузила в текст. Оказывается, это одноразовая выгрузка и нет смысла так морочиться.
   Мисти
 
32 - 04.09.18 - 23:11
А потом про все 19 - вот таким манером - да?
Cmd.Parameters(1).Value = Истина;
   Salimbek
 
33 - 04.09.18 - 23:22
(31) В запросе в (14) нет ни имени этого поля, ни null, поэтому и обращаю внимание, т.к. если попробуешь записать, то можно получить ошибку. И еще - надеюсь никаких автоинкрементных полей у тебя в этой таблице нет и никакой уникальный индекс ты не нарушаешь...
(32) Я таким не пользуюсь, но чисто теоретически - да, только циферку после Parameters менять не забывай )))
 
 
   Мисти
 
34 - 04.09.18 - 23:31
ТекстЗапроса = "INSERT INTO gtw_Accounts () VALUES
            |(NULL,
            |?,    
            |?,   
            |?,      
            |?,      
            |?,     
            |?,   
            |?,      
            |?,      
            |?,
            |?,
            |?,
            |?,
            |?,
            |?,
            |?,
            |?,
            |?,
            |?,
            |?)";
            Cmd.CommandText = ТекстЗапроса;
            Cmd.Parameters(0).Value = СтрКонтрСКЛ.UI1C;
            Cmd.Parameters(1).Value = Ложь;
            Cmd.Parameters(2).Value = Истина;
            Cmd.Parameters(3).Value = СтрКонтрСКЛ.DoDelete;
            Cmd.Parameters(4).Value = СтрКонтрСКЛ.Name;
            Cmd.Parameters(5).Value = СтрКонтрСКЛ.AccountOwnerShip;
            Cmd.Parameters(6).Value = СтрКонтрСКЛ.FullName;
            Cmd.Parameters(7).Value = СтрКонтрСКЛ.ParentAccountId;
            Cmd.Parameters(8).Value = СтрКонтрСКЛ.PhoneNumber;
            Cmd.Parameters(9).Value = СтрКонтрСКЛ.Region;
            Cmd.Parameters(10).Value = СтрКонтрСКЛ.City;
            Cmd.Parameters(11).Value = СтрКонтрСКЛ.ZIP;
            Cmd.Parameters(12).Value = СтрКонтрСКЛ.LegalAddress;
            Cmd.Parameters(13).Value = СтрКонтрСКЛ.FactAddress;
            Cmd.Parameters(14).Value = СтрКонтрСКЛ.INN;
            Cmd.Parameters(15).Value = СтрКонтрСКЛ.OKPO;
            Cmd.Parameters(16).Value = СтрКонтрСКЛ.KPP;     
            Cmd.Parameters(17).Value = СокрЛП(СтрКонтрСКЛ.OGRN);// сентябрь 2018

            Cmd.Parameters(18).Value = СокрЛП(СтрКонтрСКЛ.Email);
   Мисти
 
35 - 04.09.18 - 23:32
Вот так было. Там же нет ошибки? (хотя, какая-то есть, не выгружается)
   МихаилМ
 
36 - 04.09.18 - 23:33
поищите по этому форуму. тема обсуждалась сотни раз за 15 лет.
   Мисти
 
37 - 04.09.18 - 23:35
(36) Спасибо, уже и совет дали и ошибку почти нашли, и я всё по-другому переделала.
   Мисти
 
38 - 04.09.18 - 23:38
ТекстЗапроса = "INSERT INTO gtw_Accounts VALUES

без скобочек было!
   Fram
 
40 - 05.09.18 - 01:22
(38) Выражение Best Practices о чем нибудь говорит? Так вот НЕ перечислять названия колонок это как бэ Worst Practices. Почему объяснять надо?
   МихаилМ
 
41 - 05.09.18 - 01:23
   sechs
 
42 - 05.09.18 - 06:32
(40) > Почему объяснять надо
А давай.
   Мисти
 
43 - 07.09.18 - 13:09
ТекстЗапроса = "INSERT INTO gtw_Accounts
            |(FromBPM,From1C,Id,DoDelete)
            |VALUES(?,?,?,?)"; 
            Cmd.CommandText = ТекстЗапроса;
            Cmd.Parameters(0).Value = Ложь;
            Cmd.Parameters(1).Value = Истина;
            Cmd.Parameters(2).Value = null;     
            Cmd.Parameters(3).Value = Ложь;     
            Cmd.Execute();
   Мисти
 
44 - 07.09.18 - 13:10
Вот в этом запросе ведь нет ошибки?
   Мисти
 
45 - 07.09.18 - 13:22
Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Имя столбца или число предоставленных значений не соответствует определению таблицы.
В таблице значений больше! Но обязательно заполнять только 3.
Что она от меня хочет?
   Мисти
 
46 - 07.09.18 - 13:24
как получить листинг столбцов?
   Salimbek
 
47 - 07.09.18 - 18:47
(46) В SQL-студии - правой кнопкой мышки на таблице - Script table as - Insert to - New query, и смотришь - какой запрос генерируется сервером. Потом подпиливаешь его у себя, пока не заработает, разбираешься с количеством параметров и проч.. И только после этого переносишь рабочий код в 1С.
   Сияющий в темноте
 
48 - 07.09.18 - 20:40
Если поле может быть Null,то ему пишут Null.
А куда мы запрос фигачим?
может бытт,мы к базе в режиме ReadOnly подключились,и хотим чуда?
   Сияющий в темноте
 
49 - 07.09.18 - 20:42
Мы создаем обьект Command,присваиваем CommandText,выставив правильный CommandType,и только после этого параметры

а так как жалуется на нулевой параметр,то он просто не понял,что вы от него хотели,и где то написал ошибку запроса.
 
 Рекламное место пустует
   Fram
 
50 - 07.09.18 - 22:13
Скорее всего, тупо ошибка в наименовании поля
   Franchiser
 
51 - 08.09.18 - 00:41
(34) что такое gtw_Accounts () ? Функция какая то?
   Cool_Profi
 
52 - 08.09.18 - 10:13
(45) А что, CreateParameter уже не надо говорить для каждого параметра?



Список тем форума
Рекламное место пустует Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует