Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Определить Наличие строки  [new]
2icER
Member

Откуда:
Сообщений: 8
Есть код. Задача:
При нажатии на клавишу (Button6) программа считывает строчку с минимальным столбцом Nomber.
Но если строчек НЕТ, то выдать сообщение "в очереди нет людей",
Если строки есть, то "в очереди есть люди" и выбрать эту строку.

Пробовал использовать VarIsNull( не стал использовать COUNT, т.к. в некоторые моменты работы программы- строк может быть более 1000, а т.к. запросы могут делаться раз в минуту, что замедлит работу).


Теперь проблемы - ошибки:
1) всегда not VarIsNull равно TRUE
2) ошибка синтаксиса в выражении запроса

3) Если активируем строку
fie:= Fields[0].value;
showmessage(fie);
то ошибка 'argument of range'

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

procedure TForm1.Button6Click(Sender: TObject);
Var
indexname: integer;
fie: string;
i:integer;
begin   //---------------------1

 with  ADOquery1 do
    begin      //---------------2
    i:=0;
close;
SQL.clear;
if  (not VarIsNull(SQL.Add('select * from Tab where Nomber in (select min(Nomber) from Tab)')))then
begin  //--------------------3
    ShowMessage('В очереди есть люди');
  SQL.Add('select * from Tab where Nomber in (select min(Nomber) from Tab)');

  //fie:= Fields[0].value;
 // showmessage(fie);
 open();
end;  //---------------------------3
  if VarIsNull(SQL.Add('select * from Tab where Nomber in (select min(Nomber) from Tab)')) then
begin  //------------4
ShowMessage('В очереди нет людей');
open();
end; //--------------4
    end;  //----------------2
end;  //---------------1
8 июл 14, 10:05    [16273266]     Ответить | Цитировать Сообщить модератору
 Re: Определить Наличие строки  [new]
Glory
Member

Откуда:
Сообщений: 104760
А Microsoft SQL server тут причем ?
8 июл 14, 10:09    [16273282]     Ответить | Цитировать Сообщить модератору
 Re: Определить Наличие строки  [new]
2icER
Member

Откуда:
Сообщений: 8
Делаем запрос к БД SQL
8 июл 14, 10:09    [16273291]     Ответить | Цитировать Сообщить модератору
 Re: Определить Наличие строки  [new]
2icER
Member

Откуда:
Сообщений: 8
Glory,

Наверное не правильно понял и ошибся с разделом. Можно перенести?
8 июл 14, 10:11    [16273299]     Ответить | Цитировать Сообщить модератору
 Re: Определить Наличие строки  [new]
Glory
Member

Откуда:
Сообщений: 104760
2icER
Делаем запрос к БД SQL

И какую _серверную_ ошибку вы получаете ?
Или что не получается сделать _на сервере_ ?
8 июл 14, 10:11    [16273301]     Ответить | Цитировать Сообщить модератору
 Re: Определить Наличие строки  [new]
_djХомяГ
Guest
Ну если MS SQL то используйте конструкцию exists которая поможет определить наличие хотя бы одного условия
8 июл 14, 10:12    [16273312]     Ответить | Цитировать Сообщить модератору
 Re: Определить Наличие строки  [new]
Glory
Member

Откуда:
Сообщений: 104760
select * from Tab where Nomber in (select min(Nomber) from Tab)
Интересный способ проверки наличия записей в таблице
Или это проверка на наличие не-NULL записей по полю Nomber ?
8 июл 14, 10:14    [16273329]     Ответить | Цитировать Сообщить модератору
 Re: Определить Наличие строки  [new]
2icER
Member

Откуда:
Сообщений: 8
_djХомяГ
Ну если MS SQL то используйте конструкцию exists которая поможет определить наличие хотя бы одного условия


Можно пример привести, что бы можно было ориентирвоаться
8 июл 14, 10:17    [16273346]     Ответить | Цитировать Сообщить модератору
 Re: Определить Наличие строки  [new]
2icER
Member

Откуда:
Сообщений: 8
Glory
select * from Tab where Nomber in (select min(Nomber) from Tab)
Интересный способ проверки наличия записей в таблице
Или это проверка на наличие не-NULL записей по полю Nomber ?


Сам запрос выбираем строку с мин. числом в НОМБЕРЕ.
а вот попытка сделать связку с VarIsNull это как раз на проверку есть ли вообще хоть одна строчка
8 июл 14, 10:19    [16273358]     Ответить | Цитировать Сообщить модератору
 Re: Определить Наличие строки  [new]
Glory
Member

Откуда:
Сообщений: 104760
2icER
Сам запрос выбираем строку с мин. числом в НОМБЕРЕ.

select top 1 * from Tab order by Nomber
8 июл 14, 10:22    [16273383]     Ответить | Цитировать Сообщить модератору
 Re: Определить Наличие строки  [new]
