Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема ПоставщикДанныхODBC.VFP не отрабатывает с UNION (число прочтений - 2873 )
Лунтик
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 58
Зарегистрирован: 11. Июля 2010
ПоставщикДанныхODBC.VFP не отрабатывает с UNION
18. Июля 2010 :: 17:00
Печать  
Почему ничего не найду по объекту ПоставщикДанныхODBC.VFP? Он что такой древний, что кроме меня о нем никто не помнит?

Запрос, который срабатывает в ODBCRecordSet, сбоит в поставщике. Помогите, пожалуйста, или убедите в нежизненности поставщика. (Кстати действительно, для класса ПоставщикДанных нужно столько всего: Йоксель и т.д.?)


ТекстЗапроса="
|SELECT SPR1.ID as ID, SPR1.DESCR as DESCR
|FROM F:\1sBases\ as SPR1  
|UNION  
|SELECT SPR1.ID as ID, SPR1.DESCR as DESCR
|FROM D:\1sBases\sc31 as SPR2
|Order By 2
|";

Поставщик=СоздатьОбъект("ПоставщикДанных.ODBC")
Поставщик.БазаДанных=бд;
Поставщик.УстТекстЗапроса=ТекстЗапроса;
Поставщик.Поля.Добавить("ID");
Поставщик.Поля.Добавить("DESCR");
Поставщик.Поля.УстКлючПорядка("DESCR");
Поставщик.Поля.УстИДПоле("ID");


Ошибка
State 42000, native 219, message  [Microsoft][ODBC Visual FoxPro Driver]Command contains unrecognized phrase/keyword

Если убираю Order By, то ошибка
State S1000, native 808, message [Microsoft][ODBC Visual FoxPro Driver]SQL: Order By Clause is invalid

« Последняя редакция: 21. Июля 2010 :: 11:06 - Лунтик »  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ПоставщикДанныхODBC.VFP не отрабатывает с OrderBy
Ответ #1 - 18. Июля 2010 :: 17:45
Печать  
Во-первых, если хочешь иметь динамическое ТП для ДБФ баз, то используй 1sqlite. То, что ты пробуешь сейчас - лучше сразу забудь.
Во-вторых, как ты вообще себе представляешь динамического поставщика, у которого в основном тексте запроса есть ORDER BY?
  
Наверх
 
IP записан
 
Лунтик
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 58
Зарегистрирован: 11. Июля 2010
Re: ПоставщикДанныхODBC.VFP не отрабатывает с OrderBy
Ответ #2 - 19. Июля 2010 :: 11:23
Печать  
Order by мне не нужен, СОВСЕМ НЕ НУЖЕН. Но без него выдается ошибка
Order By Clause is invalid.

1sqlite было бы шикарно использовать, но мне не удалось найти как с помощью него обращаться к *.DBF из разных каталогов. Точнее, мне хотелось бы в ОДНУ таблицу собирать информацию из разных баз (к примеру, консолидированный список контрагентов). Если делать это через промежуточные выборки(=временные таблицы?), то ТП не будет видеть изменения в реальном времени. Да?

(и потом построение промежуточных выборок, наверное, будет затратно по времени, потому что исходные справочники большие)

Уважь, JohnyDeath, расскажи поподробнее про 1sqlite для разных баз (мне нужна консолидация в реальном времени). Мне видется только один путь - создавать аналог *.DBF в формате sqlite. Причем триггеры на DBF не вешаются (да?), значит надо использовать Событие_ЗаписьСобытияЖурналаРегистрации (да?)
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ПоставщикДанныхODBC.VFP не отрабатывает с OrderBy
Ответ #3 - 19. Июля 2010 :: 11:50
Печать  
Если нужны актуальные данные из разных баз, то 1sqlite тут не поможет  Печаль
Как мне кажется, самым оптимальным решением в данном случае будет примерно следующее:
1. С помощью OLE DB выбираем данные из нужных баз в ИТЗ
2. Строим ТП на основе этой ИТЗ
3. Периодически (по таймеру или жестко по кнопке) обновляем эту ИТЗ и вместе с ней и ТП.
  
Наверх
 
IP записан
 
Лунтик
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 58
Зарегистрирован: 11. Июля 2010
Re: ПоставщикДанныхODBC.VFP не отрабатывает с OrderBy
Ответ #4 - 19. Июля 2010 :: 12:12
Печать  
Что такое ИТЗ?
Выбирать из разных баз значит использовать UNION (Да?). И что у меня не так в запросе, почему Order By Clause is invalid?

Прости, я напомню. Если этот запрос использовать для RecordSet, то все ОК! Если для Поставщика, то ему не нравится клауза.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ПоставщикДанныхODBC.VFP не отрабатывает с OrderBy
Ответ #5 - 19. Июля 2010 :: 12:29
Печать  
Нет, с Union ALL ничего не получиться (хотя, смотря какой запрос).
Допустим у тебя есть две внешние базы, данные из которых ты хочешь показывать в текущей (третьей) + данные текущей базы.
Для этого:
1. Для первой базы выполняешь запрос через OLE DB в Индексированную таблицу (ИТЗ)
2. Аналогично для второй базы
3. Данные из текущей базы можно также выбрать через OLE DB.
4. Объединяешь все данные в одну ИТЗ.
5. Создаешь ТП с поставщиком данных "ИндексированнаяТаблица"
6. Как только необходимо обновить данные, выполняешь пункты 1-4 + переподключаешь поставщика.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ПоставщикДанныхODBC.VFP не отрабатывает с OrderBy
Ответ #6 - 19. Июля 2010 :: 12:32
Печать  
Хотя, если у тебя все запросы будут не сложнее того, что ты описал раньше:
Код
Выбрать все
SELECT SPR1.ID as ID, SPR1.DESCR as DESCR
|FROM D:\1sBases\sc31 as SPR2  


то пункты 1-3 можно сделать одним запросом. И пункт 4 не понадобится.
  
Наверх
 
IP записан
 
Лунтик
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 58
Зарегистрирован: 11. Июля 2010
Re: ПоставщикДанныхODBC.VFP не отрабатывает с OrderBy
Ответ #7 - 19. Июля 2010 :: 12:47
Печать  
Запрос у меня именно такой простоты (баз только будет побольше, и UNION без ALL). А чем UNION не нравится поставщику? может это вообще его специфика?

И меня беспокоит пункт 6: обновить, переподключить... Это значит, что будет лопатиться В Е С Ь физический источник? или система как-то будет оптимизировать этот процесс (например, увидит только что сделанные изменения).

В моем случае, что ИТЗ, что ТЗ, наверное, все-равно (я же не собираюсь в этой таблице что-то искать). Да? Или ИТЗ все-таки оптимальнее в качестве поставщика.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ПоставщикДанныхODBC.VFP не отрабатывает с OrderBy
Ответ #8 - 19. Июля 2010 :: 12:58
Печать  
Да, динамически построить вряд ли получиться.
Будет поставщик ТЗ или ИТЗ в принципе не важно.
  
Наверх
 
IP записан
 
Лунтик
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 58
Зарегистрирован: 11. Июля 2010
Re: ПоставщикДанныхODBC.VFP не отрабатывает с OrderBy
Ответ #9 - 19. Июля 2010 :: 13:05
Печать  
Стоп, стоп, стоп... Как это не получится? Это слишком простая задача - подумаешь увидеть два файла разом...

Или дело все-таки в UNION. Может заменить его чем-нибудь, например, хранимой процедурой...

Может, быть поставщик пусть будет классом?
А может ADO? говорят он тормозит, ну уж он-то, наверное, все умеет?
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать