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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.08.2015, 04:50   #1
ТипичныйСтудент
Форумчанин
 
Аватар для ТипичныйСтудент
 
Регистрация: 09.04.2013
Сообщений: 110
Вопрос причуды запроса sql

Я понимаю, что вопрос самый тупой и, что стыдно такое спрашивать, но уж реально едет крыша.

почему это работает
Код:
procedure TForm7.SpeedButton2Click(Sender: TObject);
begin
ADODataSet1.Close;
ADODataSet1.CommandText := 'select * from napravlenie where stat = ''k'' ';
ADODataSet1.Open;
end;
а вот это нет
Код:
procedure TForm7.SpeedButton1Click(Sender: TObject);
begin
ADODataSet1.Close;
ADODataSet1.CommandText := 'select * from napravlenie where stat <> ''k'' ';
ADODataSet1.Open;
end;
выводит пустую таблицу, не одной строчки, хотя в базе записи есть и в отладчике видно, что он заходит внутрь и присваивает этот запрос.
что это может быть вообще?
бд ms access
Есть задача - реши ее!
ТипичныйСтудент вне форума Ответить с цитированием
Старый 18.08.2015, 08:44   #2
GreenWizard
мальчик-помогай =)
Форумчанин
 
Регистрация: 16.09.2010
Сообщений: 522
По умолчанию

http://stackoverflow.com/questions/1...does-not-equal
Код:
ADODataSet1.CommandText := 'select * from napravlenie where NOT (stat = ''k'') ';
нету слова "назад", есть только "развернуться и вперёд, вперёд, вперёд!" :-)
GreenWizard вне форума Ответить с цитированием
Старый 18.08.2015, 08:56   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Может лучше так:
Цитата:
ADODataSet1.CommandText := 'select * from napravlenie where stat <> '+QuotedStr('k');
?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.08.2015, 09:04   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Там NULL скорее всего, вот и не показывает. Так как GreenWizard подсказывает будет норм. Или IsNull использовать (или аналог)
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 18.08.2015 в 09:08.
Аватар вне форума Ответить с цитированием
Старый 18.08.2015, 09:55   #5
ТипичныйСтудент
Форумчанин
 
Аватар для ТипичныйСтудент
 
Регистрация: 09.04.2013
Сообщений: 110
По умолчанию

спасибо! помогли! извратилась вот так:
Код:
procedure TForm7.FormCreate(Sender: TObject);
begin
  ADODataSet1.Close;
  ADODataSet1.CommandText := 'select * from Napravlenie';
  ADODataSet1.Open;

  begin
    if not ADODataSet1.IsEmpty then   //если не пустой
      begin
        ADODataSet1.First;          //ставим на первую
        while not ADODataSet1.Eof do  //до конца
         begin
           if ADODataSet1.FieldByName('stat').IsNull then
           begin
             ADODataSet1.Edit;
             ADODataSet1.FieldByName('stat').Value := '';
             ADODataSet1.Post;
           end;
           ADODataSet1.Next;
         end;
      end;
  end;


  ADODataSet1.Close;
  ADODataSet1.CommandText := 'select * from Napravlenie';
  ADODataSet1.Open;

  ADODataSet2.Active := True;
  ADODataSet3.Active := True;
end;
Код:
procedure TForm7.SpeedButton1Click(Sender: TObject);
begin
  ADODataSet1.Close;
  ADODataSet1.CommandText := 'select * from napravlenie where NOT (stat = ''k'') ';
  ADODataSet1.Open;
end;
Есть задача - реши ее!
ТипичныйСтудент вне форума Ответить с цитированием
Старый 18.08.2015, 10:02   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Если в stat NULL, то stat = 'k' будет False и NOT (stat = 'k') прокатит. Так что нет ни какой необходимости NULL забивать на ''
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 18.08.2015, 10:11   #7
GreenWizard
мальчик-помогай =)
Форумчанин
 
Регистрация: 16.09.2010
Сообщений: 522
По умолчанию

Код:
  ADODataSet1.Close;
  ADODataSet1.CommandText := 'select * from Napravlenie';
  ADODataSet1.Open;

  begin
    if not ADODataSet1.IsEmpty then   //если не пустой
      begin
        ADODataSet1.First;          //ставим на первую
        while not ADODataSet1.Eof do  //до конца
         begin
           if ADODataSet1.FieldByName('stat').IsNull then
           begin
             ADODataSet1.Edit;
             ADODataSet1.FieldByName('stat').Value := '';
             ADODataSet1.Post;
           end;
           ADODataSet1.Next;
         end;
      end;
  end;
мне страшно))
как минимум, можно заменить на запрос:
Код:
UPDATE Napravlenie SET stat = '' WHERE stat IS NULL
а вообще, выше написал же как сделать запрос без этих костылей
GreenWizard вне форума Ответить с цитированием
Старый 18.08.2015, 20:31   #8
ТипичныйСтудент
Форумчанин
 
Аватар для ТипичныйСтудент
 
Регистрация: 09.04.2013
Сообщений: 110
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Если в stat NULL, то stat = 'k' будет False и NOT (stat = 'k') прокатит. Так что нет ни какой необходимости NULL забивать на ''
неа, не прокатывает, попробовала - не сработало, поэтому и нагородила вышенаписанное. Может это какие-то заморочки именно акцесса?

Цитата:
Сообщение от GreenWizard Посмотреть сообщение
Код:
  ADODataSet1.Close;
  ADODataSet1.CommandText := 'select * from Napravlenie';
  ADODataSet1.Open;

  begin
    if not ADODataSet1.IsEmpty then   //если не пустой
      begin
        ADODataSet1.First;          //ставим на первую
        while not ADODataSet1.Eof do  //до конца
         begin
           if ADODataSet1.FieldByName('stat').IsNull then
           begin
             ADODataSet1.Edit;
             ADODataSet1.FieldByName('stat').Value := '';
             ADODataSet1.Post;
           end;
           ADODataSet1.Next;
         end;
      end;
  end;
мне страшно))
как минимум, можно заменить на запрос:
Код:
UPDATE Napravlenie SET stat = '' WHERE stat IS NULL
а вообще, выше написал же как сделать запрос без этих костылей
а вот это вот мне нравится) спасибо!
Есть задача - реши ее!

Последний раз редактировалось Stilet; 18.08.2015 в 21:31.
ТипичныйСтудент вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Adocommand, его причуды VladikBD БД в Delphi 4 21.03.2013 16:39
Причуды восприятия (94НН03 С006Щ3НN3) EUGY Свободное общение 7 04.03.2012 23:02
Удаление строки с помощью SQL запроса (Query1.SQL.ADD('Delete....')) Schutze Помощь студентам 6 29.11.2009 22:15