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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.04.2016, 10:41   #21
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

xxbesoxx, сарказм не помешает научиться понимать и злиться не надо - нервные клетки не восстанавливаются. На счет уважения - самому не помешает чуть прибавить
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 18.04.2016, 10:50   #22
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Аватар Я перед вамы извиняюсь что не выдержал всё я спакойно .
xxbesoxx вне форума Ответить с цитированием
Старый 19.04.2016, 00:09   #23
x_X-x3
Пользователь
 
Регистрация: 25.05.2013
Сообщений: 14
По умолчанию

Цитата:
Сообщение от xxbesoxx Посмотреть сообщение
советую параметризированный запрос .! смотрите на эту тему http://programmersforum.ru/showthread.php?t=277392
Если я правильно понял,ток код должен иметь такой вид?
Код:
procedure TForm5.Button3Click(Sender: TObject);
begin
  with ADOQuery1 do
  begin
 SQL.Text := 'Select Код, Код оборудования для ПТ, Оборудование, Наименование , Назначение, Габариты,Масса,Температура срабатывания,Площадь действия,Цена'+ ' from Водяное пожаротушение where 1=1 ';
    if Edit5.Text<>'' then
    begin
     ADOQuery1.SQL.Append('and Температура срабатывания=:'+ Edit5.Name) ;
     Parameters.ParamByName(Edit5.Name).Value:=Trim(Edit5.Text);
    end;
end;
end;
x_X-x3 вне форума Ответить с цитированием
Старый 19.04.2016, 09:31   #24
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Если я правильно понял,ток код должен иметь такой вид?
А зачем так сложно? Edit5.Name содержит имя контрола, там "Edit5", так почему бы его прямо и не указать?!
Или дать параметру "говорящее" имя, например:
Код:
     ADOQuery1.SQL.Append('and Температура срабатывания=:temperature_start') ;
     Parameters.ParamByName('temperature_start').Value:=Trim(Edit5.Text);
и ещё большая ошибка - в именах полей пробелы не допускаются.
А если Вы их используете, нужно такие имена экранировать.
Это зависит от СУБД. В MS Access и MS SQL для этого используются квадратные скобки ([Температура срабатывания]=)
в MySQL обратные кавычки ( `Температура срабатывания` ) и т.д.

ну и ещё. Если у Вас поле "Температура срабатывания" числовое, то и передаваемый параметр должен быть числовым:
Код:
     Parameters.ParamByName('temperature_start').Value:=StrToInt(Trim(Edit5.Text));
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.05.2016, 17:04   #25
x_X-x3
Пользователь
 
Регистрация: 25.05.2013
Сообщений: 14
По умолчанию

Снова здравствуйте.Опять я с этим поиском вожусь.Нужно сделать поиск по 2 критериям,вот пример кода
Код:
procedure TForm5.Button3Click(Sender: TObject);
 begin

  with ADOQuery1 do
  begin
   SQL.Add('SELECT * FROM [Водяное пожаротушение]');
   SQL.Clear;

   if Trim(Edit4.Text)<>'' then
    begin

    SQL.Append('SELECT * FROM [Водяное пожаротушение] '+
            'WHERE [Температура срабатывания] >= :temp ');
    Parameters.ParamByName('temp').Value := StrToInt(Trim(Edit4.Text));
     end;

      if Trim(Edit3.Text)<>'' then
    begin
     SQL.Append('SELECT * FROM [Водяное пожаротушение] '+
            'WHERE [Площадь действия] >= :plosh ');
    Parameters.ParamByName('plosh').Value := StrToInt(Trim(Edit3.Text));
    end;
    Open;
  end;
  end;
Простите за мою тупость...но ни как не могу допереть в чем проблема.
Вылезает ошибка "" 'Ошибка синтаксиса в выражении запроса [Температура срабатывания] >= ?
SELECT * FROM [Водяное пожаротушение] '+
'WHERE [Площадь действия] >=? ""
x_X-x3 вне форума Ответить с цитированием
Старый 04.05.2016, 17:31   #26
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

так нельзя делать. SQL.Append дописывает строки к уже имеющимся.
Вы бы перед Open вывели куда-нибудь (в Memo, например), содержимое SQL.Text и увидели, что там невалидный запрос!

я бы рекомендовал примерно такой вариант:

Код:

  with ADOQuery1 do
  begin
   Close;
   SQL.Clear;

   SQL.Add('SELECT * FROM [Водяное пожаротушение] WHERE 1=1');

   if Trim(Edit4.Text)<>'' then
    begin
       SQL.Append(' and [Температура срабатывания] >= :temp ');
       Parameters.ParamByName('temp').Value := StrToInt(Trim(Edit4.Text));
     end;

   if Trim(Edit3.Text)<>'' then
    begin
       SQL.Append(' and [Площадь действия] >= :plosh ');
       Parameters.ParamByName('plosh').Value := StrToInt(Trim(Edit3.Text));
    end;

    Open;
  end;

Последний раз редактировалось Serge_Bliznykov; 04.05.2016 в 17:34.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.05.2016, 17:46   #27
x_X-x3
Пользователь
 
Регистрация: 25.05.2013
Сообщений: 14
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
так нельзя делать. SQL.Append дописывает строки к уже имеющимся.
Вы бы перед Open вывели куда-нибудь (в Memo, например), содержимое SQL.Text и увидели, что там невалидный запрос!

я бы рекомендовал примерно такой вариант:

Код:

  with ADOQuery1 do
  begin
   Close;
   SQL.Clear;

   SQL.Add('SELECT * FROM [Водяное пожаротушение] WHERE 1=1');

   if Trim(Edit4.Text)<>'' then
    begin
       SQL.Append(' and [Температура срабатывания] >= :temp ');
       Parameters.ParamByName('temp').Value := StrToInt(Trim(Edit4.Text));
     end;

   if Trim(Edit3.Text)<>'' then
    begin
       SQL.Append(' and [Площадь действия] >= :plosh ');
       Parameters.ParamByName('plosh').Value := StrToInt(Trim(Edit3.Text));
    end;

    Open;
  end;
Огромное вам спасибо,все отлично работает!
x_X-x3 вне форума Ответить с цитированием
Старый 04.05.2016, 17:51   #28
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Всегда пожалуйста!

рекомендую ещё добавить проверки на то, что в Edit3 и Edit4 находится именно целочисленное значение, иначе на StrToInt() выскочит неприятный Exception "xxxx is not valid integer value"...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с SQL-запросом julia9311 Microsoft Office Access 3 10.12.2012 02:27
Проблема с SQL запросом Alexsandr БД в Delphi 7 06.07.2011 12:32
Проблема с SQL-запросом stscolt БД в Delphi 5 19.02.2010 16:47
Проблема с SQL запросом Bilargo БД в Delphi 4 27.11.2009 19:10
Проблема с SQL Запросом Worms БД в Delphi 7 13.01.2008 23:09