BG Development


Страници: (2) [1] 2   ( Първото ново мнение ) Reply to this topicStart new topicStart Poll

> Delphi, Sqlite, филтър... въпроси
vesko_hard
Публикувано на: 21-03-2016, 10:05
Quote Post



Име: Веселин Николов
Група: Потребител
Ранг: Новопостъпил

Мнения: 11
Регистриран на: 12.03.07



Привет на всчки.

От доста време програмирам на делфи, но до сега не ми се беше налагало да използвам БД.
От толкова четене и ровене съм леко объркан icon_smile.gif от многото компоненти за достъп до БД.

Приел съм за момента, че ще ползвам локална(файл) база чрез sqlite.
Задачата е да се извеждат данните в dbgrid или stringgrid и да се филтритат след това при писане в един едитбокс.

Първият въпрос е кои компоненти да се ползват? За сега ползвам тези от dbExpress: SQLConnection, SQLQuery, DataSetProvider, ClientDataSet....

при SQLConnection няма неясни неща , избирам си драйвер sqlite, име на фаила.....
При SQLQuery :

Искам да ползвам само редовете в които колоната scriptname не е празна.
SELECT * FROM tbl1 where scriptname not null;

Сега вече във върнатите резултати искам да търся във всички колони за съвпадение с въведеното в едитбокс-а, съответно съвпадението да не е пълно (за което трябва да се използва like) .
Как би било правилно да филтрирам при Edit1Change.
Като променям SQLQuery всеки път, което ми се струва бавно или като плзвам филтър в ClientDataSet ?
Базата е с около 4000 записа. Всичката информация в нея са стрингове.

Та интересува ме концептуално кой е правилният подход.


PMEmail Poster
Top
Golden Gega
Публикувано на: 21-03-2016, 10:30
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 2189
Регистриран на: 04.06.10



Ако до базата има достъп само 1 приложение, или няколко приложения които не я променят, филтрирането може да е в клиента.
Четенето наново при смяна на филтъра има смисъл в бази в които съдържанието може да е променено между два прегледа - това са бази с много клиенти които правят insert/update, бази четящи от непрекъснати източници и т.н.
За търсене в текстове е добре да се ползва full text search, макар че в база с 4000 записа спокойно може да се търси класически с like. Все пак някога ще ти се наложи да работиш с големи бази (или такива с много клиенти -> много търсения), така че FTS ще ти трябва като знание.
PMEmail Poster
Top
TrustHavic
Публикувано на: 21-03-2016, 20:52
Quote Post



Име: Станимир
Група: Потребител
Ранг: Редовен член

Мнения: 408
Регистриран на: 30.04.14



Един мой познат програмира на делфи също. От него знам, че за техните продукти ползват firebird като база данни, защото е по-удобен.

//не е по темата, просто ми изкочи сега в главата icon_wink.gif
PMEmail Poster
Top
akrachev
Публикувано на: 22-03-2016, 09:27
Quote Post



Име: акрачев
Група: Потребител
Ранг: Почетен член

Мнения: 1216
Регистриран на: 27.11.09



QUOTE (TrustHavic @ 21-03-2016, 20:52)
Един мой познат програмира на делфи също. От него знам, че за техните продукти ползват firebird като база данни, защото е по-удобен.

//не е по темата, просто ми изкочи сега в главата icon_wink.gif

?!? професионално мнение!

Иначе най добре е с филтър.

Погледни тука http://docwiki.embarcadero.com/Libraries/S...TDataSet.Filter


--------------------
PMEmail PosterUsers Website
Top
vesko_hard
Публикувано на: 22-03-2016, 14:55
Quote Post



Име: Веселин Николов
Група: Потребител
Ранг: Новопостъпил

Мнения: 11
Регистриран на: 12.03.07



Поизясниха ми се нещата.
Първо ще изтегля необходимите ми записи с куери в един датасет, аслед това ще търся с филтър.
PMEmail Poster
Top
rvc
Публикувано на: 22-03-2016, 15:17
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 2654
Регистриран на: 13.05.11



QUOTE (vesko_hard @ 22-03-2016, 14:55)
Поизясниха ми се нещата.
Първо ще изтегля необходимите ми записи с куери в един датасет, аслед това ще търся с филтър.

и какво правиш ако имаш 5 000 000?
най-добре търсенето да бъде включено в самото куери.
така ще имаш само записите които наистина те интересуват.
PMEmail PosterUsers Website
Top
vesko_hard
Публикувано на: 22-03-2016, 16:52
Quote Post



Име: Веселин Николов
Група: Потребител
Ранг: Новопостъпил

Мнения: 11
Регистриран на: 12.03.07



Както казах по-горе записите са около 4000. За това и попитах какви са вариантите. Нови записи не се предвиждат. Евентуално промяна на някой от тях може да се наложи но не и да се увеличи броят им.
За сега нещата си работят прекрасно с екселска таблица и делфи компонент за нейтив четене на екселски файл.
PMEmail Poster
Top
ivan84
Публикувано на: 22-03-2016, 18:28
Quote Post



Име:
Група: Форумен член
Ранг: Почетен член

Мнения: 8170
Регистриран на: 01.04.11



Въпросът, така формулиран е лишен от смисъл. Базите данни предлагат повече от добри инструменти за филтриране. Единствения вариант за да не ги ползваш е да ти трябва някакъв сърч енджин.
PMEmail Poster
Top
wqw
Публикувано на: 22-03-2016, 18:29
Quote Post


Group Icon
Име: Владимир Висулчев
Група: VIP
Ранг: Почетен член

Мнения: 6379
Регистриран на: 10.06.04



QUOTE (vesko_hard @ 21-03-2016, 11:05)
Та интересува ме концептуално кой е правилният подход.

Концептуално и двата подхода са правилни.

За мен sqlite е вид ClientDataSet -- просто е малко по-бърз особено със средно големи данни (10k-100k записа) и има FTS със stemming и ranking.

За сметка на това е малко по-сложен за работа, в смисъл трябва да се разучи лекия диалект на SQL и абсолютно custom диалекта за FTS за да пишеш performant заявки.

Друг голям бонус на sqlite е че може да swap-out-ва данните над определен размер, т.е. можеш да му кажеш имам тука 2-3GB таблица, но ползвай само 100MB RAM да не ми набълбукаш процеса докато я показвам.

cheers,
</wqw>

Това мнение е било редактирано от wqw на 22-03-2016, 18:29


--------------------
PMEmail PosterUsers Website
Top
NikB
Публикувано на: 25-03-2016, 12:54
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 1096
Регистриран на: 22.09.05



QUOTE (vesko_hard @ 21-03-2016, 10:05)
Привет на всчки.
...
Като променям SQLQuery всеки път, което ми се струва бавно или като плзвам филтър в ClientDataSet ?
...
Та интересува ме концептуално кой е правилният подход.

Ще е добре да прецениш добавянето на подходящи индекси.


То няма общо правило, но от мен: ако понякога във View (grid или там каквото е) трябва да се виждат всички записи, може би си заслужава да се ползва филтър, но ако никога не се виждат всички (т.е. винаги има приложена филтрация) - по-добре е с изпълнение на Query.
PMEmail Poster
Top
0 потребители преглеждат тази тема в момента (0 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Страници: (2) [1] 2  Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2019 | BG Development | All Rights Reserved
RSS 2.0