|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Что использовать? подскажи пжл
В программировании новичок.
Попросили написать программу для облегчения другим. Подключаюсь к БД 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
|
||||
|
||||
Есть такая штука, как параметры запроса.
Код:
TParam Код:
select * from table where field = :value Жмём F1, вводим TParam. — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#3
|
||||
|
||||
Цитата:
Код:
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
|
||||
|
||||
А можете подсказать как реализовать проверку по количеству символов, т.е. в 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ы постоянно вставляются символы, т.е. потом кто будет пользоваться программой нужно смотреть куда тыкать. Спасибо разобрался Цитата:
Последний раз редактировалось M.A.D.M.A.N., 30.04.2014 в 11:50. |
#5
|
||||
|
||||
Цитата:
|
#6
|
||||
|
||||
Цитата:
Код:
ADOQuery2.Sql.Text := 'Select Number From Lugi Where Number >= ' + QuotedStr(Edit1.Text) + ' and Number <= ' + QuotedStr(Edit2.Text); Тяжело в полученном результате искать отсутствующую карточку, например выдано карточек 50, а найдено 49, какая отсутствует? сидеть перебирать? не вариант Последний раз редактировалось spawn-1212, 30.04.2014 в 12:00. |
#7
|
||||
|
||||
Цитата:
Код:
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); |
#8
|
||||
|
||||
Цитата:
Объясню: В БД забиты карточки ААА001-ААА999, на конкретном лицеА у меня выходит диапазон ААА001-ААА050(карточки которые выдали ему), мне нужны карточки которые не входят в этот диапазон. Последний раз редактировалось spawn-1212, 30.04.2014 в 13:07. |
#9
|
||||
|
||||
Цитата:
|
#10
|
||||
|
||||
Цитата:
Select Number выбрать столбец 'Number' From Lugi из таблицы 'Lugi' Where NOT (Number >= ' + QuotedStr(Edit1.Text) + ' and Number <= ' + QuotedStr(Edit2.Text) + ')'; когда нет диапазона с номера из Edit1 до номера из Edit2. Причём когда я пробую в программе она подвисает, оно и понятно большое количество записей, а через SQL Navigator 6.2.0 = выбираются 250 , потом ещё и ещё.. чего-то не так надо делать |
#11
|
||||
|
||||
Цитата:
Если же речь идёт о том что есть некий логический диапазон, а в нём имеется поддиапазон выданных карточек и остальные карточки в этом диапазоне не выданы (которые и нужно получить), то делать нужно чуть посложнее (здесь я организовал запрос через параметры): Код:
ADOQuery2.SQL.Text := 'SELECT Number FROM Lugi WHERE Number >= :n1 AND Number <= :n2 AND Number < :n3 AND Number > :n4'; ADOQuery2.Parameters.ParamByName('n1').Value := 'ААА001'; // Начало диапазона ADOQuery2.Parameters.ParamByName('n2').Value := 'ААА999'; // Конец диапазона ADOQuery2.Parameters.ParamByName('n3').Value := 'ААА001'; // Начало поддиапазона ADOQuery2.Parameters.ParamByName('n4').Value := 'ААА050'; // Конец поддиапазона |
#12
|
||||
|
||||
poli-smen делает выводы на основании того что вы сказали ранее. Если вы не предоставили полной информации, то и ответ будет неверен.
Первое с чего надо было начать, но тут не прозвучал это вопрос, а собственно структурку данных ваших для лица и карточек нарисуйте. После прочтения этого опуса, у меня возникло стойкое асчусчение, что у вас структура данных неверная. Далее, так как у вас несколько нестандартный кодификатор, то давайте определимся еще по следующим вопросам: 1. Значение Number генерируются строго по возрастанию? 2. В каком собственно диапазоне эти значения. Всегда в 6-значном формате, или это частный случай. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#13
|
||||
|
||||
Цитата:
2. Диапазон значений либо 6 знаков: ААА001, либо 7 знаков БББ0001 |
#14
|
||||
|
||||
Цитата:
Попытаюсь объяснить: например, Иванову А.А. выдали на руки карточки с диапазоном ААА050-ААА100 и забили их в БД таблица"Карточки". Этот диапазон выводится с помощью запроса в Edit1.Text:=ААА050 и Edit2.Text:=ААА100. Допустим за сегодня Иванов заполнил свои 12 карточек и сдал, тогда их забивают в БД таблица "Учёт". Так вот если я выполняю запрос Код:
ADOQuery2.Sql.Text := 'Select Number From Lugi Where Number >= ' + QuotedStr(Edit1.Text) + ' and Number <= ' + QuotedStr(Edit2.Text); |
#15
|
||||
|
||||
Цитата:
|