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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2010, 13:39   #1
Makoto2005
Новичок
Джуниор
 
Регистрация: 01.06.2010
Сообщений: 3
Восклицание Выборка данных в БД (ADO)

При кликаньи на кнопку "Найти" ничего не происходит.
Помогите найти ошибки.
вот код кнопки:
Код:
procedure TfrmComp.btnSearchClick(Sender: TObject; idx, id: longint);
var
  S:string;         // текст критерия сортировки или фильтрации
  krit:string;
begin
edtSearch.Visible:=False;
lblSearch.Visible:=False;
btnSearch.Visible:=False;
btnReport.Visible:=True;
lblReport.Visible:=True;
case filtr of
   1: begin
       krit:=edtSearch.Text;
       S:='PERFORMERS.PF_NAME=[krit]';
     end;
   2: begin
       krit:=edtSearch.Text;
       S:='AND COMPOSERS.CM_NAME=[krit]';
     end;
   3: begin
       krit:=edtSearch.Text;
       S:='AND AUTHORS.AT_NAME=[krit]';
      end;
   4: begin
       krit:=edtSearch.Text;
       S:='AND ACCOMP.AC_NAME=[krit]';
      end;
end;
   if S<>'' then

begin

        SQL_Text:='SELECT * FROM COMPOSITIONS INNER JOIN (%s INNER JOIN COMP_%s ON %s.%s_ID=COMP_%s.%s_%s_FK) ON COMPOSITIONS.CP_ID=COMP_%s.%s_COMP_%s';
        SQL_Text:=SQL_Text+S;
        dmFond.qryGetCompositions.Active:=False;
        dmFond.qryGetCompositions.SQL.Clear;
        dmFond.qryGetCompositions.SQL.Add(SQL_Text);
        dmFond.qryGetCompositions.Parameters[0].Value:=krit;
        dmFond.qryGetCompositions.Active:=true;
     end
end;
Makoto2005 вне форума Ответить с цитированием
Старый 01.06.2010, 15:33   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

везде, где присваивается S, написать так:
Код:
S:='PERFORMERS.PF_NAME='+QoutedStr(edtSearch.Text);
...
S:='AND COMPOSERS.CM_NAME='+QoutedStr(edtSearch.Text);
ну и т.д..
это
dmFond.qryGetCompositions.Parameter s[0].Value:=krit;
выкинуть!


Цитата:
Код:
(%s INNER JOIN COMP_%s ON %s.%s
никогда не сталкивался с такой записью! А что такое %s в данном случае?!!

Последний раз редактировалось Serge_Bliznykov; 01.06.2010 в 15:35.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.06.2010, 15:42   #3
Makoto2005
Новичок
Джуниор
 
Регистрация: 01.06.2010
Сообщений: 3
По умолчанию

У меня таблицы создаются при помощи массива..
%s - для подстановки туда разных значений, чтобы каждый раз этот запрос был для разных таблиц..
вот что-то такое...

Делала свой код по вот такому образцу...
Код:
// кнопка "Найти" для фильтрации данных
procedure TForm6.BitBtn3Click(Sender: TObject);
begin
case filtr of
  1: begin
       DataModule1.ADOTable5.Filtered:=True;
       DataModule1.ADOTable5.Filter:='Дата='+MaskEdit1.Text;
     end;
   2: begin
       if (MaskEdit1.Text=MaskEdit1.EditMask) or (MaskEdit2.Text=MaskEdit2.EditMask) then
         begin
           Application.MessageBox(PChar('Не все даты введены'),'Ошибка!',MB_OK);
           exit
         end;
       DataModule1.ADOTable5.Filtered:=True;
       DataModule1.ADOTable5.Filter:='Дата>='+MaskEdit1.Text+' AND Дата<='+MaskEdit2.Text;
     end;
   3: begin
       krit:=MaskEdit1.Text;
       S:='AND Заказчики.Наименование=[krit]';
      end;
   4: begin
       krit:=MaskEdit1.Text;
       S:='AND Услуги.Наименование=[krit]';
      end;
    5: begin
       DataModule1.ADOTable5.Filtered:=True;
       DataModule1.ADOTable5.Filter:='Ставка_НДС='+MaskEdit1.Text;
      end;
end;
   if S<>'' then
     begin
       Form6.DBGrid1.DataSource:=DataModule1.DataSource7;
       DataModule1.DataSource7.DataSet:=DataModule1.ADOQuery2;

       SQL_Text:='SELECT * FROM Заказы_на_услуги, Заказчики, Услуги ';
       SQL_Text:=SQL_Text+'WHERE Заказы_на_услуги.Код_заказчика=Заказчики.Код_заказчика ';
       SQL_Text:=SQL_Text+'AND Заказы_на_услуги.Код_услуги=Услуги.Код_услуги ';
       SQL_Text:=SQL_Text+S;

       DataModule1.ADOQuery2.Close;
       DataModule1.ADOQuery2.SQL.Clear;
       DataModule1.ADOQuery2.SQL.Add(SQL_Text);
       DataModule1.ADOQuery2.Parameters[0].Value:=krit;
       DataModule1.ADOQuery2.Open
     end
end;

Последний раз редактировалось Stilet; 01.06.2010 в 16:37.
Makoto2005 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выборка данных в БД (ADO) Makoto2005 БД в Delphi 0 01.06.2010 13:38
Выборка данных segail Microsoft Office Excel 4 08.02.2010 16:37
Выборка данных ADRENALIN86 Microsoft Office Excel 1 13.08.2009 15:51
ADO, выборка из таблицы. Roof БД в Delphi 2 09.07.2008 18:51
Выборка данных из StringGrid quqer БД в Delphi 1 14.03.2008 12:56