|
Чтение данных из dbf из 8.3 1 с | ☑ | ||
---|---|---|---|---|
0
olegon7
30.03.16
✎
15:54
|
Имеются файлы dbf visual fox pro c memo полями
файлы большие больше миллиона записей хотелось бы организовать чтение dbf запросами причем с временными таблицами...чтобы выполнялись друг за другом...для последующей загрузки в регистр сведений какой порекомендуете драйвер(оптимальный) и почему запрос мой второй не выполняется? ********************************** Connection = Новый COMОбъект("ADODB.CONNECTION"); Connection.Open("DRIVER={Microsoft FoxPro VFP Driver (*.dbf)};SourceDB=d:\dbf\; SourceType=DBF; Exclusive=No;BackgroundFetch=Yes;Collate=Russian;Null=No;Deleted=Yes;"); Исключение Сообщить("Все плохо:"+ОписаниеОшибки()); Возврат; КонецПопытки; RecordSet = Новый COMОбъект("ADODB.Recordset"); попытка Запрос= " |select MAX(kartkvgd.yearmon) AS yearmon, |kartkvgd.lic_sch, |kartkvgd.data_new |from |kartkvgd |GROUP BY kartkvgd.lic_sch INTO Cursor temp1; |select temp1.data_new AS data_new, |temp1.lic_sch AS lic_sch_t1, |temp1.yearmon AS yearmon, |kartab.lic_sch AS lic_sch_kartab1 |from temp1 left join kartab |on temp1.lic_sch=kartab.lic_sch"; RecordSet.Open(Запрос, Connection ); исключение Сообщить ("Проблемы с выполнением запроса"); Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки; ТЗ = Новый ТаблицаЗначений; Тз.Колонки.Добавить("ЛицевойСчет_1", Новый ОписаниеТипов("Строка",Новый КвалификаторыСтроки(30))); Тз.Колонки.Добавить("ЛицевойСчет_2", Новый ОписаниеТипов("Строка",Новый КвалификаторыСтроки(30))); Тз.Колонки.Добавить("ПоказаниеПоследующее", Новый ОписаниеТипов("Строка",Новый КвалификаторыСтроки(20))); Тз.Колонки.Добавить("ОплаченныйМесяц", Новый ОписаниеТипов("Строка",Новый КвалификаторыСтроки(20))); Пока Не RecordSet.EOF() Цикл Строка=Тз.Добавить(); Строка.ЛицевойСчет_1= RecordSet.Fields("lic_sch_t1").Value; Строка.ЛицевойСчет_2= RecordSet.Fields("lic_sch_kartab1").Value; Строка.ПоказаниеПоследующее= RecordSet.Fields("data_new").Value; Строка.ОплаченныйМесяц= RecordSet.Fields("yearmon").Value; RecordSet.MoveNext(); КонецЦикла; Connection.Close(); |
|||
1
aka AMIGO
30.03.16
✎
16:06
|
Не знаю причину, но.. извини, мне не очень нравится, что ты выбрал имя переменной, совпадающее с именем функции 1С: "Строка"
|
|||
2
ptiz
30.03.16
✎
16:06
|
(0) Для начала:
Сообщить(ОписаниеОшибки()); вставь перед Сообщить ("Проблемы с выполнением запроса"); |
|||
3
olegon7
30.03.16
✎
16:23
|
ошибки нет
запрос второй не выполняется Запрос= " |select MAX(kartkvgd.yearmon) AS yearmon, |kartkvgd.lic_sch, |kartkvgd.data_new |from |kartkvgd |GROUP BY kartkvgd.lic_sch INTO Cursor temp1; |select temp1.data_new AS data_new, |temp1.lic_sch AS lic_sch_t1, |temp1.yearmon AS yearmon, |kartab.lic_sch AS lic_sch_kartab1 |from temp1 left join kartab |on temp1.lic_sch=kartab.lic_sch"; здесь два запроса результат первого помещаю во времен табл темп1 а затем выполняю второй запрос(должен выполнятся , но он не выполняется) |
|||
4
olegon7
30.03.16
✎
16:26
|
может что -то в запросе неправильно написал?
|
|||
5
olegon7
30.03.16
✎
17:13
|
Собака зарыта в запросе втором - он просто не выполняется- только первый выполняется.
Вообще можно так последовательно запросы выполнять с временными таблицами? |
|||
6
Записьдампа
30.03.16
✎
17:34
|
(5) Исполнение пакетного запроса и возврат его результата - на усмотрении драйвера и провайдера. То, что, например, провайдер MSSQL выполняет все и возвращает последний результат - его право, но не обязанность. Смирись.
|
|||
7
hhhh
30.03.16
✎
17:50
|
может
|select MAX(kartkvgd.yearmon) AS yearmon, |kartkvgd.lic_sch, |kartkvgd.data_new |from |kartkvgd |GROUP BY kartkvgd.lic_sch, |kartkvgd.data_new |
|||
8
Записьдампа
30.03.16
✎
18:17
|
select
И убедится, что kartab есть индекс по lic_sch |
|||
9
cons74
30.03.16
✎
19:15
|
Немного не в тему, но... Я из dbf в access втягивал, и там уже запрос строил. А таблицу - результат в xls и оттуда в 1С
|
|||
10
olegon7
30.03.16
✎
20:42
|
о вложенном запросе тоже думал , но он медленнее чем пакетный запрос. Может знаете какой драйвер умеет работать с пакетами запросов?
Еще вопрос таблица kartkvgd поля yearmon тип дата дата последней оплаты lic_sch тип строка лицевой счет data_new тип число показания записей более миллиона , ни одно поле не уникально как правильно выбрать всех абонентов(неповторяющихся) по последней оплате правильно ли я написал запрос вот этот? на поле data_new нет ни группировки ни агрегатной функции select MAX(kartkvgd.yearmon) AS yearmon, |kartkvgd.lic_sch, |kartkvgd.data_new |from |kartkvgd |GROUP BY kartkvgd.lic_sch INTO Cursor temp1; |
|||
11
Записьдампа
30.03.16
✎
23:01
|
(10) Ну дык сымитируй пакетный запрос через несколько вызовов. create table там, insert, select, drop... Индексы по вкусу.
|
|||
12
olegon7
31.03.16
✎
08:40
|
При выполнеии вложенного бьет ошибку
{Обработка.импортдбф.Форма.Форма.Форма(114)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][ODBC Visual FoxPro Driver]Syntax error. Неправильно составлен запрос или драйвер не умеет |
|||
13
Записьдампа
31.03.16
✎
08:46
|
(12) Там чистым английским ведь написано, что.
|
|||
15
aka AMIGO
модератор
31.03.16
✎
09:21
|
(14) Капслок на форуме запрещен.
|
|||
16
olegon7
31.03.16
✎
09:23
|
Ругается на запрос, который вы предложили.
Не подскажите как составить пакетный через несколько вызовов |
|||
17
Записьдампа
31.03.16
✎
09:40
|
(16) Вполне может быть, я его не проверял.
Не надо составлять пакетный запрос. Надо составить несколько запросов, каждый из которых реализует часть логики - создание таблицы, заполнение ее данными, использование таблицы для получения результатов, и возможно удаление таблицы. Конкретный код я тебе писать не буду, извини. |
|||
18
Записьдампа
31.03.16
✎
09:54
|
В (8) возможно ошибка в GROUP BY
|
|||
19
olegon7
31.03.16
✎
11:30
|
может кто подключал ole db драйвер к dbf?
у меня сервер win serv 2008 1c x86 сервер x86 субд ms sql драйвер установил VFPOLEDB x86 последний но программа ругается на него поставщик не найден НО!!!в файловом варианте все работает я так понимаю дело в разрядности драйвера кто нибудь ставил x64 разрядный драйвер ole db и есть ли он вообще в природе |
|||
20
George Wheels
31.03.16
✎
11:41
|
Проверь может
temp1.lic_sch = "ЛицевойСчет" , а kartab.lic_sch = "ЛицевойСчет " |
|||
21
olegon7
31.03.16
✎
12:12
|
как реализовать несколько запросов исходя из моего программного кода?
кажДый раз создавать новый record set? Connection.Open("DRIVER={Microsoft FoxPro VFP Driver (*.dbf)};SourceDB=d:\dbf\; SourceType=DBF; Exclusive=No;BackgroundFetch=Yes;Collate=Russian;Null=No;Deleted=Yes;"); Запрос= "запрос1"; RecordSet.Open(Запрос1, Connection ); Connection.Close(); Connection.Open("DRIVER={Microsoft FoxPro VFP Driver (*.dbf)};SourceDB=d:\dbf\; SourceType=DBF; Exclusive=No;BackgroundFetch=Yes;Collate=Russian;Null=No;Deleted=Yes;"); Запрос= "запрос2"; RecordSet.Open(Запрос2, Connection ); Connection.Close(); |
|||
22
olegon7
31.03.16
✎
14:16
|
приведите работающий пример на несколько вызовов?
что бы можно было обращаться к таблицам можно схемно |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |