Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 20.11.2013, 11:28
YuliyaKar YuliyaKar вне форума
Прохожий
 
Регистрация: 13.11.2013
Сообщения: 37
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Как узнать нахождится ли значение Edit между значениями столбца таблицы

Здравствуйте!
Подскажите ,пожалуйста, как так сделать!
Я пробовала запросом, но там можно только вписать, что значение с таблицы равно значению Edit/
Есть таблица и в ней столбец значений. Мне нужно узнать между какими двумя значениями столбца находится значение Edit.
в таблице 140 записей, если Edit>первого знаечения, но Edit<второго значения, тогда выбрать первое значение
пишу так
Код:
for i:=1 to 140 do
    if Table7.Locate('KodD', i, []) then
    if (edit6.Text>Table7.FieldByName('Dispt').Value) and
    (edit6.Text<Table7.FieldByName('Dispt').Value[i+1]) then
     edit8.Text:=Table7.FieldByName('DRAFT').Value
  else
    raise Exception.Create('Не найдена нужная запись');

но выбивает что запись не найдена!

Последний раз редактировалось YuliyaKar, 20.11.2013 в 11:31.
Ответить с цитированием
  #2  
Старый 20.11.2013, 14:28
Аватар для Mrak
Mrak Mrak вне форума
Местный
 
Регистрация: 26.01.2013
Адрес: МО
Сообщения: 438
Версия Delphi: XE2
Репутация: 17
По умолчанию

Цитата:
Я пробовала запросом, но там можно только вписать, что значение с таблицы равно значению Edit/

почему же? можно использовать > = < <> <= >=
__________________
Я за здоровый экстрим!
Спасибо за "спасибо")
Ответить с цитированием
  #3  
Старый 20.11.2013, 15:09
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Можно так попробовать:
Код:
Q.SQL.Text := 'select (select max(KodD) from Table1 where KodD < :Value1) Min, (select min(KodD) from Table1 where KodD > :Value2) Max';
Q.Parameters.ParamValues['Value1'] := StrToInt(Edit1.Text);
Q.Parameters.ParamValues['Value2'] := StrToInt(Edit1.Text);
Q.Open;
результат будет лежать в Q['Min'] и Q['Max']
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 20.11.2013 в 15:13.
Ответить с цитированием
  #4  
Старый 20.11.2013, 16:33
YuliyaKar YuliyaKar вне форума
Прохожий
 
Регистрация: 13.11.2013
Сообщения: 37
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Странно, я тоже вроде знаю, что можно, но он мне пишет, что неправильный оператор!
Ответить с цитированием
  #5  
Старый 20.11.2013, 16:44
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от YuliyaKar
Странно, я тоже вроде знаю, что можно, но он мне пишет, что неправильный оператор!
Если база MS Access, то это наверное опять случай с пустым SELECT'ом как в этой теме.
Т.е. Access'у нужно указывать фиктивную непустую таблицу в этом запросе:
Код:
Q.SQL.Text := 'select (select max(KodD) from Table1 where KodD < :Value1) Min, (select min(KodD) from Table1 where KodD > :Value2) Max';

Например из той же самой таблицы вот так:
Код:
Q.SQL.Text := 'select TOP 1 (select max(KodD) from Table1 where KodD < :Value1) Min, (select min(KodD) from Table1 where KodD > :Value2) Max FROM Table1';
Ответить с цитированием
  #6  
Старый 20.11.2013, 16:44
Аватар для Mrak
Mrak Mrak вне форума
Местный
 
Регистрация: 26.01.2013
Адрес: МО
Сообщения: 438
Версия Delphi: XE2
Репутация: 17
По умолчанию

а как делаешь?
__________________
Я за здоровый экстрим!
Спасибо за "спасибо")
Ответить с цитированием
  #7  
Старый 20.11.2013, 16:54
YuliyaKar YuliyaKar вне форума
Прохожий
 
