Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Delphi+ SQL+DBF / 16 сообщений из 16, страница 1 из 1
01.08.2017, 11:09:08
    #39498231
Валерий666
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi+ SQL+DBF
Вобщем конструкция такая как в заголовке топика Delphi+ SQL+DBF, все нативное, коннектор стандартный.
БД - сейчас уже весит 40Мб+, порядка 5000 строк, без ключей. База лежит в расшаренной папке в сети. Если запускать клиента локально на том же компьютере, где лежит и база, то все происходит достаточно быстро. Проблема в том, что при обращении к ней с клиентских тачек, при каждом запросе происходят жуткие фризы, по 5-10-15 секунд. При чем это не зависит от запроса:

Запрос 1:
Код: pascal
1.
2.
3.
4.
   qRegister.SQL.Add('SELECT * FROM ''' + eDBpath.Text + 'base.dbf''');
   qRegister.SQL.Add('WHERE (BANKCACC <> ''0'')');
   qRegister.SQL.Add('AND (ORDERDATE ='''+datetostr(now)+''')');
   qRegister.SQL.Add('ORDER BY ORDERDATE DESC');



Запрос 2:
Код: pascal
1.
2.
   qRegister.SQL.Add('SELECT * FROM ''' + eDBpath.Text + 'base.dbf''');
   qRegister.SQL.Add('ORDER BY ORDERDATE DESC');



Оба запроса выполняются одинаково! Хотя в первом случае это может быть 1-10-50 строк, во втором запросе выводятся 4500-5000 строк. Может объясните где камушек прячется? От чего зависит время обработки? Ведь в первом варианте возвращаются буквально килобайты...
...
Рейтинг: 0 / 0
01.08.2017, 11:39:41
    #39498266
JayDi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi+ SQL+DBF
Дбф -- локальная база. А значит для выборки клиенту каждый раз надо грузить всю базу. Скорее всего связь очень медленная, отсюда и задержки. Решения:
- уменьшить размер базы;
- улучшить качество связи;
- перейти на клиент-серверную базу данных;
- перенести базу на сервер и работать с ней через трехзвенку (когда на сервере стоит небольшой сервис, выдающий нужные данные клиентам -- см Datasnap).
...
Рейтинг: 0 / 0
01.08.2017, 14:21:01
    #39498411
Vladimir Baskakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi+ SQL+DBF
а qRegister это кто? какой компонент?
как часто данные обновляются, может быть на старте программы просто копировать все к себе, если как правило программа работает на чтение?

авторбыть 1-10-50 строк, во втором запросе выводятся 4500-5000 строк

чтобы вернуть одну строку, ему нужно просканировать всю таблицу. Может быть, взять
http://tdbf.sourceforge.net/
старый компонент, который все грузит в память, и бегать по ней, ногами а не с помощью sql?
...
Рейтинг: 0 / 0
07.08.2017, 12:36:40
    #39501170
Валерий666
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi+ SQL+DBF
Vladimir Baskakovа qRegister это кто? какой компонент?
как часто данные обновляются, может быть на старте программы просто копировать все к себе, если как правило программа работает на чтение?

авторбыть 1-10-50 строк, во втором запросе выводятся 4500-5000 строк

чтобы вернуть одну строку, ему нужно просканировать всю таблицу. Может быть, взять
http://tdbf.sourceforge.net/
старый компонент, который все грузит в память, и бегать по ней, ногами а не с помощью sql?

qRegister - это TQuery.
Вариант с копированием отпадает, потому что с базой работают 5-7 человек одновременно. Запросы на чтение поступают достаточно часто если человек шарится в режиме редактирования и просмотра базы.

Сейчас гляну компонент. Спасибо! Я уже понял, что ему надо кушать каждый раз всю базу...
...
Рейтинг: 0 / 0
07.08.2017, 13:17:30
    #39501195
Прогер123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi+ SQL+DBF
c dbf-базой можно работать в режиме клиент-сервер

http://www.apollodb.com/
...
Рейтинг: 0 / 0
07.08.2017, 13:19:36
    #39501197
Прогер123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi+ SQL+DBF
Прогер123c dbf-базой можно работать в режиме клиент-сервер

http://www.apollodb.com/

http://www.apollodb.com/using_arch.asp#t4
...
Рейтинг: 0 / 0
07.08.2017, 13:41:33
    #39501209
Vladimir Baskakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi+ SQL+DBF
Валерий666Vladimir Baskakovа qRegister это кто? какой компонент?
как часто данные обновляются, может быть на старте программы просто копировать все к себе, если как правило программа работает на чтение?

пропущено...


чтобы вернуть одну строку, ему нужно просканировать всю таблицу. Может быть, взять
http://tdbf.sourceforge.net/
старый компонент, который все грузит в память, и бегать по ней, ногами а не с помощью sql?

qRegister - это TQuery.
Вариант с копированием отпадает, потому что с базой работают 5-7 человек одновременно. Запросы на чтение поступают достаточно часто если человек шарится в режиме редактирования и просмотра базы.

