Имя: Пароль:
1C
1С v8
Ошибка обхода результата запроса через ADODB.Command
,
0 glime
 
16.07.13
17:31
Всем привет, есть простенькая процедура исполняемая на сервере, весь листинг приводить не буду но основной:

   ADOСоединение = Новый COMОбъект("ADODB.Connection");
   
   
       ADOСоединение.Open("DRIVER=SQLite3 ODBC Driver;Database=" + СокрЛП(АдресПГ) + ";LongNames=0;Timeout=1000;NoTXN=0;SyncPragma=NORMAL;StepAPI=0;");
       
   
   Command = Новый COMОбъект("ADODB.Command");
   Command.ActiveConnection = ADOСоединение;
   
   Command.CommandText = "
   |SELECT
   | pg_list.ID AS КодПрайса,
   | pg_list.PVID,
   | datetime(pg_list.PRICEDTE + julianday(""1899-12-30"")) as Дата,
   | pg_list.DESCR as ИмяПостовщика
   |FROM
   | pg_list";

Результат = command.Execute();

Пока Результат.EOF() Цикл

И при выполнение обхода, ругается:
 
"Произошла исключительная ситуация (ADODB.Recordset): Операция не допускается, если объект закрыт."
Не могу понять почему.
1 cincout
 
16.07.13
17:45
Может pg_list пустая? Хотя может это и не должно вызывать исключение.
2 shuhard
 
16.07.13
17:45
(0) а нефиг вместо рекордсета использовать команду
3 glime
 
16.07.13
17:52
(2) один хрен

ТекстЗапросаКПГ = "
   |SELECT
   | pg_list.ID AS КодПрайса,
   | pg_list.PVID,
   | datetime(pg_list.PRICEDTE + julianday(""1899-12-30"")) as Дата,
   | pg_list.DESCR as ИмяПостовщика
   |FROM
   | pg_list";
   
   
   ЗаписиSQL = Новый ComObject("ADODB.RecordSet");
   ЗаписиSQL.CursorType = 3;
   ЗаписиSQL.ActiveConnection = ADOСоединение;
   ЗаписиSQL.Open (ТекстЗапросаКПГ,ADOСоединение);
   //ЭлементыФормы.ИндикаторЗаполнения.МаксимальноеЗначение=ЗаписиSQL.RecordCount;
   Пока ЗаписиSQL.EOF=0 Цикл
       
       Сообщить("Бя");
   КонецЦикла;
   
то же самое
4 Ёпрст
 
16.07.13
18:01
а так ?

   ADOСоединение = Новый COMОбъект("ADODB.Connection");
   ADOСоединение.Open("DRIVER=SQLite3 ODBC Driver;Database=" + СокрЛП(АдресПГ) + ";LongNames=0;Timeout=1000;NoTXN=0;SyncPragma=NORMAL;StepAPI=0;");
   Command = Новый COMОбъект("ADODB.Command");
   
   Command.ActiveConnection = ADOСоединение ;
   
   ТекстЗапроса = "
      ....
       |";

   Command.CommandText = ТекстЗапроса;    
   RecordSet = Новый COMОбъект("ADODB.RecordSet");    
   RecordSet = Command.Execute();
   
   Если not RecordSet.EOF() Тогда
....
5 glime
 
16.07.13
18:10
(4) не помогло

ADOСоединение = Новый COMОбъект("ADODB.Connection");
   
   Попытка
       ADOСоединение.Open("DRIVER=SQLite3 ODBC Driver;Database=" + СокрЛП(АдресПГ) + ";LongNames=0;Timeout=1000;NoTXN=0;SyncPragma=NORMAL;StepAPI=0;");
       
   Исключение
       Сообщение = Новый СообщениеПользователю;
       Сообщение.Текст = "Не могу открыть ПГ";        
       Сообщение.Сообщить();
       Возврат;
   КонецПопытки;
   
   
   Command = Новый COMОбъект("ADODB.Command");
   
   Command.ActiveConnection = ADOСоединение ;
   
   ТекстЗапросаКПГ = "
   |SELECT *    
   |FROM
   | pg_list";
   
   Command.CommandText = ТекстЗапросаКПГ;    
   RecordSet = Новый COMОбъект("ADODB.RecordSet");    
   RecordSet = Command.Execute();
   RecordSet.Open();
   
   Если not RecordSet.EOF() Тогда
       Вр = 1;
   КонецЕсли;
6 МихаилМ
 
16.07.13
18:20
какой-то тип данных несовместим
7 Infsams654
 
16.07.13
18:27
(5) а в excel откроется в Данные?
8 shuhard
 
16.07.13
18:48
(3) а теперь убери сей перл [  | datetime(pg_list.PRICEDTE + julianday(""1899-12-30"")) as Дата,] и пресеки русские алиасы
9 glime
 
16.07.13
19:49
(8) это не перл, это проза жизни Дата представлена в непонятном формате, но данный перл дает ее переварить в нормальный. Я даже больше скажу, взлетает но иногда падает вот такой код:

ADOСоединение = Новый COMОбъект("ADODB.Connection");
   
   Попытка
       ADOСоединение.Open("DRIVER=SQLite3 ODBC Driver;Database=C:\1C\PG\PR\PriceGrabber\db.dat;LongNames=0;Timeout=1000;NoTXN=0;SyncPragma=NORMAL;StepAPI=0;");
       
   Исключение
       Сообщить("фывафыаы");
   КонецПопытки;
   
   
   ДатаНачалаЗапроса = НачалоДня(ТекущаяДата());
   
   command = Новый COMОбъект("ADODB.Command");
   command.ActiveConnection = ADOСоединение;
   
   command.CommandText ="SELECT
   | pg_list.ID AS КодПрайса,
   | pg_list.PVID AS PVID,
   | datetime(pg_list.PRICEDTE + julianday(""1899-12-30"")) as Дата,
   | pg_list.DESCR as ИмяПостовщика
   |FROM
   | pg_list
   |WHERE
   | datetime(pg_list.PRICEDTE + julianday(""1899-12-30"")) >= datetime(julianday(""" + Формат(ДатаНачалаЗапроса,"ДФ='yyyy-MM-dd HH:mm:ss'") + """))";
   
   
   Попытка
       результат = command.Execute();
   Исключение
       
       Сообщить("фывафыаы");
       
   КонецПопытки;
   
   
   Вр = 1;
   // Перебор данных
   Если НЕ результат.EOF() Тогда
       результат.MoveFirst();                
       Пока результат.EOF() = 0 Цикл
           
           Сообщить(Вр);
           результат.MoveNext();
           Вр = Вр + 1;
       КонецЦикла;
   КонецЕсли;


В чем дело я так и не понял.
10 shuhard
 
16.07.13
20:01
(9) это херня и в (6) тебе русским языком объяснили методику отладки сквозь ADODB
11 glime
 
17.07.13
09:03
(10) херня, но работает.
Одна проблема, перебор идет по колонкам и строкам, что значительно увеличивает время работы обработки.
12 ДенисЧ
 
17.07.13
09:09
русские алиасы по адо в 1с передаются без проблем.
13 МихаилМ
 
17.07.13
09:10
(11)
проблема длительного перебора выборки решают gemewithfire    
или  
getrows
14 sda553
 
17.07.13
09:18
Попробуй вот такую замену
   ТекстЗапросаКПГ = "
   |SET NOCOUNT ON;
   |SELECT *    
   |FROM
   | pg_list";
15 shuhard
 
17.07.13
09:19
(14) [SET NOCOUNT ON]
выплюнет SQLite такое предекатив
16 sda553
 
17.07.13
09:19
Тогда перебирать по колонкам, какая не проходит
17 sda553
 
17.07.13
09:21
(15) Невнимательность, я не обратил внимание что там лайт
18 glime
 
17.07.13
10:10
ВСЕ всем спасибо, "дело было не в бабине".
Все навсего в запросе не может быть первая строка пустая!!!!
При работе с SQLite запомните это!!!!
т.е.

ТекстЗапросаКПГ = "
   |SELECT *    
   |FROM
   | pg_list"; //- НЕ РАБОТАЕТ

ТекстЗапросаКПГ = "SELECT *    
   |FROM
   | pg_list"; // + РАБОТАЕТ

Теперь осталось победить кракозябры, вылазиющие вместо русских букв в результате запроса, но это другая ветка.
19 glime
 
17.07.13
11:03
(16) когда какая то не подходит то
"Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): Драйвер ODBC не поддерживает требуемые свойства."