Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

SQL в BDE

Здравствуйте!

Где можно почитать о диалекте SQL, используемом в BDE? Просто в последнее
время занялся им вплотную и стал наталкиваться на проблемы - это не работает,

то не работает. Особенно недостает функций, не работают даже банальные
POS/SUBSTR, MONTH, LEFT/RIGHT... Пишет, что, мол, "Capability not supported".

Если в BDE этого нет, то посоветуйте пожалуйста:

1. Компоненты для работы с SQL (типа TQuery), обязательно с поддержкой формата

DBF, желательно бесплатные. Пробовал Apollo - он у меня в целом работает, но

программа виснет при закрытии набора данных.

2. Или какие-нибудь более-менее готовые инструменты для импорта имеющейся БД
в
формате DBase в нормальный SQL-сервер (Firebird/Interbase, MySQL,
PostgreSQL). БД в формате DBF используется другими программам, импорт нужен
только для удобства работы с полноценным SQL. Соответственно, такой импорт
надо выполнять регулярно. Конечно, можно и самому написать, но ведь лень :)
Может, есть уже что-нибудь готовое?

Спасибо за ответы-советы.

Ответить   Wed, 1 Feb 2006 19:44:35 +1000 (#509036)

 

Ответы:

В комплект поставки Delphi 5 входит LocalSQL Guide. Почему его нет в
Delphi 7, понятия не имею. Хорошая справка. Правда, в HLP.

Это зависит не от самой BDE, а от возможностей драйвера. BDE просто
предоставляет интерфейс доступа к нему. Сами операции обслуживаются
драйвером. Как-то PARADOX, DBASE, MSSQL итп Есть стандартные, которые
поставляются с самим BDE, можно доставить/дописать собственные.
Теоретически.

Имеются: строковые - ||, LOWER, UPPER, SUBSTRING, TRIM; агрегатные -
AVG, COUNT, MAX, MIN, SUM; фиг знает, как категорию назвать - CAST, EXTRACT.

Это то, что типа гарантируется. Этот список (не уверен, правда) может быть
расширен драйвером, но даже функциональность гарантированных всё равно
зависит от драйвера. То, что ты пытаешься использовать, как я понял,
относится к MS FoxPro specific, которые по причине отсутствия их в стандарте

SQL не обязаны быть поддержаны любым драйвером.

ADO. Соответственно TADOQuery, TADOTable (нежелательно), TADOCommand.
Если найдёшь (могу выслать, но лучше сам скачай с MSного сайта) драйвер к
Microsoft Visual FoxPro OLEDB Provider, то получишь почти то, что хочешь -
он понимает (за очень малым исключением) все фичи Fox-а, включая индексные
теги с выражениями, использующие пользовательские функции, и фразы INTO
TABLE в SELECT-ах. Но он в ряде мест медленнее (что очень странно - в
основном он наоборот быстрее) BDE Local SQL, да и завязываться на specific
фичи ADO провайдера плохо - фиг потом перейдёшь на что-нибудь другое.

А чё там писать-то?

INSERT INTO sqlTable (fieldList) SELECT fieldList FROM dbfTable

или даже

INSERT INTO sqlTable SELECT * FROM dbfTable

если структура sqlTable та же самая, что и dbfTable. Самому такого делать не

приходилось, но какие могут быть проблемы? Разве что типы данных чуть-чуть
подправить.

--
С уважением, boroda

Номер выпуска : 5173
Возраст листа : 871 (дней)
Количество подписчиков : 547
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/512194
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

Ответить   Шматко А.А. Tue, 7 Feb 2006 13:25:19 +0300 (#512194)

 

Большое спасибо за ответ! Я уже и забыл, что тут вопрос задавал :)

Спасибо за наводку, нашел ... в Common Files\Borland Shred\BDE. Я в справке

к Delphi нашел, что, мол, "...read the local SQL help...", но не додумался,
где это найти :)

Еще раз спасибо! :) Особенно про SUBSTRING - именно оно-то мне и нужно было.

Просто подбирал синтаксис функций методом научного тыка и до SUBSTRING(...
FROM ... FOR ...) не догадался.

Пробовал ADO, но так как-то странно работают внешние связи, так и не
разобрался... Для примера, мне позарез нужно, чтоб работал такой (или
подобный) запрос:

SELECT S5.NNASP, S17.NKOD, COUNT(*)
FROM
( F2 LEFT JOIN F8 ON ( F2.PY = F8.PY AND F2.NKAR = F8.NKAR )
LEFT JOIN S17 ON ( F8.KOD = S17.KOD ))
LEFT JOIN F3 ON ( F2.PY = F3.PY AND F3.NKAR = LEFT(F2.NKAR FOR 7) + '00' )
LEFT JOIN S5 ON ( F3.KNASP = S5.KNASP )
WHERE
( F8.DATOP BETWEEN '01.01.2006' AND '31.01.2006' )
GROUP BY S5.NNASP, S17.NKOD
ORDER BY S5.NNASP, S17.NKOD
;

Пока такое работает только в BDE и DBISAM. В DBISAM только очень долго: в F8

примерно 40 тыс. записей, в F2 - около 3 тыс., в S17 и S5 - примерно по
сотне. Через BDE вышеприведенный запрос выполняется примерно 3 мин (без
индексов), в DBISAM - 15 мин (!), с индексами - 12 мин.
Каждый месяц F8 увеличивается примерно на 3-4 тыс. записей. В общем, довольно

скромно все, вроде и локальная БД должна нормально работать...
Почему пробовал DBISAM: там есть средства импорта DBF-файлов с минимальным
ручным вмешательством.

А таблицы при таком способе создадутся автоматически? Я просто никогда даже

не пробовал работать с SQL-серверами, сейчас вот читаю про использование
Interbase в Delphi...
Всего имеется примерно 200 таблиц, с которыми нужно работать. Примерно,
потому что время от времени присылают обновления - могут убрать одни таблицы,

добавить другие, меняется структура третьих... В придачу к этому в нужных
DBF-файлах используются нестандартные индексы, приходится их отключать (без
отключения индексов с этими файлами работают только Halcyon и Apollo).
Сейчас у меня просто в bat-файле все таблицы копируются в один каталог, потом

отключаются индексы и с полученной БД уже можно рабоать (через BDE).

Ответить   Sat, 11 Feb 2006 17:52:23 +1000 (#513681)

 

Ни разу не сталкивался с проблемами. Вот только синтаксис у тебя
любопытный. Никогда с таким не сталкивался, чтоб серия соединений
заключалась в скобки и к результату снова применяется соединение. Это что
вообще значит?

FROM (t1 LEFT JOIN t2 ON ...) LEFT JOIN t3 ON ...

Скромно. Но группировка везде тормозит. В смысле, на не выделенных ДБ
серверах. Но c ADO как-то попроще. ADO, как я заметил, тормозит на
агрегатных функциях, но наверняка это от провайдера зависит.

Нет. Но ИМХО в SQL имеются все средства для управления таблицами,
индексами, представлениями (VIEW) итп. CREATE TABLE, CREATE INDEX, DROP
TABLE итп.

Во-во. Упомянутый мной MS VSFoxPro OLEDB Provider с такими (если я
правильно понял какими) работает на ура.

--
С уважением, boroda

Номер выпуска : 5194
Возраст листа : 876 (дней)
Количество подписчиков : 546
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/514409
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

Ответить   Шматко А.А. Mon, 13 Feb 2006 09:56:57 +0300 (#514409)