|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Работа с записями в БД Access
Здравствуйте! Картина такова: есть бд в access, есть подключение с delphi 2009. Проблему лучше всего описать на примере: допустим, надо вытащить количество определенной продукции за определенный период. Причем именно что бы пользователь мог выбрать что и как. Например он в комбобоксе выбирает "шкаф" и в других комбобоксах соответственно даты. А они уже как то подставляются в sql запрос. Собственно как сделать так, что бы они подставлялись?
Профессионалы, помогите новичку, пожалуйста |
#2
|
||||
|
||||
использовать параметры в запросе и подставлять нужные значения в них
Поживу - увижу, Доживу - узнаю, Выживу - учту. [P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
|
#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#. Не подскажете, как это исправить?)
|
#10
|
|||
|
|||
Это тут по невнимательности, лишнего энда в коде нет)
Формат ставила как dd/MM/yyyy, все равно в итоге пишет про ошибку синтаксиса и выводит там dd.MM.yyyy (((( Последний раз редактировалось chudovperyax, 13.06.2013 в 19:28. |
#11
|
||||
|
||||
Код:
'' + Datetostr(formatdatetime('dd.mm.yyyy', DateTimePicker1.date)) + '' Я за здоровый экстрим! Спасибо за "спасибо") |
#12
|
|||
|
|||
Не могу понять почему, но даже так не работает( Пробовала даже не такой красивый, но казалось бы безошибочный вариант: сделала возможность выбора дат через dbcombobox, но даже так не работает О_о
|
#13
|
|||
|
|||
Цитата:
сделай на параметрах и проблем будет меньше. особенно с датами это помогает... |