Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: Базы данных и репортинг > Поиск по БД через SQL |
Автор: Palladin 20.4.2006, 23:49 | ||||
Вообщем делаю курсач, всё сделано, но одна функция не пашет: короче при нажатии на кнопку "Поиск" появляется новая форма в которой есть dbgrid и 4 edit-a есть возможность искать по одному из полей(это работает ![]() Вот код поиска по одному из полей:
Это работает, а вот при нажатии на кнопку поиск по всем полям что-то не выходит, ошибки пишет ![]() вот то что я написал в коде поиск по всем полям
Помогите здесь подправить ![]() |
Автор: Fast 21.4.2006, 05:53 | ||
Извини придётся всё переделывать ![]() Вот как всё должно быть ![]()
|
Автор: Palladin 21.4.2006, 17:34 |
К сожалению здесь что-то не так, поиск не отображается в dbedite, при нажатии на кнопку поиск по всем полям, весь dbgrid очищается, какбудто конект проподает к adoconnection ![]() |
Автор: sexton 21.4.2006, 18:39 |
Имхо Open, а не ExecSQl... ExecSQL вроде не возвращает курсор для отображения |
Автор: Palladin 21.4.2006, 23:14 |
Нет Open тоже не катит, ошибку выдаёт, ошибка синтаксиса и т.п. ![]() |
Автор: x77 22.4.2006, 01:15 | ||
ну блин.... ну дурные проблемы ведь. гляди. открой пустой проект. кинь на форму обычный Query (в DatabaseName поставь "DBDEMOS"), DataSource, привязанный к этому квери, DBGrid, привязанный к датасорсу, кинь на форму четыре TEdit и одну педаль сиречь TButton. в Query1.SQL напиши 'select * from biolife'. вот код всего проекта:
(1) на самом деле, это сляпано на глазок, и это не лучший способ. лучше, если выставить TEdit'ам свойство Tag равным нужному индексу в массиве полей, и делать перебор всех контролов, проверять, что это едит, брать его тэг, и по тэгу получать имя поля. единственный возможный глюк в этом коде - Багланд умудрились засунуть в таблицу поле с пробелом (!) в его имени. у меня лично не работает фильтр по Species Name, даже по "Sepices Name" не работает, я фиг его знает, как эти дятлы додумались до такого. так делать нельзя никогда ![]() второй момент, у меня используется OR - т.е. если хоть одно из введённых юзверем значений совпадёт с нужным полем - то запись с этим полем отобразиться. но могут быть и другие условия, AND, например ![]() успехов ![]() |
Автор: x77 22.4.2006, 01:33 |
Fast, у тебя всегда прошивается 'where', т.е. если юзверь ничего не выбрал, запрос будет выглядеть как 'select * from ... where' - и он всегда даст ошибку. там нужна проверка. |
Автор: Fast 22.4.2006, 01:59 | ||||
А да что то я не обратив внимание ![]() Щас исправлю ![]() Добавлено @ 02:08 Вот так ![]()
|
Автор: Palladin 24.4.2006, 01:32 |
Блин всёровно не пашет, ошибки за ошибками, весь день убил на это, чёто не выходит, может у когонить есть ссылка на материал по данному поводу |
Автор: Fast 24.4.2006, 01:40 |
А тебе обязательно использовать SQL ? Добавлено @ 01:41 Или скинь сейчас сорцы я посмотрю ![]() |
Автор: TheCetus 24.4.2006, 08:30 |
Fast, в 10-й строке лучше написать следующим образом: mFilter := 'Select * From BOOK Where 1=1 '; тогда если пользователь не введет ни одного условия ошибки вылетать не будет... в твоем же случае запрос примет вид 'Select * From BOOK Where ' , что несомненно приведет к ошибке |
Автор: Fast 24.4.2006, 13:18 | ||||
Я это не просто так написал ![]() |
Автор: Palladin 25.4.2006, 01:26 |
Мне не обязательсно SQL, я пробовал через фильтр, по одному полю ищет прекрасно, а вот когда по нескольким то фигня какаята, нехочет искать, то отобразит не то что нужно, то вообще всё уберёт и т.п. Я готов выслушать любые предложения по поводу поиска ![]() |