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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 29.04.2014, 14:00
Аватар для spawn-1212
spawn-1212 spawn-1212 вне форума
Прохожий
 
Регистрация: 03.12.2012
Сообщения: 25
Репутация: 10
Восклицание Что использовать? подскажи пжл

В программировании новичок.
Попросили написать программу для облегчения другим.
Подключаюсь к БД Oracle через ADOConnection, в DBGrid вывожу список лиц, получивших карточки (ну там организовал поиск). При двойном клике в DBGride по "Человеку", в ListBox подтягивается список, полученных карточек, типо
ААА001-009
БББ010-013
и т.п.
При щелчке по нужной строке, например 1 она раскладывается в Edit1=ААА001 и Edit2=ААА009
Вопрос как организовать или что использовать, чтобы при нажатии на Кнопку1, выполнялся запрос перебрать значения всего диапозона ААА001-009(т.е. ААА001, ААА002, ААА003, ..., ААА009) с колонкой Number, таблицы Lugi.
Я могу проверить только значение Edit1 и Edit2, а как промежуток между ними не знаю, подскажите пожалуйста.
Код:
ADOQuery2.Sql.Text:='Select Number From Lugi Where Number = '+QuotedStr(Edit1.Text)+'';
Ответить с цитированием
  #2  
Старый 29.04.2014, 14:02
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Есть такая штука, как параметры запроса.
Код:
TParam
В запросе
Код:
select * from table where field = :value

Жмём F1, вводим TParam.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


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

Цитата:
Сообщение от spawn-1212
При щелчке по нужной строке, например 1 она раскладывается в Edit1=ААА001 и Edit2=ААА009
Вопрос как организовать или что использовать, чтобы при нажатии на Кнопку1, выполнялся запрос перебрать значения всего диапозона ААА001-009(т.е. ААА001, ААА002, ААА003, ..., ААА009) с колонкой Number, таблицы Lugi.
Я могу проверить только значение Edit1 и Edit2, а как промежуток между ними не знаю, подскажите пожалуйста.
Код:
ADOQuery2.Sql.Text:='Select Number From Lugi Where Number = '+QuotedStr(Edit1.Text)+'';
Примерно как-то так:
Код:
ADOQuery2.Sql.Text := 'Select Number From Lugi Where Number >= ' + QuotedStr(Edit1.Text) + ' and Number <= ' + QuotedStr(Edit2.Text);
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
spawn-1212 (30.04.2014)
  #4  
Старый 30.04.2014, 09:09
Аватар для spawn-1212
spawn-1212 spawn-1212 вне форума
Прохожий
 
Регистрация: 03.12.2012
Сообщения: 25
Репутация: 10
Восклицание

А можете подсказать как реализовать проверку по количеству символов, т.е. в LisTBox1 меня есть номера ААА001-002 и ААА0001-0002 (6 и 7 значные). При щелчке на один из диапозонов, они должны заносится в Edit1 и Edit2, как сделать проще чем у меня?
У меня так :
Код:
procedure TForm1.ListBox2Click(Sender: TObject);
begin
Edit3.Text:=ListBox2.Items[ListBox2.ItemIndex]; 
  {6-знаков}
  //серия
Edit3.SelStart:=0;   //устанавливаю курсор перед нулевым символом
Edit3.SelLength:=3;  //выделяем 3 символа
Edit3.CopyToClipboard; //копируем выделенное
Edit4.Clear;
Edit4.PasteFromClipboard; //втавляем в Edit4 
  //начало номеров
Edit3.SelStart:=4;   //устанавливаю курсор перед 4 символом
Edit3.SelLength:=3;  //выделяем 3 символа
Edit3.CopyToClipboard; //копируем выделенное
Edit5.Clear;
Edit5.PasteFromClipboard; //втавляем в Edit5
  //конец номеров
Edit3.SelStart:=8;   //устанавливаю курсор перед 8 символом
Edit3.SelLength:=3;  //выделяем 3 символа
Edit3.CopyToClipboard; //копируем выделенное
Edit6.Clear;
Edit6.PasteFromClipboard; //втавляем в Edit6
Edit7.Text:=Edit4.Text+Edit5.Text; // собираем в одно
Edit8.Text:=Edit4.Text+Edit6.Text; // собираем в одно

{7-знаков}
  //серия
Edit3.SelStart:=0;   //устанавливаю курсор перед нулевым символом
Edit3.SelLength:=3;  //выделяем 3 символа
Edit3.CopyToClipboard; //копируем выделенное
Edit9.Clear;
Edit9.PasteFromClipboard; //втавляем в Edit4
 //начало номеров
Edit3.SelStart:=4;   //устанавливаю курсор перед 4 символом
Edit3.SelLength:=4;  //выделяем 4 символа
Edit3.CopyToClipboard; //копируем выделенное
Edit10.Clear;
Edit10.PasteFromClipboard; //втавляем в Edit10
  //конец номеров
Edit3.SelStart:=9;   //устанавливаю курсор перед 9 символом
Edit3.SelLength:=4;  //выделяем 4символа
Edit3.CopyToClipboard; //копируем выделенное
Edit11.Clear;
Edit11.PasteFromClipboard; //втавляем в Edit11
Edit12.Text:=Edit9.Text+Edit10.Text;// собираем в одно
Edit13.Text:=Edit9.Text+Edit11.Text;// собираем в одно
end;
Минусы моего кода:
1. Много полей: 6знаков в Edit1 и Edit2, 7знаков в Edit3 и Edit4
2. Приходится делать две кнопки для 6знаков и 7 знаков
а хотелось чтобы одна кнопка
3. В Editы постоянно вставляются символы, т.е. потом кто будет пользоваться программой нужно смотреть куда тыкать.

Спасибо разобрался

Цитата:
Сообщение от poli-smen
Примерно как-то так:
Код:
ADOQuery2.Sql.Text := 'Select Number From Lugi Where Number >= ' + QuotedStr(Edit1.Text) + ' and Number <= ' + QuotedStr(Edit2.Text);
А если необходим список которые не найдены?

Последний раз редактировалось M.A.D.M.A.N., 30.04.2014 в 11:50.
Ответить с цитированием
  #5  
Старый 30.04.2014, 11:39
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от spawn-1212
А если необходим список которые не найдены?
Это точно законченное предложение?
Ответить с цитированием
  #6  
Старый 30.04.2014, 11:55
Аватар для spawn-1212
spawn-1212 spawn-1212 вне форума
Прохожий
 
Регистрация: 03.12.2012
Сообщения: 25
Репутация: 10
По умолчанию

Цитата:
Сообщение от poli-smen
Это точно законченное предложение?
Т.е. в Edit1 ААА001, а в Edit2 ААА050 - это диапозон, полученных карточек неким лицом, при нажатии на конпку выполняется код:
Код:
ADOQuery2.Sql.Text := 'Select Number From Lugi Where Number >= ' + QuotedStr(Edit1.Text) + ' and Number <= ' + QuotedStr(Edit2.Text);
Результат: DBGrid отображает список карточек, которые уже сдали. А необходимо увидеть список которые не сдали. Как это сделать подскажи пжл?
Тяжело в полученном результате искать отсутствующую карточку, например выдано карточек 50, а найдено 49, какая отсутствует? сидеть перебирать? не вариант

Последний раз редактировалось spawn-1212, 30.04.2014 в 12:00.
Ответить с цитированием
  #7  
Старый 30.04.2014, 12:49
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от spawn-1212
Т.е. в Edit1 ААА001, а в Edit2 ААА050 - это диапозон, полученных карточек неким лицом, при нажатии на конпку выполняется код:
Код:
ADOQuery2.Sql.Text := 'Select Number From Lugi Where Number >= ' + QuotedStr(Edit1.Text) + ' and Number <= ' + QuotedStr(Edit2.Text);
Результат: DBGrid отображает список карточек, которые уже сдали. А необходимо увидеть список которые не сдали. Как это сделать подскажи пжл?
Тяжело в полученном результате искать отсутствующую карточку, например выдано карточек 50, а найдено 49, какая отсутствует? сидеть перебирать? не вариант
Просто нужно инвертировать условие вот так:
Код:
ADOQuery2.Sql.Text := 'Select Number From Lugi Where NOT (Number >= ' + QuotedStr(Edit1.Text) + ' and Number <= ' + QuotedStr(Edit2.Text) + ')';
Или так:
Код:
ADOQuery2.Sql.Text := 'Select Number From Lugi Where Number < ' + QuotedStr(Edit1.Text) + ' OR Number > ' + QuotedStr(Edit2.Text);
И ещё - пользуйся, как советовал M.A.D.M.A.N., параметрами запроса - с ними удобнее работать.
Ответить с цитированием
  #8  
Старый 30.04.2014, 12:53
Аватар для spawn-1212
spawn-1212 spawn-1212 вне форума
Прохожий
 
Регистрация: 03.12.2012
Сообщения: 25
Репутация: 10
По умолчанию

Цитата:
Сообщение от poli-smen
Просто нужно инвертировать условие вот так:
Код:
ADOQuery2.Sql.Text := 'Select Number From Lugi Where NOT (Number >= ' + QuotedStr(Edit1.Text) + ' and Number <= ' + QuotedStr(Edit2.Text) + ')';
Или так:
Код:
ADOQuery2.Sql.Text := 'Select Number From Lugi Where Number < ' + QuotedStr(Edit1.Text) + ' OR Number > ' + QuotedStr(Edit2.Text);
И ещё - пользуйся, как советовал M.A.D.M.A.N., параметрами запроса - с ними удобнее работать.
Если делать как ты пишешь в 1 и 2 случае выйдут все карточки, не те которые в диапозоне, а все которые в БД/
Объясню: В БД забиты карточки ААА001-ААА999, на конкретном лицеА у меня выходит диапазон ААА001-ААА050(карточки которые выдали ему), мне нужны карточки которые не входят в этот диапазон.

Последний раз редактировалось spawn-1212, 30.04.2014 в 13:07.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter