|   |   | 
| 
 | 1С и MySQL - не выполняет запросы | ☑ | ||
|---|---|---|---|---|
| 0
    
        KatyariK 20.10.11✎ 11:55 | 
        такая проблема. Из 1с нужно периодически коннектится к MySql базе (база пропусков - чтобы анализировать внесенные табеля)
  так вот - через драйвер ODBC подключаюсь к серверу - к серверу подключается все ОК (State = 1) db = Новый COMObject("ADODB.Connection") ; db.ConnectionString =("DRIVER=MySQL ODBC 3.51 Driver; SERVER=192.1.2.1;DataBase=kkkk; UID=root;PWD="); Попытка db.Open(); Сообщить("MySQL база подключена!!!"); Исключение Сообщить("Не могу подключиться к базе!!!"); КонецПопытки; ------------------------------------------------------------ Дальше пытаюсь выполнить запросы - подвисает и все - и ничего не могу сделать (примеры запросов самые простые например получить версию сервера select version()) Делал через ADODB.Connection метод Execute() и через ADODB.Recordset ..... короч виснет - вот примеры как я пробовал (их конечно гораздо больше но ...) Может у кого то такое было??? Подскажите - а то уже пару дней сижу и не знаю что делать :( //1. //Метод ADODB.Recordset //Recordset = Новый COMОбъект("ADODB.Recordset"); //Recordset.ActiveConnection = db; //Source = "(select CodeDepartment, NameDepartment from department)"; // //Command=Recordset.ActiveCommand; //Recordset_Всего=Command.open("SELECT COUNT(*) FROM "+Source); //Если НЕ Recordset_Всего.EOF Тогда // ВсегоЗаписейВТаблице=Recordset_Всего.Fields(0).Value; //КонецЕсли; //2. // //Стр = "select version()"; //Попытка // db.Execute(Стр); // Сообщить("Good"); //Исключение // Сообщить("Bad " + ОписаниеОшибки()); //КонецПопытки; //3. //Сет = Новый COMObject("ADODB.Recordset"); //ТекстЗапроса = "select CodeDepartment, NameDepartment from department;"; //Сет.Open (ТекстЗапроса, db, 1); //Пока Сет.EOF() = 0 Цикл // Сообщить (" id="+Сет.Fields.Item("CodeDepartment").value+" name="+Сет.Fields.Item("NameDepartment").value); // Сет.MoveNext(); //КонецЦикла; //db.Close() //4. // Попытка //Команда = Новый COMОбъект("ADODB.Command"); //Команда.ActiveConnection = db; //Команда.CommandText = "select version()"; //Команда.CommandType = 1; //НаборЗаписей = Новый COMОбъект("ADODB.RecordSet"); //Попытка // НаборЗаписей.Open(Команда); // Сообщить("Good"); //Исключение // Сообщить("Bad " + ОписаниеОшибки()); //КонецПопытки; //5 еще одна неудачная попытка //Устанавливаем кодировку для нашего подключения (дополнительно)... //Command= new COMObject("ADODB.Command"); //Command.CommandText = "set names cp1251"; //Command.ActiveConnection = db; //Command.CommandType = 1; //Попытка // Command.Execute(); // Сообщить("Good"); //Исключение // Сообщить("Bad " + ОписаниеОшибки()); //КонецПопытки; // ////Теперь выполняем скрипт //Command= new COMObject("ADODB.Command"); //Command.CommandText = "select version()"; //Command.ActiveConnection = db; //Command.CommandType = 1; //Попытка // Command.Execute(); // Сообщить("Good"); //Исключение // Сообщить("Bad " + ОписаниеОшибки()); //КонецПопытки; ////Закрываем соединение. //db.Close(); I need help!!!!!! | |||
| 1
    
        Азат 20.10.11✎ 11:56 | 
        я какую-то дллку для связи с мускл использовал, там вроде все норм было, без косяков     | |||
| 2
    
        Матрейя 20.10.11✎ 12:04 | 
        conn = СоздатьОбъект("ADODB.Connection"); 
  ConnectionString = "DRIVER={MySQL ODBC 3.51 Driver};SERVER="+СокрЛП(константа.mysqlserver)+";DATABASE="+СокрЛП(константа.mysqldatabase)+";UID="+СокрЛП(константа.mysqluser)+";PWD="+СокрЛП(константа.mysqlpwd)+";OPTION="+3+";STMT=SET CHARACTER SET cp1251"; conn.open(ConnectionString); rs=conn.execute("......."); Проверь файрвол, мож блокирует. | |||
| 3
    
        KatyariK 20.10.11✎ 12:08 | 
        dll - ка есть, но как ее подцепить?????
  Файрвола там как бы нету - сам проверял, да и программки для работы с етой MySql базой на С++ работат ... т.е. не блокирует :( | |||
| 4
    
        Матрейя 20.10.11✎ 12:09 | 
        3. драйвер я так понимаю установлен?     | |||
| 5
    
        KatyariK 20.10.11✎ 12:10 | 
        да установлен     | |||
| 6
    
        KatyariK 20.10.11✎ 12:10 | 
        DRIVER={MySQL ODBC 3.51 Driver} -  без него не подключалося к базе     | |||
| 7
    
        Grusswelle 20.10.11✎ 12:13 | ||||
| 8
    
        KatyariK 20.10.11✎ 12:15 | 
        ну так он установлен     | |||
| 9
    
        Kondarat 20.10.11✎ 12:17 | 
        (8) У меня с этим Driver={MySQL ODBC 5.1 Driver} все работает на ура.     | |||
| 10
    
        KatyariK 20.10.11✎ 12:19 | 
        ну просто для пропускной системы программа написала под MySql 3.23 - поетому я ставил MySQL ODBC 3.51 Driver (да и в принципе этот коннектор проверен временем).     | |||
| 11
    
        shuhard 20.10.11✎ 12:20 | 
        (10) сделай файлик udl и им проверь + получи строку соединения     | |||
| 12
    
        KatyariK 20.10.11✎ 12:22 | 
        udl .... а есть пример - чтобы не искать -  потому что ни разу не делал     | |||
| 13
    
        shuhard 20.10.11✎ 12:25 | 
        (12) пример
  ну делаешь текстовый файл переименовываешь открываешь далее всё очевидно | |||
| 14
    
        KatyariK 20.10.11✎ 12:30 | 
        создал -  но в поставщике не виже MySQL ODBC Driver - хотя через панель управления при добавлении источников данных ODBC -  он есть, или чтото не так делаю?     | |||
| 15
    
        KatyariK 20.10.11✎ 12:31 | 
        наше в источнике выбрать ....  а что дальше смотретЬ:?     | |||
| 16
    
        KatyariK 20.10.11✎ 12:34 | 
        вопрос -  какой начальный каталог выбраТЬ??? -  у меня ругается -  не выполнен вход в систему .... мне пользователя указать какого -  админа MySql?     | |||
| 17
    
        shuhard 20.10.11✎ 12:35 | 
        (16) каталог kkkk
  пользователь и пароль root и бланк | |||
| 18
    
        KatyariK 20.10.11✎ 12:37 | 
        проверка подключения выполнена ... каталог забил по умолчанию, пользоватлея  root прописал ....
  Что дальше я могу тут увидеть? | |||
| 19
    
        shuhard 20.10.11✎ 12:38 | 
        (18) строку подключения,
  которую надо вставить в код | |||
| 20
    
        KatyariK 20.10.11✎ 12:44 | 
        вставил - все тож самое - на том же месте виснет :(
  Подключение проходит - а выполнение запроса виснет (( | |||
| 21
    
        shuhard 20.10.11✎ 12:45 | 
        (20) показывай код,
  коннект ADODB явно рабочий | |||
| 22
    
        KatyariK 20.10.11✎ 12:55 | 
        conn = Новый COMОбъект("ADODB.Connection");
  ConnectionString ="DATABASE=kristal;DESCRIPTION=MySQL ODBC 3.51 Driver;DSN=MySQL ODBC 3.51 Driver;OPTION=0;PORT=0;SERVER=192.1.2.132;UID=root;"; Если conn.state=0 Тогда conn.open(ConnectionString); КонецЕсли; СтрЗапроса = "Select vertion()"; Если Найти(СтрЗапроса,"select")>0 Тогда Table=conn.execute(СтрЗапроса); Пока Table.EOF() = 0 do Value1= Table.Fields(0).Value; // текстовое поле Сообщить(Value1); Table.MoveNext(); КонецЦикла; Table.Close(); Иначе conn.execute(СтрЗапроса); КонецЕсли; Если conn.state=1 Тогда conn.Close(); КонецЕсли; | |||
| 23
    
        KatyariK 20.10.11✎ 12:55 | 
        при выполнении execute() - виснет     | |||
| 24
    
        shuhard 20.10.11✎ 12:56 | 
        (22) Select vertion может version ?     | |||
| 25
    
        KatyariK 20.10.11✎ 13:07 | 
        по синтаксису правильно version() -  даже через EMS MySQL Manager.
  да я любой другой запрос вставляю - все равно подвисает - я уже много запросов перепробовал | |||
| 26
    
        Матрейя 20.10.11✎ 13:08 | 
        25. Я же пример дал. Кодировку укажи...     | |||
| 27
    
        KatyariK 20.10.11✎ 13:11 | 
        (Open): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [MySQL][ODBC 3.51 Driver]Unknown character set: 'cp1251'
  conn.open(ConnectionString); по причине: Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [MySQL][ODBC 3.51 Driver]Unknown character set: 'cp1251' ...... вот выдало ошибку при подключении, что это может бытЬ? | |||
| 28
    
        KatyariK 20.10.11✎ 13:12 | 
        я вчера пробовал кодировку сразу добавлять - тож ругалася так и не коннектилось. А без кодировки коннект прошел. По умолчанию стоит кодировка в базе latin1 - только что глянул.     | |||
| 29
    
        Матрейя 20.10.11✎ 13:13 | 
        27. поставь кодировку базы. я ведь просто пример дал. Оставь как в примере все, только свои значения     | |||
| 30
    
        Матрейя 20.10.11✎ 13:14 | 
        не пиши  db.ConnectionString     | |||
| 31
    
        Матрейя 20.10.11✎ 13:15 | 
        пиши как я пример дал. только create object замени и все     | |||
| 32
    
        KatyariK 20.10.11✎ 13:24 | 
        На основании етого примера:
  conn = СоздатьОбъект("ADODB.Connection"); ConnectionString = "DRIVER={MySQL ODBC 3.51 Driver};SERVER="+СокрЛП(константа.mysqlserver)+";DATABASE="+СокрЛП(константа.mysqldatabase)+";UID="+СокрЛП(константа.mysqluser)+";PWD="+СокрЛП(константа.mysqlpwd)+";OPTION="+3+";STMT=SET CHARACTER SET cp1251"; conn.open(ConnectionString); rs=conn.execute("......."); conn = Новый COMОбъект("ADODB.Connection"); ConnectionString = "DRIVER={MySQL ODBC 3.51 Driver};SERVER=192.1.2.132;DATABASE=kristal;UID=root;PWD=;OPTION="+3+";STMT=SET CHARACTER SET latin1"; conn.open(ConnectionString); rs=conn.execute("Select vertion()"); Выдает при conn.open(ConnectionString) ошибку: {Форма.Форма(219)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [MySQL][ODBC 3.51 Driver]Unknown character set: 'latin1' conn.open(ConnectionString); по причине: Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [MySQL][ODBC 3.51 Driver]Unknown character set: 'latin1' | |||
| 33
    
        Матрейя 20.10.11✎ 13:26 | 
        значит поставь cp1251 или utf8     | |||
| 34
    
        KatyariK 20.10.11✎ 13:26 | 
        в строке поключения пробовал - такие же ошибки выдает. только  с cp1251 или utf8     | |||
| 35
    
        szhukov 20.10.11✎ 13:26 | 
        (22)Table=conn.execute(СтрЗапроса); - так по-моему и не взлетит.
  Можно попробовать так: RS = Новый COMОбъект(ADODB.Recordset); RS = conn.execute(СтрЗапроса); Но лучше: RS = Новый COMОбъект(ADODB.Recordset); RS.Open(СтрЗапроса, conn); | |||
| 36
    
        szhukov 20.10.11✎ 13:28 | 
        (34) Не меняй подключение, оно же у тебя проходит нормально. Не плоди ошибки.
  Поменяй код выполнения запроса. | |||
| 37
    
        KatyariK 20.10.11✎ 13:29 | 
        RS = Новый COMОбъект(ADODB.Recordset);
  RS = conn.execute(СтрЗапроса); Но лучше: RS = Новый COMОбъект(ADODB.Recordset); RS.Open(СтрЗапроса, conn); - попробовал - виснет на методе Open :( | |||
| 38
    
        KatyariK 20.10.11✎ 13:31 | 
        соединение ели не задаешь кодировку проходит, state = 1 выводит.
  А вот при выполнении запроса виснет ... :( | |||
| 39
    
        KatyariK 20.10.11✎ 13:33 | 
        RS = Новый COMОбъект(ADODB.Recordset);
  RS = conn.execute(СтрЗапроса); метод execute = - не онаружен ругается | |||
| 40
    
        szhukov 20.10.11✎ 13:34 | 
        (39) Что-то с conn, значит. Закрывается соединение может.     | |||
| 41
    
        KatyariK 20.10.11✎ 13:35 | 
        а как проверить?     | |||
| 42
    
        Матрейя 20.10.11✎ 13:36 | 
        а conn и не существует при коде 39     | |||
| 43
    
        KatyariK 20.10.11✎ 13:38 | 
        ну с кодом 39 понятно. А что еще можно проверить?     | |||
| 44
    
        szhukov 20.10.11✎ 13:40 | 
        (42) А код (39) здесь не причем :)
  Вы должны открыть соединение, а затем создать объект Recordset и через его метод выполнить запрос и получить набор записей. | |||
| 45
    
        szhukov 20.10.11✎ 13:40 | 
        +(44) Значит все-таки соединение у вас не открывается.     | |||
| 46
    
        szhukov 20.10.11✎ 13:43 | 
        (43) Примерно так:
  Conn1 = Новый COMОбъект("ADODB.Connection"); Conn1.ConnectionString = стрПодключения; попытка Conn1.Open(); исключение Сообщить ("Проблемы с подключением к серверу баз данных" ); Инфо = ИнформацияОбОшибке(); ПоказатьИнформациюОбОшибке(Инфо); Возврат; КонецПопытки; RS = Новый COMОбъект("ADODB.Recordset"); попытка RS.Open("select * from table какой-то LIMIT 10", Conn1 ); исключение Сообщить ("Ошибка"); Инфо = ИнформацияОбОшибке(); ПоказатьИнформациюОбОшибке(Инфо); Возврат; КонецПопытки; | |||
| 47
    
        KatyariK 20.10.11✎ 13:46 | 
        на первой попытке все проходит - т.е. Conn1.Open();проходит.
  RS.Open("select * from table какой-то LIMIT 10", Conn1 ) - виснет :( | |||
| 48
    
        shuhard 20.10.11✎ 13:49 | 
        (47) поржал
  то "Select vertion()" виснет, то select * from table какой-то LIMIT 10" не работает | |||
| 49
    
        Матрейя 20.10.11✎ 13:50 | 
        +48 присоединяюсь. Автор типичный одынэсник :-)     | |||
| 50
    
        KatyariK 20.10.11✎ 13:52 | 
        все поржали -  а помочь никто не может :(
  запрос для примера был дан :( | |||
| 51
    
        Матрейя 20.10.11✎ 13:53 | 
        RS = Новый COMОбъект("ADODB.Recordset");
  попытка RS.Open("select * from table какой-то LIMIT 10", Conn1 ); исключение rs сдесь не подключен к базе!!!!!!!!!! | |||
| 52
    
        shuhard 20.10.11✎ 13:54 | 
        (49) угу, 
  типичный неудачник | |||
| 53
    
        KatyariK 20.10.11✎ 13:56 | 
        млин ну так дайте толковый совет что делать?     | |||
| 54
    
        shuhard 20.10.11✎ 13:57 | 
        (53) разобраться,
  не тупо кодировать чужой код | |||
| 55
    
        Матрейя 20.10.11✎ 14:03 | 
        53.Давай по пордяку. Сделай системный dsn , назови его r55 например.
  Потом выполни из 1с такой код conn = Новый ComObject("ADODB.Connection"); ConnectionString="DSN=r55"; conn.open(ConnectionString); | |||
| 56
    
        Матрейя 20.10.11✎ 14:04 | 
        +55 Разумеется проверь в системном дсн подключение, там кнопка есть тест     | |||
| 57
    
        KatyariK 20.10.11✎ 14:06 | 
        Соединение успешно установлено. Дальше.     | |||
| 58
    
        KatyariK 20.10.11✎ 14:06 | 
        это я уже проделал давно     | |||
| 59
    
        Матрейя 20.10.11✎ 14:12 | 
        57.  rs=conn.execute("select * from ИмяТаблицы");
  пока rs.eof()=0 цикл Сообщить("УРА"); rs.movenext(); КонецЦикла; | |||
| 60
    
        Матрейя 20.10.11✎ 14:13 | 
        ИмяТаблицы замени на реальное     | |||
| 61
    
        KatyariK 20.10.11✎ 14:14 | 
        rs=conn.execute("select * from Table");  -  в етом месте виснет выполнение     | |||
| 62
    
        Матрейя 20.10.11✎ 14:18 | 
        Table - таблица дорлжна иметь имя. например "select * from users"     | |||
| 63
    
        szhukov 20.10.11✎ 14:18 | 
        (61) Ты хоть одну таблицу в базе знаешь?
  сделай выборку из нее... select * from Table - нигде не сработает. Table - это имя известной тебе таблицы (нужно заменить) Например: select * from users | |||
| 64
    
        KatyariK 20.10.11✎ 14:18 | 
        так и сделал     | |||
| 65
    
        szhukov 20.10.11✎ 14:18 | 
        (62) опередил :)     | |||
| 66
    
        KatyariK 20.10.11✎ 14:19 | 
        я знаю все таблицы в базе :)))
  т.к. все пока делаю вручную через EMS MySQL Manager | |||
| 67
    
        KatyariK 20.10.11✎ 14:19 | 
        делаю те операции что мне нужны -  через EMS MySQL Manager (а то сейчас и тут залошите)     | |||
| 68
    
        szhukov 20.10.11✎ 14:20 | 
        Ну, так чего ты фигню какую-то написал в (47)
  запрос свой покажи к какой-то таблице | |||
| 69
    
        Матрейя 20.10.11✎ 14:21 | 
        66. Пиши то, что конкретно у тебя написано.  dsn  - прям база прописана или только mysql сервер?     | |||
| 70
    
        shuhard 20.10.11✎ 14:22 | 
        (69) угу
  топик чистый развод начиная с Select vertion() | |||
| 71
    
        KatyariK 20.10.11✎ 14:26 | 
        1.dns -  прямо база прописана.
  2.запрос самый первый и самый простой - select * from events- проще некуда чтобы выбрало мне все поля. 3. Запрос Select vertion() - все равно должен выполняться - чем он хуже других я не знаю :)) он тупо выводит версию твоего MySQL/ Подвоха сдесь нет - просто нужно чтобы отработало. 4. Вам запросы написать: UPDATE employee set NumberCard = TabNumber WHERE ( (`employee`.`NumberCardIndex` <> 0) ) к примеру. Дело не в запросе просто. Нужно хотя бы чтобы этот отработал select * from events - (специально взял маленькую таблицу - там всего 10 строк записей). | |||
| 72
    
        shuhard 20.10.11✎ 14:57 | 
        (71) [Запрос Select vertion() -  все равно должен выполняться -  чем он хуже других я не знаю :)) он тупо выводит версию твоего MySQL]
  ни хера он не выводит, кроме ошибки синтаксиса | |||
| 73
    
        KatyariK 20.10.11✎ 15:01 | 
        ну у меня ошибки синтаксиса не выдает :)     | |||
| 74
    
        KatyariK 20.10.11✎ 17:49 | 
        короч все спасибо.
  Нашел я как через дллку сделать - точнее нашел пример - все отлично отработало: http://1c.proclub.ru/modules/mydownloads/personal.php?lid=3456&cid=83 Можно закрывать. | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |