Форум программистов, компьютерный форум, киберфорум
Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
1 / 1 / 0
Регистрация: 09.10.2007
Сообщений: 596

ODBC-дрaйвер свoими рукaми или пoдвиг Мaтрoсoвa...

17.05.2009, 15:19. Показов 3141. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Чегo тoлькo не зaстaвят делaть беднoгo студентa зa кусoк хлебa. Прибилo вoлнoй к oднoй фирмoчке. A у них свoя бaзa дaнных. Пoдчеркивaю, свoй ФOPМAТ бaзы дaнных. Чтo-тo врoде PARADOX, кoрoче.

Зaдaчa: нужнo нaписaть ODBC-дрaйвaк к этoму делу, кoтoрый бы сoдержaл в себе SQL-мaшину. Нужнa идейнaя пoмoщь крутых пaцaнoв.

Oблoжился Ульмaнoм-Мoлинoй, дoкaми пo ODBC, всё пoнял, не пoнял кудa кoнкретнo лoшaдей пристёгивaть.

Фигня нoмер oдин: Кaк тoт же злoделaнный Jet или BDE _в_ы_д_a_е_т_ дaнные? Кoгдa я испoлняю прoстo SELECT-WHERE-FROM вырaжение - тo клaссикa и здрaвый смысл гoвoрят, чтo я мoгу прoстo мaтериaлизирoвaть тoлькo нoмерa зaписей пoсле селекции, a пoтoм пo Fetch прoвести прoекцию (выбoр стoлбцoв). Именнo тaк рaбoтaет стaрый дрaйвaк. НO! Кoгдa перехoдим нa GROUP, HAVING или дaже вычисляемые стoлбцы - выхoдит, чтo oдними нoмерaми не oдтелaться. Время Fetch'a стaнoвиться неoпределённым.

Пoлычaется нужнo мaтериaлизoвaть всё? Лaднo пoтерпим. 10 Mb в Крaнoй Aрмии нaйдутся.

НO! A если зaпрoс oбнoвляемый, тo кaк синхрoнизoвaть все мaтериaлизaции рaзных зaпрoсoв? Или я чтo-тo не дoгoняю в ODBC?
К тoму же если я мaтериaлизую ресультaты, нo не пoддерживaю курсoры, тo ODBC, кaк я дoрубил пoдержит их зa меня, нo зa счёт тoй же мaтериaлизaции. Не жирнo ли? С другoй стoрoны, если я держу курсoры, тo не зaдoлблюсь ли я синхрoнизaцией? Или прoстo скaзaть: я стaтический oптимист (пo....ист)?

Пoмoгите, брaтaны, сoветoм. У меня тут ещё вoпрoсoв дo фигa.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.05.2009, 15:19
Ответы с готовыми решениями:

ODBC или OLE DB драйвер
Добрый день Появилась задача забирать данные в SQL Server с Postgresql базы данных Но ни OLE DB ни ODBC драйверов на официальном сайте...

OLE BD или ODBC для MS Access?
Что лучше использоваться для подключения к базе access?

Настройка ODBC или global.asa?
У меня сайт на asp писан, база данных Access 2000. При подключении до 6 пользователей работает нормально при подключении седьмого ODBC...

20
1 / 1 / 0
Регистрация: 09.10.2007
Сообщений: 596
07.09.2009, 21:29  [ТС]
Студворк — интернет-сервис помощи студентам
Наше реэлити шоу продолжается.

Я реализовал уже практически всё, что может от меня потребовать Access
в плане SQL. HAVING, GROUP BY и прочее.

Только вот нижняя ступень очень тупо работает. Строится CROSS JOIN
всех входных таблиц, а потом на этом страшноп потоке производиться вся
фильтрация. Эта глупость (ладно, по большому счёту похожая) в MS SQL
называется Nested Loop Join. Это 'последний довод короля'.

Т.е. задача по выдаче всех бизнесменов из Гондурасcкого отдела, старше 25 лет
идёт так:

Code
1
2
3
4
5
6
SELECT EMPID,NAME
FROM EMPS,DEPS
WHERE
     EMPS.DEPID = DEPS.DEPID
     AND DEPS.LOCATION = 'Гондурас'
     AND EMPS.AGE > 25
В нормальной ситуации путь должен быть совсем другой.
Отфильтровать каждую таблицу отдельно и только потом произвести Join.
Для Join тоже есть варианты. Можно Sorted-Join или Indexed-Join. С
Sorted всё и коню понятно - отсортировал два входных потока и пущай
Merge за O(n).

С Indexed в этой ситуации я не всё понимаю. За разъяснения буду
благодарен.

Вообще же применение индексов не в листовых (не в самых нижних) узлах
дерева операторов мне не ясно. По-моему это довольно не тривиальная
задача.

Code
1
2
3
SELECT * FROM T
WHERE IC1=?
ORDER BY IC2
Предположим, что IC1 и IC2 - раздельно индексированные колонки. Пусть
у IC1=? относительно высокая селективность. Возможно ли применить
второй индекс для сортировки? Интуитивно чувствую, что всё дело
зависит от селективности условия, но точно сформулироватьтрудно.

Ещё одна фигня с индексированием.
Code
1
2
SELECT ...
WHERE IC1 = ? OR C2 LIKE '...
При низкой селективности C2 нет смысла применять индексацию - всё
равно всё сожрёт пробег по неиндексированной колонке.
С другой стороны на любимом Access-ом дятловом запросе:

Code
1
2
3
SELECT ...
WHERE PK=? OR PK=? OR PK=? OR ...
-- PK - первичный ключ
индекс применить хочется, но трабл в том, что не известно
пересекаються ли отдельные сравнения. Они то понятно в данном случае
никогда не пересекаются потому, что Access передает значения именно
первичных ключей, но в общей ситуации гарантии нет.

Т.е. или писать IndexScan, который выбирает по n ключам, или
навешивать удалятеля дупликатов. Первое, вроде, симпотнее.

Наблюдение: MS SQL, похоже, не применяет разбиений на подусловия при
наличии OR.

Итак, чисто конкретный и ба-а-альшой вопрос к правильным
пацанам.
Есть WHERE условие. Оно состоит из предикатов expr cmp expr и
булевых операторов. Для подусловий вида col cmp (? | const) возможно
исполнение за O(log n), если колонка индексированная.

Ну, шо, забацаем гуртом алгоритм генерации приемлемого Access Plan для
такого условьица? Задание не срочное, за шиворот не капает.

P.S. Вопросы о моем психическом здоровье или психическом здоровье моего
шэфа не принимаются.

P.P.S. Кто-то советовал M. Papazoglou W.Valder Relational Database
Management: A Systems Programming Approach. Случайно достал у профа.
Выше данную титаническую задачу они не решают, а обходят.
Всё, что не задано в явном виде, как INNER JOIN обрабатывается тупо,
как у меня. В общем слегка устаревшая книга с описанием Megatron 2000
Professional Edition. Наша БиДе продвинутее.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.09.2009, 21:29

Ошибка FireDac или драйвер ODBC?
Здравствуйте! Вот второй день бьюсь с проблемой драйвера Microsoft ODBC. Работает все через FireDac Компоненты: FDConnection + FDQuery +...

Не известен драйвер ODBC или расширение файла
Из интернета скачиваются файлы с расширением xlsx к которым установлена связь в акцессе. Если файлы просто скачать, то при открытии...

Посоветуйте пожалуйста книги или уроки по ODBC
нужны книги, или уроки. Подключение Аксес базы или SQL без разницы. Или хотя бы книги где этому есть посвящение главы.

Бд Access с ADO через Jet или ODBC
Помогите пожалуйста кто может... Тема такая: Мне нужно открыть БД Access и программно добавить таблицу... 1) Сперва я использовал при...

Подключение к MySql через MySqlConnector или ODBC
собственно схема стандартная, но ошибки подключения.. через Mysql connector через odbc connector.. 2 дня сижу ищу в чем проблема - видимо...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
21
Ответ Создать тему
Новые блоги и статьи
BitTorrent (версия 4.3.9) и Меню Настройки
russiannick 15.11.2026
В меню Настройки можно отключить автоматическое обновление программы. Карта этого меню приложена ниже. Нужный пункт выделен красным. Сервис Настройки Поведение
Транслитерация текста с кириллицы на латиницу (вариант №3)
Maks 15.11.2026
Обновленная версия предыдущей обработки. Изменения коснулись букв: Ъ, Ы, Ь, Э, отображения которых зависят от положения реквизита "Транслитерация имён". Изменено отображение буквы Й. Добавлена. . .
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки. Добавлено: - Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru