|
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();
|
|
|
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();
КонецЦикла;
|
|