Выбор значений полей из DBF произвольного формата

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
KoMap
Новичок
Сообщения: 21
Зарегистрирован: 13 Апрель 2006, 5:23
Откуда: Томск

Выбор значений полей из DBF произвольного формата

Сообщение KoMap »

Можно ли как-нибудь не привязываясь к формату ДБФ-файла получать оговоренные поля. Ну типа как открытие ДБФ-ок в фокс-про - выбрать только нужные поля, т.е. что бы не было привязки к точному соответсвию структуры
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3285
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 48 раз
Контактная информация:

Сообщение Дед Пахом »

через ODBC, т.е. драйвер ODBC, затем sql-запросы через file{prop:sql}. Или напрямую через ODBC API
С уважением, ДП
KoMap
Новичок
Сообщения: 21
Зарегистрирован: 13 Апрель 2006, 5:23
Откуда: Томск

Сообщение KoMap »

Не затруднит ли вас написать коротенький пример?

Т.е. задача примерна такая:
1. Есть несколько баз, с разными наименованиями полей
2. Есть база зависимостей - бакая-то база, такое-то имя поле -> что означает. Т.е. примерно так:
База1 - Поле1 - Операция
База2 - Поле2 - Операция
База1 - Поле6 - Количество
База2 - Поле6 - Количество
---------------------------------
В результате надо получить одну общую таблицу с полями "Операция" и "Количество"
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3285
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 48 раз
Контактная информация:

Сообщение Дед Пахом »

что-то вроде

Код: Выделить всё

SELECT Column1 as Op, Column6 as Amount FROM Table1
UNION
SELECT Column2 as Op, Column6 as Amount FROM Table2
имена колонок берёте из Вашей базы зависимостей
С уважением, ДП
KoMap
Новичок
Сообщения: 21
Зарегистрирован: 13 Апрель 2006, 5:23
Откуда: Томск

Сообщение KoMap »

синтаксист сиквала ясен - мне не понятено как описать произвольную ИСХОДНУЮ базу
Последний раз редактировалось KoMap 21 Апрель 2006, 10:43, всего редактировалось 1 раз.
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3285
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 48 раз
Контактная информация:

Сообщение Дед Пахом »

О какой версии клариона говорим? Если о 6-ой более-менее последних патчах, то там появился ключ TURBOSQL для атрибута DRIVER(), который позволяет описать и юзать "виртуальную" таблицу. Если версия младшая, то имхо либо ODBC API (что муторно с нуля самому писать), либо завести ещё один физический dbf с полями Operation и Amount и сливать данные в него.

Не знаю, может MAV Direct ODBC тут поможет? Говорят, просто и элегантно разбирается с любыми ODBC-проблемами.
С уважением, ДП
softcreator
Ветеран движения
Сообщения: 78
Зарегистрирован: 04 Август 2005, 9:35
Контактная информация:

Сообщение softcreator »

Даже руками через ODBC можно без проблем получить параметры любой таблицы, с которой работаем через полноценный odbc-драйвер (драйвер в терминах ОС) - нужно использовать SQLColumns и потом классическое сочетание SQLBindCol+цикл SQLFetch для получения нужной информации о полях некой таблицы (можно получить все что угодно - в том числе информацмию о именах полей, типах и размерностях).
Ну а потом постороить динамически запрос на основании полученных данных - дело уже примитивное.
KoMap
Новичок
Сообщения: 21
Зарегистрирован: 13 Апрель 2006, 5:23
Откуда: Томск

Сообщение KoMap »

softcreator писал(а):Даже руками через ODBC можно без проблем получить параметры любой таблицы
Т.е. таблица должна быть жестко описана в исходнике?
Дед Пахом писал(а):О какой версии клариона говорим?
6.3
Дед Пахом писал(а):появился ключ TURBOSQL для атрибута DRIVER()... Не знаю, может MAV Direct ODBC тут поможет
Спасибо за наводки - посмотрю, понюхаю, пощупаю
softcreator
Ветеран движения
Сообщения: 78
Зарегистрирован: 04 Август 2005, 9:35
Контактная информация:

Сообщение softcreator »

Т.е. таблица должна быть жестко описана в исходнике?
Зачем? Через odbc мы имеем доступ у данным произвольной стуктуры.
Динамически получаем инфу о полях таблицы и формируем запрос на основании этих данных.
KoMap
Новичок
Сообщения: 21
Зарегистрирован: 13 Апрель 2006, 5:23
Откуда: Томск

Сообщение KoMap »

напиши, плиз, как ее описать, что бы иметь доступ к ее данным
softcreator
Ветеран движения
Сообщения: 78
Зарегистрирован: 04 Август 2005, 9:35
Контактная информация:

Сообщение softcreator »

1. Тебе нужно физически создать файл, который совпадает со структурой необходимой тебе выборки и закларировать его в приложении с odbc-драйвером. Этот файл потребуется тебе только как dummy-структура для получения хендла odbc-соединения и как буфер для получения результирующей выборки
2. Инициализируешь нужным образом owner-переменную данного файл и открываешь его. Как инициализировать - смотри на сайтах
http://www.able-consulting.com/MDAC/ADO ... SNLess.htm
http://www.connectionstrings.com

3. По открытому файлу получаешь хендл соединения (PROP:hstmt)
4. Открываешь MSDN и читаешь об использовании тех функций, что я указал выше.
5. Получив список полей интересующих тебя таблиц стоишь запрос для получения данных из этих таблиц
6. Используя PROP:Sql для описанной dummy-таблицы выполняешь запросы и получаешь значения интересующих тебя полей.

Если сам не сможешь сделать - спроси у Андрея Мялина - может быть у него есть реализованный механизм получения инфы о структурах odbc-источников. Не получится - пиши мне лично, я дам библиотеку - там первые 4 пункта можно реализовать десятком строк кода. Ну и не нужен будет в приницпе доп.файл естественно.
softcreator
Ветеран движения
Сообщения: 78
Зарегистрирован: 04 Август 2005, 9:35
Контактная информация:

Сообщение softcreator »

Я пропустил информацию о том, что уже есть список полей!
Тогда вообще проблем никак нет - после пункта 1 сразу переходить к пункту 5 - совершенно механически решаемая задача.
Аватара пользователя
Ravenous
Бывалый
Сообщения: 58
Зарегистрирован: 06 Июль 2005, 14:25
Откуда: Москва
Поблагодарили: 1 раз

Сообщение Ravenous »

В качестве примера могу порекомендовать
cwODBCsetup
Там хоть и для Access, но если воспользоваться ссылкой про DSNLess указанной ранее, то все должно получиться. :)
Благодарень за терпение и понимание.

Изображение
Alex_Sh

Сообщение Alex_Sh »

т.е. уже никто не пользует « КЛАСС DB3 для вывода и ввода информации в DBF-формате без использования драйверов Clarion. Автор: Юрий Философов»???
Библиотека предназначена именно для озвученных целей и ее можно забрать, например, здесь http://www.dvgu.ru/lemoi/clafaq/faqcgi.cgi
Аватара пользователя
Ravenous
Бывалый
Сообщения: 58
Зарегистрирован: 06 Июль 2005, 14:25
Откуда: Москва
Поблагодарили: 1 раз

Сообщение Ravenous »

Почему же? Я очень даже и использую, для создания dbf файла "пустышки".
Но, читать и писать в него мне удобней через ODBC.
Благодарень за терпение и понимание.

Изображение
Ответить