Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 09.04.2017
Сообщений: 9

Поиск в БД Delphi с компонентом TADOTable

02.05.2017, 22:42. Показов 1681. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте уважаемые программисты!
Делаю курсовую с базой данных и столкнулся с проблемой поиска(сортировки)в ней. Много статей перечитал и так и не увидел такого кода который бы фильтровал информацию с TADOTable(все просто пишут:я пользуюсь TADOQuery,вот тебе к нему код)а переделывать всю программу под TADOQuery ой как не хочется. Поискал код который пишется для Edit(допустим фильтрация по фамилии):
Delphi
1
2
3
4
5
6
7
8
9
procedure TForm4.Edit1Change(Sender: TObject);
 
begin
if  Length(Edit1.Text)>0  then
Form2.MainTable.Filtered:=true
else
Form2.MainTable.Filtered:=false;
Form2.MainTable:='Фамилия>'''+Edit1.Text+'''';
 end;
Но при компиляции выдает такую ошибку(E2010 Incompatible types: 'TADOTable' and 'string') в строке "Form2.MainTable:='Фамилия>'''+Edit1.Tex t+'''';
А так же обработчик событий onFilterRecord к той таблице которую надо фильтровать(он вызывается при включенной фильтрации каждый раз, когда программе надо выяснить, соответствует ли строка фильтру):
Delphi
1
2
3
4
5
6
7
procedure  Form2.MainTableFilterRecord(DataSet:  TDataSet;
var Accept:  Boolean);
 begin
Accept:=false;
if copy(MainTableDSDesigner.AsString,1,Length(Form4.Edit1.Text))=Form4.Edit1.Text  then 
Accept:=true; 
end;
Вот тут появились такие ошибки:[dcc32 Error] Unit2.pas(52): E2003 Undeclared identifier: 'BookTableDSDesigner' [dcc32 Error] Unit2.pas(52): E2008 Incompatible types [dcc32 Error] Unit2.pas(52): E2029 'THEN' expected but identifier 'Length' found, которые как мне сказали появились из-за несоответствия Delphi 7 (в котором этот код и написан)и RAD Studio 10.1 Berlin(в которой работаю я).
Извиняюсь за такое столь длинное описание и прошу помочь мне разобраться в данной проблеме без советов по переходу на TADOQuery.
Заранее спасибо!!!
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.05.2017, 22:42
Ответы с готовыми решениями:

Подскажите, как осуществить поиск в TADOTable?
Ребят, проблема, срочная, не могу сделать поиск по базе, находил много инфы по ADOquery, но не подходит, у меня ADOtable, я чайник еще тот,...

Работа с компонентом memo - поиск слова,или строчек
Есть программа - моя,в ней есть компонент memo,мне нужно чтоб по нажатию типо label1 в тексте компонента отыскалась нужная мне строка...

Поиск по TADOTable (не с помощью Locate())
Интересует, есть ли какой-нибудь метод у TADOTable, с помощью которого можно было бы найти все записи по необходимым критериям (к примеру...

13
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
02.05.2017, 22:55
Цитата Сообщение от Neoniche Посмотреть сообщение
BookTableDSDesigner
во-первых, в предложенном фрагменте кода нет BookTableDSDesigner
во-вторых в этом обработчике нудно пользоваться исключительно параметром DataSet и от него плясать, безо всяких BookTableDSDesigner, MainTableDSDesigner, т.е.
Delphi
1
2
  Accept :=
    copy(DataSet.FieldByName('...').AsString,1,Length(Form4.Edit1.Text))=Form4.Edit1.Text;
P.S. Странно, что Фильтруемый набор лежит на одной форме, а поле фильтрации - на другой. Ещё на этапе создания форм можете схлопотать AV

Добавлено через 2 минуты
Цитата Сообщение от Neoniche Посмотреть сообщение
Form2.MainTable:=
может все же,
Delphi
1
Form2.MainTable.Filter :=
1
0 / 0 / 0
Регистрация: 09.04.2017
Сообщений: 9
02.05.2017, 23:40  [ТС]
Сделал все как вы сказали, ошибки исчезли, но поиск вообще не понятно работает.
Допустим у меня есть фамилии "ааа" и "ггг" если я введу "а" или "аа" ничего не изменится, но при вводе "ааа" фамилия с этой записью пропадает и остается просто запись "ггг". А вот если ввести "г" то сразу запись(фамилия)"ааа" пропадает и остается запись "ггг"(и при вводе "гг" тоже самое) но стоит добавить якобы последнюю букву фамилии т.е "ггг" то и эта запись исчезает и дбгрид остается пустым. Подскажите пожалуйста в чем тут может быть ошибка.
Заранее спасибо!!!
0
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
02.05.2017, 23:42
код бы СВОЙ показали
1
0 / 0 / 0
Регистрация: 09.04.2017
Сообщений: 9
03.05.2017, 00:23  [ТС]
Это код к Таблице:
Delphi
1
2
3
4
5
6
procedure TForm2.MainTableFilterRecord(DataSet: TDataSet; var Accept: Boolean);
var
a:  Boolean;
 begin
a :=copy(DataSet.FieldByName('Фамилия').AsString,1,Length(Form4.Edit1.Text))=Form4.Edit1.Text;
end;
Это код к Edit
Delphi
1
2
3
4
5
6
7
8
procedure TForm4.Edit1Change(Sender: TObject);
begin
if  Length(Edit1.Text)>0  then
Form2.MainTable.Filtered:=true
else
Form2.MainTable.Filtered:=false;
Form2.MainTable.Filter:='Фамилия>'''+Edit1.Text+'''';
end;
0
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
03.05.2017, 00:29
оба варианта зачем использовать? К тому же с разными требованиями?
у вас же стоит Фамилия>
поэтому
ггг не удовлетворяет ггг>ггг
но при а обе записи удовлетворяют условию
aaa>a
ггг>а

попробуйте
Delphi
1
Form2.MainTable.Filter:='Фамилия LIKE '''+Edit1.Text+'%''';
1
0 / 0 / 0
Регистрация: 09.04.2017
Сообщений: 9
03.05.2017, 00:58  [ТС]
Компилится,но при вводе в окно редактирования выдает ошибку(ту процедуру с таблицей на всякий пожарный удалил,не помогло):
Миниатюры
Поиск в БД Delphi с компонентом TADOTable  
0
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
03.05.2017, 01:01
Цитата Сообщение от Neoniche Посмотреть сообщение
Компилится,но при вводе в окно редактирования выдает ошибку
код показывайте
1
0 / 0 / 0
Регистрация: 09.04.2017
Сообщений: 9
03.05.2017, 01:04  [ТС]
Delphi
1
2
3
4
5
6
7
procedure TForm4.Edit1Change(Sender: TObject);
begin
if  Length(Edit1.Text)>0  then
Form2.MainTable.Filtered:=true;
Form2.MainTable.Filter:='Фамилия LIKE '''+Edit1.Text+'%''';
 
end;
0
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
03.05.2017, 01:15
а где Filtered:=false? ошибка же возникает при пустом Edit1.Text
Delphi
1
Form2.MainTable.Filtered:=Length(Edit1.Text)>0;
1
0 / 0 / 0
Регистрация: 09.04.2017
Сообщений: 9
03.05.2017, 01:53  [ТС]
Так и получается что из-за чистого эдита,вот при запуске пишу допустим 1 фамилию,он все хорошо сортирует но стоит стереть и другую начать писать та же ошибка вылазит
Delphi
1
2
3
4
5
6
7
8
procedure TForm4.Edit1Change(Sender: TObject);
begin
if  Length(Edit1.Text)>0  then
Form2.MainTable.Filtered:=true
else
Form2.MainTable.Filtered:=false;
Form2.MainTable.Filter:='Фамилия LIKE '''+Edit1.Text+'%''';
end;
0
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
03.05.2017, 01:57
Лучший ответ Сообщение было отмечено Neoniche как решение

Решение

ну не знаю, у меня в таком виде ошибок не выдает
Delphi
1
2
3
4
5
6
7
8
procedure TForm4.Edit2Change(Sender: TObject);
begin
  Form2.MainTable.Filtered := false;
  if Edit1.Text <> ''  then begin
    Form2.MainTable.Filter := 'Фамилия LIKE '''+Edit1.Text+'%''';
    Form2.MainTable.Filtered := true;
  end;
end;
1
0 / 0 / 0
Регистрация: 09.04.2017
Сообщений: 9
03.05.2017, 02:09  [ТС]
Фуух все работает!!! Спасибо вам за такую длительную и оперативную поддержку! Только вот еще вопросик:как можно в этом же эдите допустим одновременно с фамилией и поиск имени обработать?
0
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
03.05.2017, 02:31
Цитата Сообщение от Neoniche Посмотреть сообщение
в этом же эдите допустим
а имя в отдельном поле? зачем тогда на эдитах экономить?

Добавлено через 1 минуту
или бы будете искать ИЛИ по имени ИЛИ по фамилии, но в одном едите? И при поиске по Иван вам всё равно Ивановы там по фамилии или Иваны по имени?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.05.2017, 02:31
Помогаю со студенческими работами здесь

Работа с компонентом Tmemo.(Delphi)
Здрасте. При написании программы возникла небольшая проблема. На форме есть 2 компонента мемо, в первом из которых есть текст в виде...

Работа с компонентом Delphi - Web-browser
Кто знает как можно вывести текст из документа (Microsoft_word.htm) в web-browser

Как в Delphi работать к компонентом TrayIcon
Подскажите код, который сворачивает программу в трей, при работе с компонентом TrayIcon.

Создание двумерных массивов в Delphi с компонентом StringGrid
Всем доброго времени суток! Необходима помощь. Мне нужно понять, как отображается(копируется) один массив в другой. А иначе задания по...

Filter TADOTable
Народ подскажите как решить задачу! Мне надо установить значение фильтра равное выражению: TADOTable.Filter:='(СтолбецА=true) and...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru