|
1C и SQL. Ошибка | ☑ | ||
---|---|---|---|---|
0
Катя84
09.07.12
✎
18:38
|
Делаю запрос к SQL
НаSQLSrvMP = ""; СоединениеМП = ПолучитьCOMОбъект("","ADODB.Connection"); СоединениеМП.ConnectionTimeOut = 600; стрПодключения = "Provider=SQLOLEDB;"; стрПодключения = стрПодключения + "Data Source=MP-Server;"; стрПодключения = стрПодключения + "Uid=mp;"; стрПодключения = стрПодключения + "Pwd=mp;"; стрПодключения = стрПодключения + "DataBase=GuidForMP;"; СоединениеМП.Open(стрПодключения); cmdMP=ПолучитьCOMОбъект("","ADODB.Command"); cmdMP.ActiveConnection = СоединениеМП; cmdMP.CommandTimeOut = 600; cmdMP.CommandType = 1; НаSQLSrvMP = " |use processingserver |select 'Время' = cast(substring(DOC.accountdoctime,1,8)+' '+substring(DOC.accountdoctime,9,2)+':'+substring(DOC.accountdoctime,11,2)+':'+substring(DOC.accountdoctime,13,2) as datetime), | 'Карта' = DOC.dcardid-- when '' then 'Выгружено из 1С' else 'Маркет+' end |, |'ТТ' = case doc.systemid when 0 then 'Внешнаяя Система' else sareaname end, |doc.systemid as Kacca, | 'Сумма' = cast(TRANS.transsum/100 as decimal(18,2)) , | 'тип документа' = case DOC.ACCOUNTDOCTYPE | when 0 then 'Оплата' | /*when 2 then 'Возврат'*/ | when 3 then 'Отмена оплаты' | when 4 then 'Начисление' | when 5 then 'Снятие через внешнюю систему' | when 6 then 'Перемещение' | when 7 then 'Конвертация' | when 8 then 'Возврат по схеме оплаты' | when 9 then 'Возврат по чеку' | end | from accounttransroot as TRANS | join accountdocroot as DOC | on TRANS.ACCOUNTDOCID1=DOC.ACCOUNTDOCID1 and TRANS.ACCOUNTDOCID2=DOC.ACCOUNTDOCID2 | join sarea on doc.sareaid=sarea.sareaid | where accountid1=(select accountid1 from account where clntid=(select clntid from dcard where dcardcode='"+ТКС1+"') and accounttypeid=(select clntgrpid from clnt where clntid=(select clntid from dcard where dcardcode='"+ТКС1+"'))) and accountid2=(select accountid2 from account where clntid=(select clntid from dcard where dcardcode='"+ТКС1+"') and accounttypeid=(select clntgrpid from clnt where clntid=(select clntid from dcard where dcardcode='"+ТКС1+"'))) and accountdoctime >= '20120707' | |order by Время |select 'Текущая сумма на счету' = cast(accountsum/100 as decimal(18,2)) from account where clntid=(select clntid from dcard where dcardcode='"+ТКС1+"') and accounttypeid=(select clntgrpid from clnt where clntid=(select clntid from dcard where dcardcode='"+ТКС1+"')) "; cmdMP.CommandText = НаSQLSrvMP; RsMP = cmdMP.Execute();<---- ЗДЕСЬ ВЫЛЕТАЕТ ПО ОШИБКЕ ......... На этом месте выскакивает ошибка: Ошибка при вызове метода контекста (EOF) Пока RsMP.EOF()=0 Цикл по причине: Произошла исключительная ситуация (ADODB.Recordset): Операция не допускается, если объект закрыт. Что это означает "объект закрыт"? |
|||
1
Jaap Vduul
09.07.12
✎
18:39
|
Означает, что объект не открыт.
|
|||
2
Катя84
09.07.12
✎
18:41
|
(1)как его открыть?
|
|||
3
Jaap Vduul
09.07.12
✎
18:43
|
set nocount on
|
|||
4
МихаилМ
09.07.12
✎
18:47
|
сделайте раздельно prepere и open (~= execute)
ну и документацию на ado db почитайте. вобщее бред а не текст запроса where accountid1=(select ... where accountid1=(select ... where accountid1=(select это профнепригодность. |
|||
5
Стальная Крыса
09.07.12
✎
18:47
|
созданный запрос не возвращает набора данных.
лучше увидеть текст созданного запроса, а не код, который его формирует |
|||
6
Стальная Крыса
09.07.12
✎
18:50
|
условия WHERE просто пипец...
|
|||
7
Катя84
09.07.12
✎
18:51
|
(4) да,дурацкий текст. Я второй день как пытаюсь напрямую с SQL данные получать.
при использовании команд use, set не выполнялся запрос в 1с. Прочитала в инете, что с ними не дружит 1с. Обманули? Когда пытаюсь обойти команды,то работает. (5) в SQL менеджмент студии запрос выполняется |
|||
8
Катя84
09.07.12
✎
18:52
|
самой весело смотреть:) так что попрошу без пипец. учусь методом тыка и чтением инета,других материалов нет под рукой...
|
|||
9
Катя84
09.07.12
✎
18:53
|
Изначально запрос был такой:
use processingserver declare @dcard nvarchar(13); declare @clnt int; declare @account1 bigint; declare @account2 bigint; declare @doc1 bigint; declare @doc2 bigint; declare @type int; /* / .!!!!!!!!!!!!!!!!!!!!!!!. */ set @dcard = '2907010854266'; set @clnt = (select clntid from dcard where dcardcode=@dcard); set @type = (select clntgrpid from clnt where clntid=@clnt); if @type not between 3 and 4 set @type=1; set @account1 = (select accountid1 from account where clntid=@clnt and accounttypeid=@type); set @account2 = (select accountid2 from account where clntid=@clnt and accounttypeid=@type); select 'Время' = cast(substring(DOC.accountdoctime,1,8)+' '+substring(DOC.accountdoctime,9,2)+':'+substring(DOC.accountdoctime,11,2)+':'+substring(DOC.accountdoctime,13,2) as datetime), 'Карта' = DOC.dcardid-- when '' then 'Выгружено из 1С' else 'Маркет+' end , 'ТТ' = case doc.systemid when 0 then 'Внешнаяя Система' else sareaname end, doc.systemid as Kacca, 'Сумма' = cast(TRANS.transsum/100 as decimal(18,2)) , 'тип документа' = case DOC.ACCOUNTDOCTYPE when 0 then 'Оплата' /*when 2 then 'Возврат'*/ when 3 then 'Отмена оплаты' when 4 then 'Начисление' when 5 then 'Снятие через внешнюю систему' when 6 then 'Перемещение' when 7 then 'Конвертация' when 8 then 'Возврат по схеме оплаты' when 9 then 'Возврат по чеку' end from accounttransroot as TRANS join accountdocroot as DOC on TRANS.ACCOUNTDOCID1=DOC.ACCOUNTDOCID1 and TRANS.ACCOUNTDOCID2=DOC.ACCOUNTDOCID2 join sarea on doc.sareaid=sarea.sareaid where accountid1=@account1 and accountid2=@account2 and accountdoctime >= '20120707' order by Время select 'Текущая сумма на счету' = cast(accountsum/100 as decimal(18,2)) from account where clntid=@clnt and accounttypeid=@type |
|||
10
Стальная Крыса
09.07.12
✎
18:53
|
(7) чтобы понять - что не так
нужно посмотреть в текст сформированного запроса, текст запроса в студию |
|||
11
Стальная Крыса
09.07.12
✎
19:00
|
(9) мда... кто-то конкретную траву курил...
у меня такой травы нету, буквы расплываются |
|||
12
Стальная Крыса
09.07.12
✎
19:02
|
processingserver - это БД ?
|
|||
13
Sorm
09.07.12
✎
19:10
|
(12) Это БД.
(0) Для начала выполните вот такой запрос = "Select top 1 clntid from dcard". Если выполнится - проблема в запросе, если нет - в ком-объекте. |
|||
14
Стальная Крыса
09.07.12
✎
19:14
|
(0) а какой сакральный смысл подключения к одной БД, а данные тянуть из другой ?
|
|||
15
МихаилМ
09.07.12
✎
19:18
|
странный подход
стрПодключения = стрПодключения + "DataBase=GuidForMP;"; и use processingserver |
|||
16
sapphire
09.07.12
✎
20:28
|
(0)
1)EOF - это свойство, а не метод. 2) Желательно вызвать метод MoveFirst() для объекта RecordSet 3) Запрос гумно |
|||
17
Катя84
10.07.12
✎
10:23
|
(13)запрос выполняется.
|
|||
18
Конфигуратор1с
10.07.12
✎
10:35
|
а чем внешние источники данных не подошли?
|
|||
19
Катя84
10.07.12
✎
10:39
|
(18)Данные все в СКЛ базе хранятся.
|
|||
20
netDog
10.07.12
✎
10:40
|
(19) и? Внешние источники прекрасно забирают данные из СКЛ)
|
|||
21
Конфигуратор1с
10.07.12
✎
10:45
|
(19)так внешние источники данных для того и создали, что бы данные из других баз тянуть
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |