Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.10.2008, 17:13
Slava08707 Slava08707 вне форума
Прохожий
 
Регистрация: 08.10.2008
Сообщения: 3
Репутация: 10
По умолчанию Delphi7 поиск и печать БД(help me)

Всем здрасте, плз помогите мне сделать нормальную бд, основа есть
(на форме - ClientDataSet1, DataSource1, DBGrid1, DBNavigator1, PrintDBGrid1)

все соединено, все работает, а теперь у меня стоит вопрос как сделать печать и поиск??

этот компонент PrintDBGrid1 этот компонент обрезает часть данных когда выходит на печать( а по идеи должен их маштабировать)

а вот как сделать поиск(поDBGrid1) я не знаю, вот например я создаю Edit и Button а что там писать???

использую .xml
Ответить с цитированием
  #2  
Старый 08.10.2008, 18:05
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,088
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

поиск производится в 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  
Старый 08.10.2008, 19:50
Slava08707 Slava08707 вне форума
Прохожий
 
Регистрация: 08.10.2008
Сообщения: 3
Репутация: 10
По умолчанию s

http://depositfiles.com/files/8582526

помоги плз вот моя бд, можешь сделать печать и поиск а я код буду разберать
Ответить с цитированием
  #4  
Старый 08.10.2008, 20:31
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,088
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Я же тебе код поиска написал. Я ж не знаю конкретные твои условия для поиска. Шаблон дан. Дальше разбираешь его и дотачиваешь под свои требования. Да и этот твой печататель у меня, естественно, не стоит.
Ответить с цитированием
  #5  
Старый 10.10.2008, 19:40
Slava08707 Slava08707 вне форума
Прохожий
 
Регистрация: 08.10.2008
Сообщения: 3
Репутация: 10
По умолчанию dsa

Можно пожалуйста поподробнее и о поиске и о печати
Ответить с цитированием
  #6  
Старый 10.10.2008, 19:54
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,088
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну куда подробнее-то?
Поиск заключается в том, что ты проверяешь данные на наличие некоторого шаблона, указанного пользователем. Т.е. пользователь вводит некоторый шаблон, а механизм поиска проходит по всем данным и пытается определить, соответсвуют данные этому шаблону или нет.

Естественно, рассматривается клиентский поиск. С поиском с помощью запросов (фактически, тут уже речь идет о фильтрации данных) ситуация в принцпе похожа, но там всю работу выполняет сервер БД, а тебе надо просто построить грамотный запрос.

Теперь возвращаемся к нашему случаю.
у тебя есть нетоторый источник данных (TTable, TQuery, TADOQuery и т.д., DataSet, короче), в котором открыт некоторый набор записей. В общем случае тебе надо перебрать все записи и все поля в каждой записи в поисках совпадения с введенным пользователем шаблоном.
Реализуется это, как не трудно догадаться, с помощью вложенных циклов. Внешний цикл перебирает записи, внутренний - поля. Т.к. в Дельфи нет итераторов и им подобных конструкций (для особо умных: я знаю, что их вполне можно реализовать своими силами или скачать готовые, однако стрелять из пушки по воробъям не стоит, не та задача), то внешний цикл реализуется в виде цикла While, внутренний - For (учитывая конструктивные особенности соответсвующих классов). почему не наоборот? Так получается быстрее. поверь на слово.
Внутри циклов идет собственно выяснение совпадения с шаблоном пользователя. Если совпадение обнаружено (в данном примере регистрозависимое вхождение подстроки), то перебор прекращается. Хитрая конструкция с флагом и двумя break'ами предназначена для корректного выхода из циклов. Все.

по поводу печати - берешь репортер, берешь книжку и читаешь и пробуешь.
Ответить с цитированием
  #7  
Старый 10.10.2008, 19:57
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,088
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

ЗЫ. Никто за тебя тут твою работу делать не будет (по крайней мере, "за так"). Вот дать совет, объяснить что-нить - это всегда пожалуйста. Но будьте добры поработать и своей головой.

Если ты готов платить деньги за то, что бы за тебя делали твою работу (учебные задания по школе/институту тоже считаются, бо как в данном случае учеба - это твоя работа), то это будет другой разговор и не здесь, а в привате.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:58.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025