Немогу разобраться с TDBF
Модератор: Модераторы
Немогу разобраться с TDBF
По промеру с официального сайта компонента TDBF в своей программе создаю таблицу нужной конфигурации, подключаю её при запуске приложения, вношу в неё новые записи...
Но немогу разобраться с двумя вещами:
1. Фильтрация, как я раньше фильтровал абсолютдатабаза непроходит. Нужно следующее: фильтрация по точному значению, и фильтрация по маске - то есть когда ячейка содержит введёный фрагмент.
2. Как удалить запись из таблицы из кода.
Помогите пожалуйста.
Но немогу разобраться с двумя вещами:
1. Фильтрация, как я раньше фильтровал абсолютдатабаза непроходит. Нужно следующее: фильтрация по точному значению, и фильтрация по маске - то есть когда ячейка содержит введёный фрагмент.
2. Как удалить запись из таблицы из кода.
Помогите пожалуйста.
qivi писал(а):По промеру с официального сайта компонента TDBF в своей программе создаю таблицу нужной конфигурации, подключаю её при запуске приложения, вношу в неё новые записи...
2. Как удалить запись из таблицы из кода.
Помогите пожалуйста.
Команда delete помечает на удаление ставя звездочку в определенном поле структуры dbf
Поътому в dbf после команд удаления dbf1.delete нужно делать pack -
dbf1.PackTable;
Спасиб... уже пробую...
А с фильтрацией?
А с фильтрацией?
Честно говоря, у меня не хватало фантазии использовать в этом компонент фильтрацию.
Он настолько древний, что только Clipper-Foxpro подобные манипуляции с записями делает и ВСЁ.
Я вместо Absolute DataBase в Lazarus перешел на SQLITE для операций select, а в качестве полнофункциональной базы однозначно жарптицу firebird 2.
Хотя приходиться и к другим базам коннектится. Так я поставил себе Zeos 6.6.0 и нет проблем.
Он настолько древний, что только Clipper-Foxpro подобные манипуляции с записями делает и ВСЁ.
Я вместо Absolute DataBase в Lazarus перешел на SQLITE для операций select, а в качестве полнофункциональной базы однозначно жарптицу firebird 2.
Хотя приходиться и к другим базам коннектится. Так я поставил себе Zeos 6.6.0 и нет проблем.
qivi писал(а):1. Фильтрация, как я раньше фильтровал абсолютдатабаза непроходит. Нужно следующее: фильтрация по точному значению, и фильтрация по маске - то есть когда ячейка содержит введёный фрагмент.
"Правильно сформулированный вопрос - 50% ответа!"
"Я понял - это намёк, я всё ловлю на лету. Но непонятно, что конкретно ты имеешь в виду".
Напишите, для начала, с какими именно типами полей Вы работаете и приведите примеры, что значит для Вас "точное значение" и что такое ""по маске" или "введённый фрагмент".
Вот так фильтровал по точному значению:
И получал в дбгриде строки которые в колонке раздел содержали значение "Какой то там раздел" - не больше не меньше.
А когда мне нужно было получить все строки которые содержали некий фрагмент, я фильтровал вот так:
Ну тока компонент иной стоял... ну вот теперь с Tdbf это непроходит.
Да мне как раз ничего сложного и не надо, мне надо чтоб база работала без серверов, сторонних библиотек и прочей мути, SQL мне то же не нужен. Почти любая программа работает с какими то своими данными или данными пользователя, имнно для этого мне и интересны базы данных, а высокопроизводительные серверные варианты, признаюсь даже не вдохновляют.
Какая ни будь из вышеперечисленных баз интегрируется целиком в экзешник проекта и не нуждается в сторонних средствах для своей работы?
Код: Выделить всё
Tdbf1.Filter:='Razdel="Какой то там раздел" ' ;И получал в дбгриде строки которые в колонке раздел содержали значение "Какой то там раздел" - не больше не меньше.
А когда мне нужно было получить все строки которые содержали некий фрагмент, я фильтровал вот так:
Код: Выделить всё
Tdbf1.Filter:='Razdel like "*Какой то*"';Ну тока компонент иной стоял... ну вот теперь с Tdbf это непроходит.
Честно говоря, у меня не хватало фантазии использовать в этом компонент фильтрацию.
Он настолько древний, что только Clipper-Foxpro подобные манипуляции с записями делает и ВСЁ.
Я вместо Absolute DataBase в Lazarus перешел на SQLITE для операций select, а в качестве полнофункциональной базы однозначно жарптицу firebird 2.
Хотя приходиться и к другим базам коннектится. Так я поставил себе Zeos 6.6.0 и нет проблем.
Да мне как раз ничего сложного и не надо, мне надо чтоб база работала без серверов, сторонних библиотек и прочей мути, SQL мне то же не нужен. Почти любая программа работает с какими то своими данными или данными пользователя, имнно для этого мне и интересны базы данных, а высокопроизводительные серверные варианты, признаюсь даже не вдохновляют.
Какая ни будь из вышеперечисленных баз интегрируется целиком в экзешник проекта и не нуждается в сторонних средствах для своей работы?
qivi
1. Точное значение.
Абсолютно точно так же это дело работает и сейчас. По крайней мере у меня работает в высшей степени превосходно. Почему у Вас не работает - не знаю.
2. Неточное значение.
Tdbf1.Filter:='Razdel="*Какой то*"';
или
Tdbf1.Filter:='Razdel="Какой то*"';
Опять же, у меня работает в высшей степени превосходно.
1. Точное значение.
qivi писал(а):Вот так фильтровал по точному значению:
Tdbf1.Filter:='Razdel="Какой то там раздел" ' ;
И получал в дбгриде строки которые в колонке раздел содержали значение "Какой то там раздел" - не больше не меньше.
Абсолютно точно так же это дело работает и сейчас. По крайней мере у меня работает в высшей степени превосходно. Почему у Вас не работает - не знаю.
2. Неточное значение.
Tdbf1.Filter:='Razdel="*Какой то*"';
или
Tdbf1.Filter:='Razdel="Какой то*"';
Опять же, у меня работает в высшей степени превосходно.
-
ViruZ
- постоялец
- Сообщения: 175
- Зарегистрирован: 30.05.2005 17:41:12
- Откуда: Украина
- Контактная информация:
А после установки значения фильтра имеется строка:
Код: Выделить всё
Tdbf1.Filtered:=true;Команда delete помечает на удаление ставя звездочку в определенном поле структуры dbf
Поътому в dbf после команд удаления dbf1.delete нужно делать pack -
dbf1.PackTable;
Да оно так работает... тока каждый раз выдаёт вот такое сообщение:
Exclusive access is required for operation.
ИТД
Что переводится как:
Исключительный доступ необходим для действия.
При этом удаление происходит и программа продолжает работать... тока вот это окошко с сообщением совсем неуместно... как от него избавится???
qivi писал(а):Да оно так работает... тока каждый раз выдаёт вот такое сообщение:
Exclusive access is required for operation.
ИТД
Ну не обманывайте. Delete такого сообщения не выдаёт.
Исключительные права нужны только при упаковке таблицы. Только задайтесь вопросом - а насколько часто Вам это нужно делать? Ведь эта задача не является даже ежедневно необходимой. Поэтому Ваша сентенция:
тока вот это окошко с сообщением совсем неуместно... как от него избавится???
Выглядит, мягко говоря, нелепо. Если хотите упаковать таблицу, т.е. удалить из неё записи помеченные к удалению, просто переведите её предварительно в состояние эксклюзивного доступа и всё.
Добавлено спустя 5 минут 18 секунд:
ViruZ писал(а):А после установки значения фильтра имеется строка:
Tdbf1.Filtered:=true;
Если фильтрация нужна постоянно, то это значение можно вообще не трогать, установить его один раз в True и всё. При изменении значения фильтра, выводимые данные автоматически подстроятся под это значение.
Выглядит, мягко говоря, нелепо. Если хотите упаковать таблицу, т.е. удалить из неё записи помеченные к удалению, просто переведите её предварительно в состояние эксклюзивного доступа и всё.
Это однопользовательская программа с локальными таблицами, и эта операция (удаления) может происходить неоднократно за один сеанс работы программы, следовательно моё утверждение вполне уместно.
А как её перевести в состояние эксклюзивного доступа?
Если это однопользовательская программа, то базу вообще лучше держать именно в эксклюзивном доступе и ни в каком другом. Это гарантирует, что с базой ничего нельзя поделать в то время, как она открыта Вашей программой.
TDbf.Exclusive:=True;
Тем не менее, несмотря на однопользовательскость, нет ни одной причины, чтобы PackTable применять сразу же после Delete. Или у Вас есть такая причина?
TDbf.Exclusive:=True;
Тем не менее, несмотря на однопользовательскость, нет ни одной причины, чтобы PackTable применять сразу же после Delete. Или у Вас есть такая причина?
- alexs
- долгожитель
- Сообщения: 4069
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
qivi писал(а):Это однопользовательская программа с локальными таблицами, и эта операция (удаления) может происходить неоднократно за один сеанс работы программы, следовательно моё утверждение вполне уместно.
Это отнюдь не означает что таблица у вас открыта только один раз.
Вы её вполне можете открыть и в IDE лазаря во время разработки.
Упаковка dbf-ки операция не очень нужная вобще - если только вы не выполняетет ежесекундно масовые удаления из этой таблицы. Индексы прекрасно решают проблему быстродействия.
