|
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 Можно закрывать. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |