![]() |
|
ADODB.Recordset | ☑ | ||
---|---|---|---|---|
0
Gisborn
16.11.12
✎
16:29
|
Есть
Подключение = Новый ComObject("ADODB.Connection"); Подключается, все в порядке. ТекстЗапроса = "INSERT INTO Threads (ThreadTypeID,ThreadDescr,OperatorLoginCreated) |VALUES ('что-то','что-то','что-то') |DECLARE @LastId as int |SELECT @LastID = SCOPE_IDENTITY() FROM Threads |INSERT INTO Msgs (ThreadId, OperatorLogin, MsgText) values (@LastId,'operator','msg') |SELECT @LastID as LastID КомандаSQL = Новый COMObject("ADODB.Command"); КомандаSQL.ActiveConnection = Подключение; КомандаSQL.NamedParameters = True; КомандаSQL.CommandType = 1; КомандаSQL.Prepared = Истина; КомандаSQL.CommandText = ТекстЗапроса; ЗаписиSQL = Новый ComObject("ADODB.RecordSet"); ЗаписиSQL = КомандаSQL.Execute(); Данные = ЗаписиSQL.GetRows().Выгрузить(); Т.е. мне нужно вставить запись в одну таблицу, получить ее ID, и с этим ID вставить запись в связанную таблицу. После этого вернуть этот самый ID в 1с. Запрос отрабатывает, записи в базу SQL попадают. Возвратить LastID не получается. Ошибка при вызове метода контекста (GetRows) Данные = ЗаписиSQL.GetRows().Выгрузить(); по причине: Произошла исключительная ситуация (ADODB.Recordset): Операция не допускается, если объект закрыт. Помогите разобраться, пожалуйста. |
|||
1
ДенисЧ
16.11.12
✎
16:32
|
Поппробуй так
ТекстЗапроса = " |SET NOCOUNT ON |INSERT INTO Threads (ThreadTypeID,ThreadDescr,OperatorLoginCreated) |VALUES ('что-то','что-то','что-то') |DECLARE @LastId as int |SELECT @LastID = SCOPE_IDENTITY() FROM Threads |INSERT INTO Msgs (ThreadId, OperatorLogin, MsgText) values (@LastId,'operator','msg') |SELECT @LastID as LastID КомандаSQL = Новый COMObject("ADODB.Command"); КомандаSQL.ActiveConnection = Подключение; КомандаSQL.NamedParameters = True; КомандаSQL.CommandType = 1; КомандаSQL.Prepared = Истина; КомандаSQL.CommandText = ТекстЗапроса; ЗаписиSQL = Новый ComObject("ADODB.RecordSet"); ЗаписиSQL = КомандаSQL.Execute(); ЗаписиSQL = ЗаписиSQL.NextRecordset(); |
|||
2
Gisborn
16.11.12
✎
16:36
|
тут ЗаписиSQL = ЗаписиSQL.NextRecordset();
ЗаписиSQL становятся равными Неопределено |
|||
3
Gisborn
16.11.12
✎
16:39
|
Поменял SELECT @LastID as LastID
на SELECT TOP 1 @LastId as LastId FROM Threads GetRows перестал падать, значение возвращается. Наверно неправильно, но работает. |
|||
4
Serginio1
16.11.12
✎
17:02
|
Так у тебя возвращается несколько @LastID
|SELECT @LastID = SCOPE_IDENTITY() FROM Threads |INSERT INTO Msgs (ThreadId, OperatorLogin, MsgText) values (@LastId,'operator','msg') |SELECT @LastID as LastID Кстати выбирает множество запросов РекордСет=Command.Execute(); Резулт=""; Пока РекордСет<>неопределено Цикл Если РекордСет.Fields.Count>0 Тогда Поле=РекордСет.Fields(0); Стр=Поле.Name+" "+Поле.Value; Если ЗначениеЗаполнено(Резулт) тогда Резулт=Резулт+" |"+Стр иначе Резулт=Стр; КонецЕсли; КонецЕсли; РекордСет=РекордСет.NextRecordSet(); КонецЦикла; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |