![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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
|
|||
|
|||
|
ЗЫ. Никто за тебя тут твою работу делать не будет (по крайней мере, "за так"). Вот дать совет, объяснить что-нить - это всегда пожалуйста. Но будьте добры поработать и своей головой.
Если ты готов платить деньги за то, что бы за тебя делали твою работу (учебные задания по школе/институту тоже считаются, бо как в данном случае учеба - это твоя работа), то это будет другой разговор и не здесь, а в привате. |