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