![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Здравствуйте! Картина такова: есть бд в access, есть подключение с delphi 2009. Проблему лучше всего описать на примере: допустим, надо вытащить количество определенной продукции за определенный период. Причем именно что бы пользователь мог выбрать что и как. Например он в комбобоксе выбирает "шкаф" и в других комбобоксах соответственно даты. А они уже как то подставляются в sql запрос. Собственно как сделать так, что бы они подставлялись?
Профессионалы, помогите новичку, пожалуйста ![]() |
|
#2
|
||||
|
||||
|
использовать параметры в запросе и подставлять нужные значения в них
|
|
#3
|
||||
|
||||
|
Код:
adoquery1.sql.text:='SELECT * FROM table1 WHERE mebel = "' + combobox1.text + '" AND date = ' + datetimepicker1.date; |
| Этот пользователь сказал Спасибо Mrak за это полезное сообщение: | ||
chudovperyax (13.06.2013)
| ||
|
#4
|
||||
|
||||
|
Лучше всего это делать через параметрический запрос:
Код:
AdoQuery1.SQL.Text := 'select * from UserTable where ProductID=:ProductID and SaleDate between :BSale and :ESale'; |
|
#5
|
|||
|
|||
|
Ну этот же вариант не предполагает возможности выбора пользователем? Мой запрос выглядит так на самом деле:
Код:
SELECT SUM(Perem_zatr.Plan) AS plan, SUM(Perem_zatr.Fact) AS fact FROM ((Perem_zatr INNER JOIN Period_vremeni ON Perem_zatr.ID_vremya=Period_vremeni.ID_vremya) INNER JOIN Norma_resursa ON Perem_zatr.ID_norma_res=Norma_resursa.ID_norma_res) INNER JOIN Vid_produkcii ON Norma_resursa.ID_nomenklatura=Vid_produkcii.ID_nomenklatura WHERE Vid_produkcii.Nomenklatura="Shkaf" And (Period_vremeni.Period_vremeni_nach Between #12/12/2010# And #2/2/2013#) And Period_vremeni.Period_vremeni_kon<=#2/2/2013#; Последний раз редактировалось lmikle, 15.06.2013 в 08:44. |
|
#6
|
||||
|
||||
|
То что выберет в combobox, то и спросится в запросе
Вместо даты в combobox, используй с вкладки win32 datetimepicker или monthCalendar Помни, что для полей даты и цифр кавычки необязательны (но лучше ставить) Для удобочитаемости можешь воспользоваться функцией QuotedStr - типа кавычки ![]() |
|
#7
|
|||
|
|||
|
Спасибо за помощь! С комбобоксом все прекрасно работало, а вот на дату ругается( Подскажите в чем проблема, пожалуйста, все попробовала.
Вот мой код: Код:
ADOQuery1.Active:=False; ADOQuery1.Close; ADOquery1.sql.Text:= 'SELECT SUM(Perem_zatr.Plan) AS plan, SUM(Perem_zatr.Fact) AS fact FROM ((Perem_zatr INNER JOIN Period_vremeni ON Perem_zatr.ID_vremya=Period_vremeni.ID_vremya)'+ 'INNER JOIN Norma_resursa ON Perem_zatr.ID_norma_res=Norma_resursa.ID_norma_res )'+ 'INNER JOIN Vid_produkcii ON Norma_resursa.ID_nomenklatura=Vid_produkcii.ID_nom enklatura '+ 'WHERE Vid_produkcii.Nomenklatura="' + ComboBox1.text + '"'+ 'And (Period_vremeni.Period_vremeni_nach Between #'+ Datetostr(DateTimePicker1.date)+'# And #'+ Datetostr(DateTimePicker2.date)+'#)'+ 'And And Period_vremeni.Period_vremeni_kon<=#'+ Datetostr(DateTimePicker3.date) +' #'; ADOQuery1.Open; ADOQuery1.Active:=True; end; ![]() Последний раз редактировалось lmikle, 15.06.2013 в 08:45. |
|
#8
|
||||
|
||||
|
лишний and:
Код:
'And And Period_vremeni.Period_vremeni_kon<=#'+ Datetostr(DateTimePicker3.date) +' # |
|
#9
|
|||
|
|||
|
Поняла в чем проблема: в синтаксисе access дата записывается как #dd/mm/yyyy#, здесь же она преобразуется в #dd.mm.yyyy#. Не подскажете, как это исправить?)
|