| BG Development · За реклама · За контакти |
Помощ Търсене Потребители Календар Правила |
| Здравей! ( Включване | Регистриране ) |
| Страници: (2) [1] 2 ( Първото ново мнение ) | ![]() ![]() ![]() |
| vesko_hard |
Публикувано на: 21-03-2016, 10:05
|
|
Име: Веселин Николов Група: Потребител Ранг: Новопостъпил Мнения: 11 Регистриран на: 12.03.07 |
Привет на всчки.
От доста време програмирам на делфи, но до сега не ми се беше налагало да използвам БД. От толкова четене и ровене съм леко объркан Приел съм за момента, че ще ползвам локална(файл) база чрез sqlite. Задачата е да се извеждат данните в dbgrid или stringgrid и да се филтритат след това при писане в един едитбокс. Първият въпрос е кои компоненти да се ползват? За сега ползвам тези от dbExpress: SQLConnection, SQLQuery, DataSetProvider, ClientDataSet.... при SQLConnection няма неясни неща , избирам си драйвер sqlite, име на фаила..... При SQLQuery : Искам да ползвам само редовете в които колоната scriptname не е празна. SELECT * FROM tbl1 where scriptname not null; Сега вече във върнатите резултати искам да търся във всички колони за съвпадение с въведеното в едитбокс-а, съответно съвпадението да не е пълно (за което трябва да се използва like) . Как би било правилно да филтрирам при Edit1Change. Като променям SQLQuery всеки път, което ми се струва бавно или като плзвам филтър в ClientDataSet ? Базата е с около 4000 записа. Всичката информация в нея са стрингове. Та интересува ме концептуално кой е правилният подход. |
| Golden Gega |
Публикувано на: 21-03-2016, 10:30
|
![]() Име: Група: Потребител Ранг: Почетен член Мнения: 2189 Регистриран на: 04.06.10 |
Ако до базата има достъп само 1 приложение, или няколко приложения които не я променят, филтрирането може да е в клиента.
Четенето наново при смяна на филтъра има смисъл в бази в които съдържанието може да е променено между два прегледа - това са бази с много клиенти които правят insert/update, бази четящи от непрекъснати източници и т.н. За търсене в текстове е добре да се ползва full text search, макар че в база с 4000 записа спокойно може да се търси класически с like. Все пак някога ще ти се наложи да работиш с големи бази (или такива с много клиенти -> много търсения), така че FTS ще ти трябва като знание. |
| TrustHavic |
Публикувано на: 21-03-2016, 20:52
|
![]() Име: Станимир Група: Потребител Ранг: Редовен член Мнения: 408 Регистриран на: 30.04.14 |
Един мой познат програмира на делфи също. От него знам, че за техните продукти ползват firebird като база данни, защото е по-удобен.
//не е по темата, просто ми изкочи сега в главата |
| akrachev |
Публикувано на: 22-03-2016, 09:27
|
||
|
Име: акрачев Група: Потребител Ранг: Почетен член Мнения: 1216 Регистриран на: 27.11.09 |
?!? професионално мнение! Иначе най добре е с филтър. Погледни тука http://docwiki.embarcadero.com/Libraries/S...TDataSet.Filter -------------------- |
||
| vesko_hard |
Публикувано на: 22-03-2016, 14:55
|
|
Име: Веселин Николов Група: Потребител Ранг: Новопостъпил Мнения: 11 Регистриран на: 12.03.07 |
Поизясниха ми се нещата.
Първо ще изтегля необходимите ми записи с куери в един датасет, аслед това ще търся с филтър. |
| rvc |
Публикувано на: 22-03-2016, 15:17
|
||
![]() Име: Група: Потребител Ранг: Почетен член Мнения: 2654 Регистриран на: 13.05.11 |
и какво правиш ако имаш 5 000 000? най-добре търсенето да бъде включено в самото куери. така ще имаш само записите които наистина те интересуват. |
||
| vesko_hard |
Публикувано на: 22-03-2016, 16:52
|
|
Име: Веселин Николов Група: Потребител Ранг: Новопостъпил Мнения: 11 Регистриран на: 12.03.07 |
Както казах по-горе записите са около 4000. За това и попитах какви са вариантите. Нови записи не се предвиждат. Евентуално промяна на някой от тях може да се наложи но не и да се увеличи броят им.
За сега нещата си работят прекрасно с екселска таблица и делфи компонент за нейтив четене на екселски файл. |
| ivan84 |
Публикувано на: 22-03-2016, 18:28
|
|
Име: Група: Форумен член Ранг: Почетен член Мнения: 8170 Регистриран на: 01.04.11 |
Въпросът, така формулиран е лишен от смисъл. Базите данни предлагат повече от добри инструменти за филтриране. Единствения вариант за да не ги ползваш е да ти трябва някакъв сърч енджин.
|
| wqw |
Публикувано на: 22-03-2016, 18:29
|
||
![]() Име: Владимир Висулчев Група: VIP Ранг: Почетен член Мнения: 6379 Регистриран на: 10.06.04 |
Концептуално и двата подхода са правилни. За мен 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 -------------------- |
||
| NikB |
Публикувано на: 25-03-2016, 12:54
|
||
|
Име: Група: Потребител Ранг: Почетен член Мнения: 1096 Регистриран на: 22.09.05 |
Ще е добре да прецениш добавянето на подходящи индекси. То няма общо правило, но от мен: ако понякога във View (grid или там каквото е) трябва да се виждат всички записи, може би си заслужава да се ползва филтър, но ако никога не се виждат всички (т.е. винаги има приложена филтрация) - по-добре е с изпълнение на Query. |
||
Страници: (2) [1] 2 |
![]() ![]() ![]() |