Имя: Пароль:
1C
 
v8: ADODB + MySQL, проблема с обращением к результату
0 ado
 
18.10.09
04:02
Имеем вот такой код:


   АДО_Соединение = Новый COMОбъект("ADODB.Connection");
   СтрокаСоединения = "Driver={MySQL ODBC 5.1 Driver};Server=" + Константы.АдресСервераМагазина.Получить() + ";Port="+ Константы.ПортСервераМагазина.Получить() +";Database="+ Константы.БазаМагазина.Получить() +";User="+ Константы.ПользовательМагазина.Получить() +";Password="+ Константы.ПарольМагазина.Получить() +";Option=3;";
   //СтрокаСоединения = "DSN=shop;";
   АДО_Соединение.ConnectionTimeOut=100;
   АДО_Соединение.Open(СтрокаСоединения);
   АДО_Команда = Новый COMОбъект("ADODB.Command");
   АДО_Команда.ActiveConnection=АДО_Соединение;
   АДО_Команда.CommandTimeOut=100;
   ТекстЗапроса = "
   |SELECT product_id, product_name_ru
   |FROM shop_product
   |;";
   АДО_Команда.CommandType=1;
   АДО_Команда.Commandtext=ТекстЗапроса;    
   АДО_Записи = Новый COMОбъект("ADODB.RecordSet");
   АДО_Записи=АДО_Команда.Execute();
   ТаблицаТоваров.Очистить();
   Пока АДО_Записи.EOF = 0 Цикл
       ТаблицаТоваров.Добавить();
       ТаблицаТоваров.Ид = АДО_Записи.Fields("product_id").Value;
       ТаблицаТоваров.Наименование = АДО_Записи.Fields("product_name_ru").Value;
       АДО_Записи.MoveNext();
   КонецЦикла;



При исполнении ругается: "Ошибка при получении значения атрибута контекста (EOF): Неизвестная ошибка". Что я делаю не так?
1 Кирпич
 
18.10.09
08:14
а АДО_Команда.Execute(); срабатывает? проверял?
2 Кирпич
 
18.10.09
08:15
АДО_Записи = Новый COMОбъект("ADODB.RecordSet");
это наверное не нужно
3 ado
 
18.10.09
09:31
А вот через драйвер предыдущей версии всё работает. Странно ...
4 ado
 
18.10.09
11:11
Кто-нибудь еще с MySQL через adodb работал? С драйвером версии 5.1 в принципе ничего не получается или я что-то не так делаю? С драйвером 3.51 вроде всё нормально.
5 ado
 
19.10.09
10:27
апну
6 Joint
 
19.10.09
10:31
а ты не хочешь мув ферст перед циклом поставить?
7 ado
 
19.10.09
10:35
(6) Ага, хочу ;-) Но когда поставил, оно стало ругаться теми же словами на мувферст.
8 ado
 
19.10.09
10:36
Такое впечатление, что Execute() возвращает не RecordSet, а черте что ...
9 Joint
 
19.10.09
10:38
а рекорд каунт че говорит?
10 ado
 
19.10.09
10:39
При этом, при попытке в отладке посмотреть из чего сделано АДО_Записи в предприятии вываливается неизвестная ошибка а конфиуратор повисает намертво.
11 shuhard
 
19.10.09
10:40
(8) поройся в поиске, MySQL ODBC 5.1 не рабочий
кури 3.5.1
12 ado
 
19.10.09
10:43
(11) Совсем нерабочий? И при этом продолжает висеть у них на сайте как текущий стабильный релиз? Что-то тут не то ....

(9) Не пробовал. Но подозреваю, что был-бы посла туда же ...
13 shuhard
 
19.10.09
10:50
(12)[Что-то тут не то]
разберись, форум спасибо скажет
14 ado
 
19.10.09
11:00
(13) Ну вот ... что ни спросишь -- сам разбирайся. *обиженно_надулся*
15 Joint
 
19.10.09
11:07
а зачем ты вот это делаешь - АДО_Записи = Новый COMОбъект("ADODB.RecordSet");
? :)
16 ado
 
19.10.09
11:09
(15) Не придирайся. Просто содрал с какого-то примера. Знаю, что не надо, но и мешать не может ведь.
17 Joint
 
19.10.09
11:10
как это не может, убирай
дальше проверь кол-во записей в выборке
18 smaharbA
 
19.10.09
11:18
А так не пойдет ?

АДО_Соединение.ConnectionTimeOut=100;
АДО_Соединение.Open(СтрокаСоединения);
ТекстЗапроса = "
|SELECT product_id, product_name_ru
|FROM shop_product
|;";
АДО_Записи = Новый COMОбъект("ADODB.RecordSet");
АДО_Записи.Open(ТекстЗапроса,АДО_Соединение,3,1,1);
АДО_Записи.MoveFirst;
19 Joint
 
19.10.09
11:27
или так:

Rec = Data.TableDefs(тзСоответсвийДанных[0].КолонкаТаблицы).OpenRecordset();
20 1c_asp
 
19.10.09
11:42
(4) Да, с 5.1 у меня тоже проблемы были