![]() |
![]() |
![]() |
|
Помогите с скл-запросом! | ☑ | ||
---|---|---|---|---|
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
|
(4) Так это коллекция
https://msdn.microsoft.com/ru-ru/library/system.data.sqlclient.sqlparametercollection(v=vs.110).aspx Cmd.Parameters.Add( |
|||
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 уже не надо говорить для каждого параметра?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |