Большое спасибо за ответ! Я уже и забыл, что тут вопрос задавал :)
> В комплект поставки Delphi 5 входит LocalSQL Guide. Почему его нет в
> Delphi 7, понятия не имею. Хорошая справка. Правда, в HLP.
Спасибо за наводку, нашел ... в Common Files\Borland Shred\BDE. Я в справке
к Delphi нашел, что, мол, "...read the local SQL help...", но не додумался,
где это найти :)
> Имеются: строковые - ||, LOWER, UPPER, SUBSTRING, TRIM; агрегатные -
> AVG, COUNT, MAX, MIN, SUM; фиг знает, как категорию назвать - CAST,
> EXTRACT.
Еще раз спасибо! :) Особенно про SUBSTRING - именно оно-то мне и нужно было.
Просто подбирал синтаксис функций методом научного тыка и до SUBSTRING(...
FROM ... FOR ...) не догадался.
> ADO. Соответственно TADOQuery, TADOTable (нежелательно), TADOCommand.
> Если найдёшь (могу выслать, но лучше сам скачай с MSного сайта) драйвер к
> Microsoft Visual FoxPro OLEDB Provider, то получишь почти то, что хочешь -
> он понимает (за очень малым исключением) все фичи Fox-а, включая индексные
> теги с выражениями, использующие пользовательские функции, и фразы INTO
> TABLE в SELECT-ах. Но он в ряде мест медленнее (что очень странно - в
> основном он наоборот быстрее) BDE Local SQL, да и завязываться на specific
> фичи ADO провайдера плохо - фиг потом перейдёшь на что-нибудь другое.
Пробовал 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-файлов с минимальным
ручным вмешательством.
>
> > 2. Или какие-нибудь более-менее готовые инструменты для импорта имеющейся
> > БД в формате DBase в нормальный SQL-сервер (Firebird/Interbase, MySQL,
> > PostgreSQL). БД в формате DBF используется другими программам, импорт
> > нужен только для удобства работы с полноценным SQL. Соответственно, такой
> > импорт надо выполнять регулярно. Конечно, можно и самому написать, но
> > ведь лень
> >
> > :)
>
> А чё там писать-то?
>
> INSERT INTO sqlTable (fieldList) SELECT fieldList FROM dbfTable
>
> или даже
>
> INSERT INTO sqlTable SELECT * FROM dbfTable
>
> если структура sqlTable та же самая, что и dbfTable. Самому такого делать
> не приходилось, но какие могут быть проблемы? Разве что типы данных
>чуть-чуть подправить.
>
А таблицы при таком способе создадутся автоматически? Я просто никогда даже
не пробовал работать с SQL-серверами, сейчас вот читаю про использование
Interbase в Delphi...
Всего имеется примерно 200 таблиц, с которыми нужно работать. Примерно,
потому что время от времени присылают обновления - могут убрать одни таблицы,
добавить другие, меняется структура третьих... В придачу к этому в нужных
DBF-файлах используются нестандартные индексы, приходится их отключать (без
отключения индексов с этими файлами работают только Halcyon и Apollo).
Сейчас у меня просто в bat-файле все таблицы копируются в один каталог, потом
отключаются индексы и с полученной БД уже можно рабоать (через BDE).