Сейчас гляну компонент. Спасибо! Я уже понял, что ему надо кушать каждый раз всю базу...

а он по любому, целиком. Это же просто текстовый файл, по сути, DBF.
со всеми вытекающими отсюда тормозами. Нетранзакционностью..... как там сделать - Вася взял запись на редактирование, Петя взял , Вася отредактировал, Петя сверху.... а семен и вовсе удалил запись. в общем, если есть возможность по другому, залить данные в нормальную серверную БД, с нормальным SQL - лучше сделать.
TQuery = BDE = Устарело много лет назад
...
Рейтинг: 0 / 0
07.08.2017, 13:48:09
    #39501213
энди
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi+ SQL+DBF
+1 за уход с DBF, особенно если учесть что у вас с базой еще и несколько человек работает.
...
Рейтинг: 0 / 0
07.08.2017, 14:51:43
    #39501269
чччД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi+ SQL+DBF
Валерий666Вобщем конструкция такая как в заголовке топика Delphi+ SQL+DBF, все нативное, коннектор стандартный.
БД - сейчас уже весит 40Мб+, порядка 5000 строк, без ключей. База лежит в расшаренной папке в сети. Если запускать клиента локально на том же компьютере, где лежит и база, то все происходит достаточно быстро. Проблема в том, что при обращении к ней с клиентских тачек, при каждом запросе происходят жуткие фризы, по 5-10-15 секунд. При чем это не зависит от запроса:

Запрос 1:
Код: pascal
1.
2.
3.
4.
   qRegister.SQL.Add('SELECT * FROM ''' + eDBpath.Text + 'base.dbf''');
   qRegister.SQL.Add('WHERE (BANKCACC <> ''0'')');
   qRegister.SQL.Add('AND (ORDERDATE ='''+datetostr(now)+''')');
   qRegister.SQL.Add('ORDER BY ORDERDATE DESC');



Запрос 2:
Код: pascal
1.
2.
   qRegister.SQL.Add('SELECT * FROM ''' + eDBpath.Text + 'base.dbf''');
   qRegister.SQL.Add('ORDER BY ORDERDATE DESC');



Оба запроса выполняются одинаково! Хотя в первом случае это может быть 1-10-50 строк, во втором запросе выводятся 4500-5000 строк. Может объясните где камушек прячется? От чего зависит время обработки? Ведь в первом варианте возвращаются буквально килобайты...
Ничего ты не сделаешь.

Тебе давно говорили - используй клиент-серверные СУБД.
Из бесплатных - хотя бы Firebird.
...
Рейтинг: 0 / 0
07.08.2017, 14:55:04
    #39501270
чччД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi+ SQL+DBF
Прогер123Прогер123c dbf-базой можно работать в режиме клиент-сервер

http://www.apollodb.com/

http://www.apollodb.com/using_arch.asp#t4
Стюардессу уже лучше не раскапывать.
...
Рейтинг: 0 / 0
07.08.2017, 15:20:40
    #39501302
бухалтер фантоцци
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi+ SQL+DBF
Извиняюсь, а как с поддержкой UTF-8 в DBF ? Не говоря о UTF-16 и UTF-32...
Там ведь текстовые поля фиксированной длины, надо закладывать примерно в 2 раза больше для UTF-8 ?
И скорее всего во время выборки / записи может потребоваться перекодировка "на лету" ?
...
Рейтинг: 0 / 0
07.08.2017, 17:43:00
    #39501441
S.G.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi+ SQL+DBF
чччДВалерий666
Ничего ты не сделаешь.

Тебе давно говорили - используй клиент-серверные СУБД.
Из бесплатных - хотя бы Firebird.+1

Лет 10 уже нет смысла делать что-то новое на DBF.
даже если там одна табличка с 1000 записей на 20 полей.
...
Рейтинг: 0 / 0
07.09.2017, 10:01:28
    #39517015
Валерий666
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi+ SQL+DBF
Спасибо всем.
Прошел месяц, база выросла как на грибах до 80Мб, и работать стало невыносимо в принципе.
В итоге, (как мне показалось) самым безболезненным переносом оказался переход на MySQL. Теперь все летает:-) Надо наверное спрятать компоненты BDE вовсе из палитры.
...
Рейтинг: 0 / 0
07.09.2017, 10:07:00
    #39517026
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi+ SQL+DBF
Отключить пакет dcl.BDEXXX.bpl
...
Рейтинг: 0 / 0
07.09.2017, 15:01:36
    #39517432
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi+ SQL+DBF
Валерий666самым безболезненным переносом оказался переход на MySQLОффтоп. Уже лет 5 подбиваю начальство на переход с MySQL на Firebird. Ибо после FB на MySQL смотреть тошно
...
Рейтинг: 0 / 0
07.09.2017, 21:58:46
    #39517780
bk0010
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi+ SQL+DBF
Валерий666Надо наверное спрятать компоненты BDE вовсе из палитры.Не торопитесь. Вам могут принести DBF или понадобится отладить старый проект.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Delphi+ SQL+DBF / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]