Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.04.2014, 22:20   #1
User_IR_An
Пользователь
 
Регистрация: 08.04.2014
Сообщений: 26
По умолчанию ADO, записи в таблицу

Помогите, пожалуйста, начинающей.
Проблема, заключается в следующем:
На форме есть dbcombobox, в нем находятся учебные года, например, 2013/2014, так вот нужно вывести в DBGRID все группы которые учатся в этом году, вот примерно как я реализовываю, но не могу вывести именно строку, которая удовлетворяют условию.
Код:
 with ADOQuery_gr do
         begin
          open;
              while not EOF do
              begin
                 g_p:=StrToInt(AdoQuery_gr.FieldByName('Год приема').AsString); // сюда заносится данные о годе приема
                 g_v:=StrToInt(AdoQuery_gr.FieldByName('Год выпуска').AsString); //сюда заносятся данные о годе выпуска группы
                 S:=DBComboBox_uch.Text; 
                 S1:=copy(S,1,4);  // начало уч.года
                 S2:=copy(S,6,9);  // конец уч.года
                 uch1:=StrToInt(S1);
                 uch2:=StrToInt(S2);
                 if (uch1>=g_p) and (uch1<g_v) and (uch2>g_p) and (uch2<=g_v) {это условие на выборку, подходящих групп}
                 then
                     //Здесь нужно вывести строку, которая соответствует условию

                  Next;
              end;

        end;
User_IR_An вне форума Ответить с цитированием
Старый 09.04.2014, 06:51   #2
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Это лучше делать на стороне базы данных, создав sql-запрос, в котором сразу отфильтруете нужные группы (В большинстве субд есть функция YEAR).
Тогда грид сам заполнится нужными записями (ну, при настройке на отображение этого запроса, ессно).
Либо поставить просто стринггрид и ручками уже в цикле заполнять нужные поля по Вашему методу. Но при этом надо вводить счётчик для строки грида, и при условии что запись не подходит - счётчик не увеличивать и грид не заполнять, а подходит - заполнять, счётчик ессно использовать для адресации строки в TStringGrid.Cells
phomm вне форума Ответить с цитированием
Старый 09.04.2014, 09:58   #3
Konstantin_ua
Не судите строго
Форумчанин
 
Аватар для Konstantin_ua
 
Регистрация: 31.03.2011
Сообщений: 202
По умолчанию

Цитата:
Сообщение от User_IR_An Посмотреть сообщение
Помогите, пожалуйста, начинающей.
Проблема, заключается в следующем:
На форме есть dbcombobox, в нем находятся учебные года, например, 2013/2014, так вот нужно вывести в DBGRID все группы которые учатся в этом году, вот примерно как я реализовываю, но не могу вывести именно строку, которая удовлетворяют условию.
Код:
 with ADOQuery_gr do
         begin
          open;
              while not EOF do
              begin
                 g_p:=StrToInt(AdoQuery_gr.FieldByName('Год приема').AsString); // сюда заносится данные о годе приема
                 g_v:=StrToInt(AdoQuery_gr.FieldByName('Год выпуска').AsString); //сюда заносятся данные о годе выпуска группы
                 S:=DBComboBox_uch.Text; 
                 S1:=copy(S,1,4);  // начало уч.года
                 S2:=copy(S,6,9);  // конец уч.года
                 uch1:=StrToInt(S1);
                 uch2:=StrToInt(S2);
                 if (uch1>=g_p) and (uch1<g_v) and (uch2>g_p) and (uch2<=g_v) {это условие на выборку, подходящих групп}
                 then
                     //Здесь нужно вывести строку, которая соответствует условию

                  Next;
              end;

        end;
Я не профессионал, но думаю как то так
Код:
  S:=DBComboBox_uch.Text; 
 S1:=copy(S,1,4);  // начало уч.года
 S2:=copy(S,6,9);  // конец уч.года
 try
    with ADOQuery_gr do
     begin
		SQL.Clear;     
        SQL.Add('SELECT * FROM Name_Table WHERE (God_vstupa  BETWEEN P1 AND  P2) AND (God_vupuska<=p2 ) AND (God_vupuska>=p1 ) ');
		Parameters.ParamByName('p1').Value:=StrToInt(s1);  
		Parameters.ParamByName('p2').Value:=StrToInt(s2);	
		ExecSQL;

     end;
   finally

   end;
меняешь только Name_Table на имя твоей таблицы и God_vstupa, God_vupuska на имя полей в таблице
Konstantin_ua вне форума Ответить с цитированием
Старый 09.04.2014, 10:28   #4
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Что бы не повторят код ! На все форуме есть примеры! набейте в google Фильтрация по дате delphi надо параметризированны запрос и использовать компонент DateTimePicker1
xxbesoxx вне форума Ответить с цитированием
Старый 09.04.2014, 14:03   #5
User_IR_An
Пользователь
 
Регистрация: 08.04.2014
Сообщений: 26
По умолчанию

Спасибо, все получилось, изменили только содержание запроса.
Код:
SQL.Add('SELECT * FROM Группы WHERE (P1>=Год_приема ) AND (P1<Год_выпуска ) AND (P2>Год_приема ) AND (P2<=Год_выпуска ) ');
User_IR_An вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавление записи в таблицу через таблицу Anton911 БД в Delphi 0 14.05.2012 11:51
ADO: добавление и удаление полей в таблицу grh БД в Delphi 4 21.10.2011 09:50
Не сохраняет данные в таблицу (ADO) alatir БД в Delphi 6 09.06.2010 02:39
ADO.NET: VS 2005 C# + Sql server express: добавление записи в таблицу kostyan23 Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 1 02.03.2010 14:04
Добавление записи в таблицу (ADO) Yura_S БД в Delphi 12 25.11.2009 19:11