Имя: Пароль:
1C
 
Прямой SQL запрос
,
0 ejikbeznojek
 
01.07.15
13:47
Всем привет. Пытаюсь сейчас разобраться в прямых запросах.
И для начала пытаюсь тупо выбрать запросом все подразделения.
[code]
Запрос = "
|SELECT
|    Спр.Code as Код,
|    Спр.Descr as Наименование
|FROM
|    Reference15 as Спр";


СтрокаСоединения = ("Provider=SQLOLEDB;Driver={SQL Server}; Deleted=No; Data Source = ") + SQLServer +
    (";UID=") + Login + ("; PWD=") + Password +"; Database = "+base+ (";");
              
Подключение = Новый ComObject("ADODB.Connection");
Подключение.ConnectionString=СтрокаСоединения;
Подключение.Open(СтрокаСоединения);

СоединениеSQL = Новый COMObject("ADODB.Command");
СоединениеSQL.ActiveConnection = Подключение;
СоединениеSQL.NamedParameters = True;
СоединениеSQL.CommandText = Запрос;
СоединениеSQL.CommandType = 1;


ЗаписиSQL = Новый ComObject("ADODB.RecordSet");
ЗаписиSQL = СоединениеSQL.Execute();

[/code]

Ругается на название таблицы. Я пытался указывать как
Reference15 так и _Reference15, и $Справочник.Номенклатура.
В первых двух случаях ругался в ЗаписиSQL = СоединениеSQL.Execute(); на Недопустимое имя объекта "Reference15" и "_Reference15"
Третье это я так понял 1С++, а у меня ADODB
1 Ненавижу 1С
 
гуру
01.07.15
13:49
а таблица _Reference15 точно есть?
2 ejikbeznojek
 
01.07.15
13:51
Ну я увидел вот такие вот таблицы
Reference15    Справочник.Подразделения    Справочник.Подразделения
Reference15.VT5088    Справочник.Подразделения.АвтоПроверяемыеАкции    Справочник.Подразделения.ТабличнаяЧасть.АвтоПроверяемыеАкции
Reference15.VT3481    Справочник.Подразделения.ВремяОбмена    Справочник.Подразделения.ТабличнаяЧасть.ВремяОбмена
Reference15.VT3697    Справочник.Подразделения.КарточкаОбъекта    Справочник.Подразделения.ТабличнаяЧасть.КарточкаОбъекта
Reference15.VT3677    Справочник.Подразделения.Счетчики    Справочник.Подразделения.ТабличнаяЧасть.Счетчики
3 Mikeware
 
01.07.15
13:51
(2) эт ты где увидел?
4 ejikbeznojek
 
01.07.15
13:53
(3) Штатная какая то обработина, называлась "структура ИБ"
Правда только щас понял, что она и для файловых баз тоже, а значит названия таблиц на скуле могут быть другими
5 Широкий
 
01.07.15
13:55
_Reference15
6 ejikbeznojek
 
01.07.15
13:57
(5) Я пробовал, говорит Недопустимое имя объекта "_Reference15"
7 фобка
 
01.07.15
13:57
Ну надо чтото типа use сделать в запросе к базе или прописать ее в строке подключения
8 фобка
 
01.07.15
14:00
Проверь в самом сиквеле менеджменте
9 ejikbeznojek
 
01.07.15
14:01
(1) Среда SQL Server Management Studio посмотрел, тут тоже эта таблица есть
10 фобка
 
01.07.15
14:02
(9) запрос отрабатывает в ней?
11 ejikbeznojek
 
01.07.15
14:08
Нашёл косяк, имена полей были без подчёркиваний
поменял запрос на тот, который на скуле работает
|SELECT
|    Спр._Code as Код,
|    Спр._Description as Наименование
|FROM
|   _Reference15 as Спр";
Но с 1ски ругается всё равно.
12 ejikbeznojek
 