2icER
Member

Откуда:
Сообщений: 8
Glory
2icER
Сам запрос выбираем строку с мин. числом в НОМБЕРЕ.

select top 1 * from Tab order by Nomber


попробуйте сделать тоже самое ЕСЛИ в базе нет ни одной записи
8 июл 14, 10:24    [16273389]     Ответить | Цитировать Сообщить модератору
 Re: Определить Наличие строки  [new]
2icER
Member

Откуда:
Сообщений: 8
_djХомяГ
Ну если MS SQL то используйте конструкцию exists которая поможет определить наличие хотя бы одного условия

I: integer

...

i:=SQL.Add('select * from Tab where not exist Nomber in (select min(Nomber) from Tab)')
if i=1  - ничего нет
if i=0  - есть записть


ТАК?
8 июл 14, 10:26    [16273406]     Ответить | Цитировать Сообщить модератору
 Re: Определить Наличие строки  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
2icER
Glory
пропущено...

select top 1 * from Tab order by Nomber


попробуйте сделать тоже самое ЕСЛИ в базе нет ни одной записи
Что Вы называете "базой"?
8 июл 14, 10:27    [16273412]     Ответить | Цитировать Сообщить модератору
 Re: Определить Наличие строки  [new]
Glory
Member

Откуда:
Сообщений: 104760
2icER
попробуйте сделать тоже самое ЕСЛИ в базе нет ни одной записи

И что будет ?
Чем страшен пустой набор ?
Тем, что вы не знаете, как в своем определить, что запрос не вернул ни одной записи ?
8 июл 14, 10:28    [16273420]     Ответить | Цитировать Сообщить модератору
 Re: Определить Наличие строки  [new]
Glory
Member

Откуда:
Сообщений: 104760
2icER
ТАК?

Как работать с результатами запросов в вашем языке программирования, узнавайте из документации или на форуме по вашему языку
8 июл 14, 10:29    [16273431]     Ответить | Цитировать Сообщить модератору
 Re: Определить Наличие строки  [new]
2icER
Member

Откуда:
Сообщений: 8
Glory
2icER
Сам запрос выбираем строку с мин. числом в НОМБЕРЕ.

select top 1 * from Tab order by Nomber


решилось

with ADOquery1 do
  begin
    SQL.Text := 'select top 1 * from Tab order by Nomber';
    Open;
    if RecordCount > 0 then
    begin
      ShowMessage('В очереди есть люди');
      fie:= Fields[1].value;
      showmessage(fie);
    end else
      ShowMessage('В очереди нет людей');
  end;


все. спасибо
8 июл 14, 10:29    [16273436]     Ответить | Цитировать Сообщить модератору
 Re: Определить Наличие строки  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
2icER
Glory
пропущено...

select top 1 * from Tab order by Nomber


решилось

with ADOquery1 do
  begin
    SQL.Text := 'select top 1 * from Tab order by Nomber';
    Open;
    if RecordCount > 0 then
    begin
      ShowMessage('В очереди есть люди');
      fie:= Fields[1].value;
      showmessage(fie);
    end else
      ShowMessage('В очереди нет людей');
  end;



все. спасибо
Зачем выбирать на клиента все колонки, если ни одна из них не нужна?
SELECT TOP(1) 0 AS F FROM [Tab] ORDER BY Nomber
или ещё лучше
SELECT 0 AS F WHERE EXISTS(SELECT * FROM [Tab]);
8 июл 14, 11:08    [16273748]     Ответить | Цитировать Сообщить модератору
 Re: Определить Наличие строки  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
ORDER там зачем, стесняюсь спросить? Зачем делать сортировку таблицы лишь для определения наличия записей?
8 июл 14, 11:23    [16273848]     Ответить | Цитировать Сообщить модератору
 Re: Определить Наличие строки  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
Владислав Колосов
ORDER там зачем, стесняюсь спросить? Зачем делать сортировку таблицы лишь для определения наличия записей?
Вообще-то, он какое-то неизвестное второе поле из звёздочки передаёт в ShowMessage()...
Тоже смешно, впрочем.
8 июл 14, 11:41    [16274016]     Ответить | Цитировать Сообщить модератору
 Re: Определить Наличие строки  [new]
Arm79
Member

Откуда: МО, Раменское
Сообщений: 3692
iap
Владислав Колосов
ORDER там зачем, стесняюсь спросить? Зачем делать сортировку таблицы лишь для определения наличия записей?
Вообще-то, он какое-то неизвестное второе поле из звёздочки передаёт в ShowMessage()...
Тоже смешно, впрочем.


Да и Nomber впечатляет. То ли это номер, то ли Number...
8 июл 14, 16:30    [16276437]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить