![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Всем здрасте, плз помогите мне сделать нормальную бд, основа есть
(на форме - ClientDataSet1, DataSource1, DBGrid1, DBNavigator1, PrintDBGrid1) все соединено, все работает, а теперь у меня стоит вопрос как сделать печать и поиск?? этот компонент PrintDBGrid1 этот компонент обрезает часть данных когда выходит на печать( а по идеи должен их маштабировать) а вот как сделать поиск(поDBGrid1) я не знаю, вот например я создаю Edit и Button а что там писать??? использую .xml |
#2
|
|||
|
|||
![]() поиск производится в ClientDataSet1.
Например шщем вхождение подстроки из Edit1 в любом поле (регистрозависимый): Код:
var I : Integer; F : Boolean; begin F := False; ClientDataSet1.First; // Для поиска с начала. Для поиска с текущей строки надо вызвать метод Next While Not ClientdataSet1.EOF Do Begin For I := 0 To ClientDataSet1.Fields.Count-1 Do Begin F := Pos(Edit1.Text,Fields[i].AsString); // Регистрозависимое сравнение. Для независимости обернуть оба параметра в AnsiUpperCase If F Then Break; End; If F Then Break; ClientDataSet.Next; End; If F Then ShowMessage('Что-то нашли!!!') Else ShowMessage('Нифига не найдено!!!'); end; Печать - лучше использовать какой-нить построитель отчетов (QuickReport, FastReport). |
#3
|
|||
|
|||
![]() http://depositfiles.com/files/8582526
помоги плз вот моя бд, можешь сделать печать и поиск а я код буду разберать |
#4
|
|||
|
|||
![]() Я же тебе код поиска написал. Я ж не знаю конкретные твои условия для поиска. Шаблон дан. Дальше разбираешь его и дотачиваешь под свои требования. Да и этот твой печататель у меня, естественно, не стоит.
|
#5
|
|||
|
|||
![]() Можно пожалуйста поподробнее и о поиске и о печати
|
#6
|
|||
|
|||
![]() Ну куда подробнее-то?
Поиск заключается в том, что ты проверяешь данные на наличие некоторого шаблона, указанного пользователем. Т.е. пользователь вводит некоторый шаблон, а механизм поиска проходит по всем данным и пытается определить, соответсвуют данные этому шаблону или нет. Естественно, рассматривается клиентский поиск. С поиском с помощью запросов (фактически, тут уже речь идет о фильтрации данных) ситуация в принцпе похожа, но там всю работу выполняет сервер БД, а тебе надо просто построить грамотный запрос. Теперь возвращаемся к нашему случаю. у тебя есть нетоторый источник данных (TTable, TQuery, TADOQuery и т.д., DataSet, короче), в котором открыт некоторый набор записей. В общем случае тебе надо перебрать все записи и все поля в каждой записи в поисках совпадения с введенным пользователем шаблоном. Реализуется это, как не трудно догадаться, с помощью вложенных циклов. Внешний цикл перебирает записи, внутренний - поля. Т.к. в Дельфи нет итераторов и им подобных конструкций (для особо умных: я знаю, что их вполне можно реализовать своими силами или скачать готовые, однако стрелять из пушки по воробъям не стоит, не та задача), то внешний цикл реализуется в виде цикла While, внутренний - For (учитывая конструктивные особенности соответсвующих классов). почему не наоборот? Так получается быстрее. поверь на слово. Внутри циклов идет собственно выяснение совпадения с шаблоном пользователя. Если совпадение обнаружено (в данном примере регистрозависимое вхождение подстроки), то перебор прекращается. Хитрая конструкция с флагом и двумя break'ами предназначена для корректного выхода из циклов. Все. по поводу печати - берешь репортер, берешь книжку и читаешь и пробуешь. |
#7
|
|||
|
|||
![]() ЗЫ. Никто за тебя тут твою работу делать не будет (по крайней мере, "за так"). Вот дать совет, объяснить что-нить - это всегда пожалуйста. Но будьте добры поработать и своей головой.
Если ты готов платить деньги за то, что бы за тебя делали твою работу (учебные задания по школе/институту тоже считаются, бо как в данном случае учеба - это твоя работа), то это будет другой разговор и не здесь, а в привате. |