Немогу разобраться с TDBF

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Немогу разобраться с TDBF

Сообщение qivi » 04.02.2009 12:25:32

По промеру с официального сайта компонента TDBF в своей программе создаю таблицу нужной конфигурации, подключаю её при запуске приложения, вношу в неё новые записи...

Но немогу разобраться с двумя вещами:
1. Фильтрация, как я раньше фильтровал абсолютдатабаза непроходит. Нужно следующее: фильтрация по точному значению, и фильтрация по маске - то есть когда ячейка содержит введёный фрагмент.

2. Как удалить запись из таблицы из кода.

Помогите пожалуйста.
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Немогу разобраться с TDBF

Сообщение alexmai » 04.02.2009 14:14:42

qivi писал(а):По промеру с официального сайта компонента TDBF в своей программе создаю таблицу нужной конфигурации, подключаю её при запуске приложения, вношу в неё новые записи...

2. Как удалить запись из таблицы из кода.
Помогите пожалуйста.

Команда delete помечает на удаление ставя звездочку в определенном поле структуры dbf
Поътому в dbf после команд удаления dbf1.delete нужно делать pack -
dbf1.PackTable;
alexmai
постоялец
 
Сообщения: 106
Зарегистрирован: 02.02.2009 14:58:42

Re: Немогу разобраться с TDBF

Сообщение qivi » 04.02.2009 14:17:22

Спасиб... уже пробую...

А с фильтрацией?
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Немогу разобраться с TDBF

Сообщение alexmai » 04.02.2009 14:39:39

Честно говоря, у меня не хватало фантазии использовать в этом компонент фильтрацию.
Он настолько древний, что только Clipper-Foxpro подобные манипуляции с записями делает и ВСЁ.
Я вместо Absolute DataBase в Lazarus перешел на SQLITE для операций select, а в качестве полнофункциональной базы однозначно жарптицу firebird 2.
Хотя приходиться и к другим базам коннектится. Так я поставил себе Zeos 6.6.0 и нет проблем.
alexmai
постоялец
 
Сообщения: 106
Зарегистрирован: 02.02.2009 14:58:42

Re: Немогу разобраться с TDBF

Сообщение Vadim » 04.02.2009 18:06:09

qivi писал(а):1. Фильтрация, как я раньше фильтровал абсолютдатабаза непроходит. Нужно следующее: фильтрация по точному значению, и фильтрация по маске - то есть когда ячейка содержит введёный фрагмент.

"Правильно сформулированный вопрос - 50% ответа!"
"Я понял - это намёк, я всё ловлю на лету. Но непонятно, что конкретно ты имеешь в виду". :)
Напишите, для начала, с какими именно типами полей Вы работаете и приведите примеры, что значит для Вас "точное значение" и что такое ""по маске" или "введённый фрагмент".
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Немогу разобраться с TDBF

Сообщение qivi » 05.02.2009 00:44:59

Вот так фильтровал по точному значению:
Код: Выделить всё
Tdbf1.Filter:='Razdel="Какой то там раздел" ' ;

И получал в дбгриде строки которые в колонке раздел содержали значение "Какой то там раздел" - не больше не меньше.

А когда мне нужно было получить все строки которые содержали некий фрагмент, я фильтровал вот так:
Код: Выделить всё
Tdbf1.Filter:='Razdel like "*Какой то*"';


Ну тока компонент иной стоял... ну вот теперь с Tdbf это непроходит.

Честно говоря, у меня не хватало фантазии использовать в этом компонент фильтрацию.
Он настолько древний, что только Clipper-Foxpro подобные манипуляции с записями делает и ВСЁ.
Я вместо Absolute DataBase в Lazarus перешел на SQLITE для операций select, а в качестве полнофункциональной базы однозначно жарптицу firebird 2.
Хотя приходиться и к другим базам коннектится. Так я поставил себе Zeos 6.6.0 и нет проблем.


Да мне как раз ничего сложного и не надо, мне надо чтоб база работала без серверов, сторонних библиотек и прочей мути, SQL мне то же не нужен. Почти любая программа работает с какими то своими данными или данными пользователя, имнно для этого мне и интересны базы данных, а высокопроизводительные серверные варианты, признаюсь даже не вдохновляют.

Какая ни будь из вышеперечисленных баз интегрируется целиком в экзешник проекта и не нуждается в сторонних средствах для своей работы?
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Немогу разобраться с TDBF

Сообщение Vadim » 05.02.2009 09:32:44

qivi
1. Точное значение.
qivi писал(а):Вот так фильтровал по точному значению:
Tdbf1.Filter:='Razdel="Какой то там раздел" ' ;
И получал в дбгриде строки которые в колонке раздел содержали значение "Какой то там раздел" - не больше не меньше.

Абсолютно точно так же это дело работает и сейчас. По крайней мере у меня работает в высшей степени превосходно. Почему у Вас не работает - не знаю.
2. Неточное значение.
Tdbf1.Filter:='Razdel="*Какой то*"';
или
Tdbf1.Filter:='Razdel="Какой то*"';
Опять же, у меня работает в высшей степени превосходно.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Немогу разобраться с TDBF

Сообщение ViruZ » 06.02.2009 15:35:03

А после установки значения фильтра имеется строка:
Код: Выделить всё
Tdbf1.Filtered:=true;
ViruZ
постоялец
 
Сообщения: 175
Зарегистрирован: 30.05.2005 17:41:12
Откуда: Украина

Re: Немогу разобраться с TDBF

Сообщение qivi » 07.02.2009 02:26:53

Команда delete помечает на удаление ставя звездочку в определенном поле структуры dbf
Поътому в dbf после команд удаления dbf1.delete нужно делать pack -
dbf1.PackTable;


Да оно так работает... тока каждый раз выдаёт вот такое сообщение:

Exclusive access is required for operation.
ИТД


Что переводится как:

Исключительный доступ необходим для действия.


При этом удаление происходит и программа продолжает работать... тока вот это окошко с сообщением совсем неуместно... как от него избавится???
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Немогу разобраться с TDBF

Сообщение Vadim » 07.02.2009 08:41:40

qivi писал(а):Да оно так работает... тока каждый раз выдаёт вот такое сообщение:

Exclusive access is required for operation.
ИТД

Ну не обманывайте. Delete такого сообщения не выдаёт.
Исключительные права нужны только при упаковке таблицы. Только задайтесь вопросом - а насколько часто Вам это нужно делать? Ведь эта задача не является даже ежедневно необходимой. Поэтому Ваша сентенция:
тока вот это окошко с сообщением совсем неуместно... как от него избавится???

Выглядит, мягко говоря, нелепо. Если хотите упаковать таблицу, т.е. удалить из неё записи помеченные к удалению, просто переведите её предварительно в состояние эксклюзивного доступа и всё.

Добавлено спустя 5 минут 18 секунд:
ViruZ писал(а):А после установки значения фильтра имеется строка:
Tdbf1.Filtered:=true;

Если фильтрация нужна постоянно, то это значение можно вообще не трогать, установить его один раз в True и всё. При изменении значения фильтра, выводимые данные автоматически подстроятся под это значение.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Немогу разобраться с TDBF

Сообщение qivi » 07.02.2009 14:34:33

Выглядит, мягко говоря, нелепо. Если хотите упаковать таблицу, т.е. удалить из неё записи помеченные к удалению, просто переведите её предварительно в состояние эксклюзивного доступа и всё.


Это однопользовательская программа с локальными таблицами, и эта операция (удаления) может происходить неоднократно за один сеанс работы программы, следовательно моё утверждение вполне уместно.

А как её перевести в состояние эксклюзивного доступа?
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Немогу разобраться с TDBF

Сообщение Vadim » 07.02.2009 16:42:36

Если это однопользовательская программа, то базу вообще лучше держать именно в эксклюзивном доступе и ни в каком другом. Это гарантирует, что с базой ничего нельзя поделать в то время, как она открыта Вашей программой.
TDbf.Exclusive:=True;
Тем не менее, несмотря на однопользовательскость, нет ни одной причины, чтобы PackTable применять сразу же после Delete. Или у Вас есть такая причина?
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Немогу разобраться с TDBF

Сообщение alexs » 09.02.2009 20:46:51

qivi писал(а):Это однопользовательская программа с локальными таблицами, и эта операция (удаления) может происходить неоднократно за один сеанс работы программы, следовательно моё утверждение вполне уместно.

Это отнюдь не означает что таблица у вас открыта только один раз.
Вы её вполне можете открыть и в IDE лазаря во время разработки.
Упаковка dbf-ки операция не очень нужная вобще - если только вы не выполняетет ежесекундно масовые удаления из этой таблицы. Индексы прекрасно решают проблему быстродействия.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 28

Рейтинг@Mail.ru