Имя: Пароль:
1C
1С v8
Помогите с скл-запросом!
0 Мисти
 
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();
Вот в таком духе?
3 Beduin
 
04.09.18
18:47
(2) Попробуй так Cmd.Parameters[0].Value
4 Мисти
 
04.09.18
18:48
то, что в (2) - работает.
Мне нужно запрос на добавление (инсерт) с перечислением полей.
5 Fram
 
04.09.18
18:50
(0) не мешало бы в скобках перечислить названия полей.
в Management Studio запрос проходит?
6 Beduin
 
04.09.18
18:50
7 Fram
 
04.09.18
18:51
короче читайте MSDN
8 Cool_Profi
 
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 = ?)";

Вот на такой запрос ругается тем, что в топике.
10 Fram
 
04.09.18
18:53
(9) еще раз (7)
11 Мисти
 
04.09.18
18:53
просто перечислить, потом просто все значения перечислить - не очень удобно, их много, я пишу как в (2)
12 Fram
 
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;
Вот вариант для обновления записи, хочу такой же для вставки.
15 Fram
 
04.09.18
18:55
(13) -> (12)
16 Fram
 
04.09.18
18:55
(14) -> (7)
17 Fram
 
04.09.18
18:58
Открываете Management Studio и пишите там свой запрос пока он не заработает как надо. После этого переносите его в 1С и заменяете значения плюсиками
18 Мисти
 
04.09.18
19:04
(17) ТекстЗапроса = "INSERT INTO gtw_Accounts  - если мне нужно только одно поле INN - как написать?
Чтоб сначала запрос, потом присвоение значений?
19 Fram
 
04.09.18
19:09
(18) я правильно понял, что у вас таблица из 20 полей, и Вы хотите добавить новую запись и заполнить только 1 поле? понимаете, что остальные поля пустыми будут?
20 Мисти
 
04.09.18
19:10
Да, пусть пустые.
Сейчас заполню 3, потом еще 17. Надо понять, что там не так и почему все 20 не заполняются.
21 Fram
 
04.09.18
19:13
(20) ну раз у вас гугл, яндекс и прочее не работает, вот
INSERT INTO (названиеполя1, названиеполя2,..) VALUES (знаяениеполя1, знаяениеполя2,..)
22 Fram
 
04.09.18
19:13
пардон
INSERT INTO имятаблицы (названиеполя1, названиеполя2,..) VALUES (знаяениеполя1, знаяениеполя2,..)
23 Cool_Profi
 
04.09.18
19:14
А что, ничего не изменилось за последний месяц? И Масяна продолжает тупить?
24 Fram
 
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();
Вот в таком духе?
26 Fram
 
04.09.18
19:21
(25) я не знаю что еще можно добавить ко всему вышенаписанному
27 Мисти
 
04.09.18
19:33
(26) А я так и догадалась, что Вы темой не очень владеете. Спасибо за желание помочь всё равно!
28 Fram
 
04.09.18
19:36
(27) вы наверно издеваетесь. любой первокурсник зная (17) и (22) напишет нужный запрос за полчаса, а вы как двоечница готового решения ждете
29 Мисти
 
04.09.18
19:38
Какие полчаса?  мне нужна одна строчка!!
30 Salimbek
 
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 = Истина;
33 Salimbek
 
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

без скобочек было!
40 Fram
 
05.09.18
01:22
(38) Выражение Best Practices о чем нибудь говорит? Так вот НЕ перечислять названия колонок это как бэ Worst Practices. Почему объяснять надо?
41 МихаилМ
 
05.09.18
01:23
42 sechs
 
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
как получить листинг столбцов?
47 Salimbek
 
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,и только после этого параметры

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