Имя: Пароль:
1C
1С v8
Внешние источники данных - простой запрос
0 MaxisUssr
 
10.03.15
13:49
1. Добавил внешний источник данных = MySQL базу.
2. В базе создал некие таблицы.
3. Допустим, в базе в phpAdmin выполняю запрос SELECT 1 - возвращает 1. В 1С - добавляю в ветку внешнего источника ф-ю "DELETE" , код функции пишу просто - тот же самый SELECT 1. Но 1С при выполнении этого кода выдает ошибку:


{Форма.Форма1.Форма(39)}: Ошибка при вызове метода контекста (DELETE)
    ВнешниеИсточникиДанных.Test.DELETE();
по причине:
Ошибка внешней базы данных:
ошибка при выполнении запроса
по причине:
Ошибка ODBC. SQLSTATE: 42000
Номер ошибки: 1064
Описание: [MySQL][ODBC 5.3(a) Driver][mysqld-5.5.41-log]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT 1' at line 1
1 ДенисЧ
 
10.03.15
13:54
Через ВИДы вроде как нельзя менять внешние данные. ТОлько читать
2 MaxisUssr
 
10.03.15
13:54
SELECT `1` тоже пробовал
и SELECT "1"
и SELECT '1'
3 Ёпрст
 
10.03.15
13:55
(0) через ado удаляй
4 MaxisUssr
 
10.03.15
13:57
(3)
Да не в удалении дело. Ф-я просто так называется - хотел сделать удаление, но в итоге дошел до проверки запроса "Селект 1" - который не работает почему-то в 1С.

Данные менять можно. Вот код, который у меня работает (добавляет записи в таблицу MySQL):

ПараметрыСоединения = Новый ПараметрыСоединенияВнешнегоИсточникаДанных;
        ПараметрыСоединения.СтрокаСоединения = "
                                                |DRIVER={MySQL ODBC 5.1 Driver};
                                                |SERVER=127.0.0.1;
                                                |PORT=3307;
                                                |DATABASE=newBase;
                                                |UID=New;
                                                |PWD=123;";
        ПараметрыСоединения.ИмяПользователя = "New";
        ПараметрыСоединения.Пароль            = "123";
                                                
        ВнешниеИсточникиДанных.Test.УстановитьОбщиеПараметрыСоединения(ПараметрыСоединения);
        ВнешниеИсточникиДанных.Test.УстановитьСоединение();    
        
        nStr = ВнешниеИсточникиДанных.Test.Таблицы.Deals.СоздатьОбъект(); //.Добавить();
        
        ЗаполнитьЗначенияСвойств(nStr, нЗапись);
        nStr.DealID   = Число(Источник.Код);
        nStr.DealName = Источник.Наименование;
        nStr.IsAuction= Источник.ЭтоАукцион;
        
        ЕстьDeal = ВнешниеИсточникиДанных.Test.Таблицы.Deals.НайтиПоПолю("DealID", Число(Источник.Код));
        Если ЕстьDeal <> ВнешниеИсточникиДанных.Test.Таблицы.Deals.ПустаяСсылка() тогда
            СтарыйОбъект = ЕстьDeal.ПолучитьОбъект();
            ВнешниеИсточникиДанных.Test.DELETE(Число(Источник.Код));
            //СтарыйОбъект.Удалить();
        КонецЕсли;
        
        Попытка
            nStr.Записать();        
        Исключение
        КонецПопытки;
5 МихаилМ
 
10.03.15
14:00
попробуйте
select 1 as www
6 MaxisUssr
 
10.03.15
14:04
(5)
Не сработало.

Включил логи MySQL, в итоге запрос вот какой передается:

CALL SELECT 1
7 MaxisUssr
 
10.03.15
14:07
Все, разобрался - в итоге выходит, что в 1С во внешних источниках нельзя писать код SQL - только обращаться к заранее заготовленным хранимым процедурам на стороне MySQL.