Регистрация: 13.11.2013
Сообщения: 37
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Пишу так:
Код:
Query3.Active:=false;
 query3.SQL.Clear;
 query3.SQl.Text:='select *FROM Stab.DB where Dispt  <= ''' + Edit6.Text + '''';
 query3.ExecSQL; 
Edit8.Text:=Query3.Fields[1].AsString; 
Ответить с цитированием
  #8  
Старый 20.11.2013, 16:55
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от YuliyaKar
Пишу так:
Код:
Query3.Active:=false;
 query3.SQL.Clear;
 query3.SQl.Text:='select *FROM Stab.DB where Dispt  <= ''' + Edit6.Text + '''';
 query3.ExecSQL; 
Edit8.Text:=Query3.Fields[1].AsString; 
Здесь должно быть не "ExecSQL", а "Open"
Ответить с цитированием
  #9  
Старый 20.11.2013, 17:00
Аватар для Mrak
Mrak Mrak вне форума
Местный
 
Регистрация: 26.01.2013
Адрес: МО
Сообщения: 438
Версия Delphi: XE2
Репутация: 17
По умолчанию

Poli-smen опередил))

и от строки
query3.SQL.Clear;
нет толку
__________________
Я за здоровый экстрим!
Спасибо за "спасибо")
Ответить с цитированием
  #10  
Старый 20.11.2013, 17:14
YuliyaKar YuliyaKar вне форума
Прохожий
 
Регистрация: 13.11.2013
Сообщения: 37
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Ладно, пусть так! Но все равно он находит первое наимешьшое значение, которое наименьшое и все - дальше не ищет! Хотя я написала его в событие OnChange другого Edit.
И еще мне надо точно определить,что значение Edit находится между двумя значениями столбца таблицы. А по запросу он выводит только первое попавшееся! Ну сейчас буду пробовать
Ответить с цитированием
  #11  
Старый 20.11.2013, 17:21
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от YuliyaKar
Ладно, пусть так! Но все равно он находит первое наимешьшое значение, которое наименьшое и все - дальше не ищет! Хотя я написала его в событие OnChange другого Edit.
И еще мне надо точно определить,что значение Edit находится между двумя значениями столбца таблицы. А по запросу он выводит только первое попавшееся! Ну сейчас буду пробовать
Скорее всего он выводит не первое попавшееся, а все значения которые меньше чем это записано в "Edit6.Text", просто ты читаешь первое попавшееся.
Попробуй такой запрос:
Код:
query3.SQl.Text:='select *FROM Stab.DB where Dispt  <= ''' + Edit6.Text + ''' ORDER BY Dispt DESC';
Ответить с цитированием
  #12  
Старый 20.11.2013, 17:32
YuliyaKar YuliyaKar вне форума
Прохожий
 
Регистрация: 13.11.2013
Сообщения: 37
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Я тоже так подумала, что по логике, он находит, все что меньше, но выводит только первое.
Попробую так
Ответить с цитированием
  #13  
Старый 20.11.2013, 17:37
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от YuliyaKar
Я тоже так подумала, что по логике, он находит, все что меньше, но выводит только первое.
Попробую так
Где же он выводит первое? Это же ты выводишь только первое значение вот в этой строке:
Код:
Edit8.Text:=Query3.Fields[1].AsString;
Чтобы вывести всё что запрос вернул одной этой строки недостаточно - нужно в цикле пройтись по всей выборке и каждое возвращённое значение прочитать.
Ответить с цитированием
  #14  
Старый 20.11.2013, 17:53
YuliyaKar YuliyaKar вне форума
Прохожий
 
Регистрация: 13.11.2013
Сообщения: 37
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Так они мне вес не нужны! Мне нужно только одно, которое стоит между двумя, которые имеют приближенные значения к значению Edit и взять наименьшое из них двух! ТО еcть определить в какой диапазон попадает значение Edit!
Ответить с цитированием
  #15  
Старый 20.11.2013, 17:54
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Код:
query3.SQl.Text:='select *FROM Stab.DB where Dispt  <= ''' + Edit6.Text + ''' ORDER BY Dispt DESC';
Или я че-то не понимаю или лыжи не едут. Это как же вы таким запросом получите граничные значения? Вы получите так все что меньше или равно критерию. Зачем вы еще и равно делаете, мне неясно. Если у вас не получается вернуть одним запросом сразу границы, то можно и двумя запросами это сделать:
Код:
Q.SQL.Text := 'select max(KodD) as Min from Table1 where KodD < :Value';
Q.Parameters.ParamValues['Value'] := StrToInt(Edit1.Text);
Q.Open;
Min := Q['Min'];
Q.SQL.Text := 'select min(KodD) as Max from Table1 where KodD > :Value';
Q.Parameters.ParamValues['Value'] := StrToInt(Edit1.Text);
Q.Open;
Max := Q['Max'];
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 19:38.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter