7.7 sql запрос не выполняется

Тема в разделе "Обмен данными в "1С:Предприятие 7.7"", создана пользователем wertklop, 16 мар 2010.

  1. TopicStarter Overlay
    wertklop
    Offline

    wertklop Опытный в 1С

    Регистрация:
    12 май 2008
    Сообщения:
    321
    Симпатии:
    0
    Баллы:
    26
    Код:
    Соединение = СоздатьОбъект("ADODB.Connection"); 
    Соединение.Mode=1;
    СтрокаСоединенияБазыТоваров="Provider=MSDASQL.1;Persist Security Info=False;Data Source=PostgreSQL3W";
    Попытка 
    Соединение.ConnectionString=СтрокаСоединенияБазыТоваров;
    Соединение.Open();
    Сообщить("Подключение успешно!");
    Исключение
    Сообщить(ОписаниеОшибки());
    Сообщить("Подключение не выполнено!");
    КонецПопытки;
    
    
    
    сообщает об учпешном соединении
    Код:
    Rs = СоздатьОбъект("ADODB.Command");
    Rs.ActiveConnection = Соединение;
    ТекстЗапроса="select count(*) from ware1 where internal_id=00000916";
    Rs.CommandText=ТекстЗапроса;
    Попытка
    Rs.Execute();
    сообщить(Rs.Fields("count").Value);
    Исключение
    Сообщить(ОписаниеОшибки());        
    КонецПопытки;
    
    
    
    пишет: "Поле агрегатного объекта не обнаружено (Fields)"
  2. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    1) Когда открываете - где параметры подключения?
    Код:
    
    Соединение = СоздатьОбъект("ADODB.Connection");
    ConnectionString = "driver={SQL Server}; server=myserver; uid=mylogin; 
    pwd= myPasword; Database = myDatabase”;
    Соединение.ConnectionTimeOut =600;
    Соединение.CursorLocation = 3;
    Попытка
    Соединение.Open(ConnectionString);  
    Исключение
    Предупреждение("Ошибка подключения!");
    КонецПопытки;
    
    
    2)набор данных возвращается функцией Execute объекта ADODB.Command
    Код:
    Rs = CreateObject(“ADODB.RecordSet”); 
    Rs = Cmd.Execute; //Выполнение и получение набора данных
    
    
  3. TopicStarter Overlay
    wertklop
    Offline

    wertklop Опытный в 1С

    Регистрация:
    12 май 2008
    Сообщения:
    321
    Симпатии:
    0
    Баллы:
    26
    Бухгалтерский угодник, вот в переменной СтрокаСоединенияБазыТоваров и указывается параметры подключения. в 8ке с такой строкой подключения всё работает и данные читаются.
    если делать так:
    Код:
    Соединение = СоздатьОбъект("ADODB.Connection"); 
    Соединение.Mode=1;
    СтрокаСоединенияБазыТоваров="Provider=MSDASQL.1;Persist Security Info=False;Data Source=PostgreSQL3W";
    Попытка 
    Соединение.ConnectionString=СтрокаСоединенияБазыТоваров;
    Соединение.Open();
    Сообщить("Подключение успешно!");
    Исключение
    Сообщить(ОписаниеОшибки());
    Сообщить("Подключение не выполнено!");
    КонецПопытки;
    Cmd = СоздатьОбъект("ADODB.Command");
    Cmd.ActiveConnection = Соединение;
    Rs = СоздатьОбъект("ADODB.RecordSet");
    ТекстЗапроса="select count(*) from ware1 where internal_id="+Запрос.Номенклатура.Код+"";
    Cmd.CommandText=ТекстЗапроса; 
    Попытка
    Rs=Cmd.Execute;//или Rs=Cmd.Execute();
    сообщить(Rs.Fields("count").Value);
    Исключение
    Сообщить(ОписаниеОшибки());        
    КонецПопытки;
    
    
    то выводит:
    "Тип данных не поддерживается"
  4. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Что возвращает Rs в отладчике?
  5. TopicStarter Overlay
    wertklop
    Offline

    wertklop Опытный в 1С

    Регистрация:
    12 май 2008
    Сообщения:
    321
    Симпатии:
    0
    Баллы:
    26
    в отладчике пишет Rs=
    , т.е. ничего нету (((
  6. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Код:
    ТипЗначения(Rs)
    
    
  7. TopicStarter Overlay
    wertklop
    Offline

    wertklop Опытный в 1С

    Регистрация:
    12 май 2008
    Сообщения:
    321
    Симпатии:
    0
    Баллы:
    26
    100
    и что это значит?
  8. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    100 - внешний объект. Значит все правильно

    Попробуй Rs.MoveFirst(); проглотит?
  9. TopicStarter Overlay
    wertklop
    Offline

    wertklop Опытный в 1С

    Регистрация:
    12 май 2008
    Сообщения:
    321
    Симпатии:
    0
    Баллы:
    26
    нет, к сожалению, всё также выводит:
    "Тип данных не поддерживается"
  10. Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    Я делаю получение данных через Record:
    Код:
    	Попытка
    DataBaseConnection = CreateObject("ADODB.Connection");
    ЛогВыполнения.ДобавитьСтроку("Загружена ADODB.Connection");
    ЛогВыполнения.Записать(ИмяЛогаВыполнения);
    Исключение
    ЛогВыполнения.ДобавитьСтроку("Не удается загрузить ADODB.Connection - " + ОписаниеОшибки());
    ЛогВыполнения.Записать(ИмяЛогаВыполнения);
    Возврат;
    КонецПопытки;
    
    Попытка
    DataBaseConnection.ConnectionString = "DSN=RUPRD01;Password=one_s;User ID=one_s;Data Source=RUPRD01;Persist Security Info=True";
    DataBaseConnection.Open();
    ЛогВыполнения.ДобавитьСтроку("Соединение с базой данных RUPRD01 создано");
    ЛогВыполнения.Записать(ИмяЛогаВыполнения);
    Исключение
    ЛогВыполнения.ДобавитьСтроку("Не удалось подключиться к базе данных RUPRD01 - " + ОписаниеОшибки());
    ЛогВыполнения.Записать(ИмяЛогаВыполнения);
    Возврат;
    КонецПопытки;   
    
    RecordSet = СоздатьОбъект("ADODB.Recordset");
    RecordSet.ActiveConnection = DataBaseConnection;
    RecordSet.CursorLocation = 3; // UseClient
    
    ЛогВыполнения.ДобавитьСтроку("Начало загрузки информации по выкупленному оборудованию " + ТекущееВремя());
    ЛогВыполнения.Записать(ИмяЛогаВыполнения);
    Запрос = "select * from unco.ru_1c_eq_sell_move where tran_date > to_date('" + Формат(ТекущаяДата() - 7, "ДДДММГГГГ") + "','dd.mm.yyyy')";
    Попытка
    RecordSet.Open(Запрос);
    Если RecordSet.RecordCount > 0 Тогда
    ЛогВыполнения.ДобавитьСтроку("	Выполнен запрос " + Запрос);
    Счетчик = 0;
    Пока RecordSet.EOF = 0 Цикл
    Счетчик = Счетчик + 1;
    Состояние ("Получение информации по продаже оборудования " + Окр(Счетчик/RecordSet.RecordCount*100, 0, 1) + "%");
    КодКлиента = "" + RecordSet.Fields.Item("CO_NBR").Value + RecordSet.Fields.Item("DIV_NBR").Value + "." + RecordSet.Fields.Item("ACCT_NBR").Value;
    ШК = "" + RecordSet.Fields.Item("SERIAL_NBR").Value;
    
    
  11. TopicStarter Overlay
    wertklop
    Offline

    wertklop Опытный в 1С

    Регистрация:
    12 май 2008
    Сообщения:
    321
    Симпатии:
    0
    Баллы:
    26
    в общем работает так:
    Код:
    Соединение = СоздатьОбъект("ADODB.Connection"); 
    Соединение.Mode=1;
    СтрокаСоединенияБазыТоваров="Provider=MSDASQL.1;Persist Security Info=False;Data         Source=PostgreSQL35W";
    Попытка 
    Соединение.ConnectionString=СтрокаСоединенияБазыТоваров;
    Соединение.Open();
    Сообщить("Подключение успешно!");
    Исключение
    Сообщить(ОписаниеОшибки());
    Сообщить("Подключение не выполнено!");
    КонецПопытки;
    Rs = СоздатьОбъект("ADODB.RecordSet");
    ТекстЗапроса="select cast(count(*) as int) from transaction
    | where tr_type=11
    | and tr_date_time  between 
    | CAST('"+ДатаНачала+"' AS date) 
    | AND CAST('"+(ДатаКонца+60*60*24)+"' AS date)";
    Rs.ActiveConnection = Соединение; 
    RS.CursorLocation = 3; // UseClient
    Попытка
    Rs.Open(ТекстЗапроса);
    КоличествоЗаписей=Rs.Fields("count").Value;//Выполнение и получение набора данных
    Rs.Close();
    ТекстЗапроса = "select 
    | n_transaction,
    | tr_type,
    | tr_date_time,
    | n_check,
    | cast(code as int) as code,
    | cast(value_1 as int) as price,
    | cast(value_2 as int) as amount
    | from transaction 
    | where tr_type=11 
    | and tr_date_time  between CAST('"+ДатаНачала+"' AS date) AND CAST('"+ДатаКонца+"' AS date)";
    Попытка
    Rs.Open(ТекстЗапроса); //Выполнение и получение набора данных
    Пока RS.EOF = 0 Цикл
    Номенклатура=создатьобъект("Справочник.номенклатура");
    Номенклатура.найтипокоду(Rs.Fields("code").Value);
    Док.НоваяСтрока();
    Док.Номенклатура=Номенклатура.ТекущийЭлемент();
    Док.Количество=Число(Rs.Fields("amount").Value);
    Док.Цена=Число(Rs.Fields("price").Value); 
    Док.Сумма=Док.Количество*Док.Цена;
    Rs.MoveNext();
    КонецЦикла;               
    Rs.Close();
    Док.Записать();
    Исключение
    Сообщить(ОписаниеОшибки());        
    КонецПопытки;
    Исключение
    Сообщить(ОписаниеОшибки());        
    КонецПопытки;    
    
    
    

Поделиться этой страницей