01.07.15
14:12
Такое ощущение что он как то базу не открывает, там на скуле несколько баз крутится.
Но при этом тут Подключение.Open(СтрокаСоединения);
не ругается, но в отладке Подключение.errors.count=1
13 Ненавижу 1С
 
гуру
01.07.15
14:13
ты имя базы правильно прописал?
14 ejikbeznojek
 
01.07.15
14:20
Ну я прописал
SQLServer="SrvdbCopy1";
Login="sa";
Password="******";
base="kuhar";

http://prntscr.com/7nhmz7
15 ejikbeznojek
 
01.07.15
14:35
В момент когда происходит
Подключение.Open(СтрокаСоединения);
В отладке меняется
Подключение.ConnectionString
с
"Provider=SQLOLEDB;Driver={SQL Server}; Deleted=No; Data Source = SrvdbCopy1;UID=sa; PWD=*****; Database = kuhar ;"
на
"Provider=SQLOLEDB.1;Data Source=SrvdbCopy1;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=IT-KUHAR;Use Encryption for Data=False;Tag with column collation when possible=False;"
16 Ёпрст
 
01.07.15
14:40
На вот, мучайся

    
    СоединениеБазы = Новый COMОбъект("ADODB.Connection");
    Драйвер="SQL Server";
    Сервер="SrvdbCopy1";
    Логин="sa";
    Пароля="пиши суда пароля";
    База="kuhar";
    СтрокаПодключения = "driver={"+Драйвер+"}; Server="+Сервер+"; uid="+Логин+"; Pwd="+Пароля+"; Database ="+База+";";
    СоединениеБазы.Open(СтрокаПодключения);
    Комманда = Новый COMОбъект("ADODB.Command");
    Комманда.ActiveConnection = СоединениеБазы;
    
    ТекстЗапроса = "
    |select
    |  t._Description as Вася
    |from dbo._Reference15 as t
    |";
    
    
    Комманда.CommandText = ТекстЗапроса;    
    Выборка = Комманда.Execute();     
    Пока Выборка.EOF() = 0 Цикл
        Сообщить(Выборка.Fields.Item("Вася").Value);
        Выборка.MoveNext();  
    КонецЦикла;
    Выборка.Close();
17 ejikbeznojek
 
01.07.15
14:45
(16) Спасибо, а драйвер какой использовать если я с семёрки запускаю и ничего дополнительно не устанавливал?
18 ejikbeznojek
 
01.07.15
14:46
А вижу
19 ejikbeznojek
 
01.07.15
14:53
(16) Что-то всё-таки со строкой соединения не так.
при открытии в СоединениеБазы.errors 3 элемента.
На 2 и 3 наверное нужно забить, а вот что с 1м делать не ясно.

"[Microsoft][ODBC SQL Server Driver]Недопустимый атрибут строки соединения"    0
"[Microsoft][ODBC SQL Server Driver][SQL Server]Контекст базы данных изменен на "master"."    5701
"[Microsoft][ODBC SQL Server Driver][SQL Server]Параметры языка изменены на "русский"."    5703
20 ejikbeznojek
 
01.07.15
14:59
А вот если убираю из строки соединения базу остаётся
СтрокаПодключения = "driver={"+Драйвер+"}; Server="+Сервер+"; uid="+Логин+"; Pwd="+Пароля+";"
И из ошибок пропадает Недопустимый атрибут строки соединения.

Но как-то же базу указать надо...
21 ejikbeznojek
 
01.07.15
15:09
Заработало!!!!
СтрокаПодключения ="driver={SQL Server};server="+Сервер+";uid="+Логин+";pwd="+Пароля+";database="+База+"";
22 ЧеловекДуши
 
01.07.15
15:20
(0) Нет у 1С 7.7 такой таблицы "Reference15" и небыло
23 ejikbeznojek
 
01.07.15
15:51
(22) Так говоря " если я с семёрки запускаю" я имел ввиду winows 7, а не 1С)))