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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 13.06.2013, 10:35
chudovperyax chudovperyax вне форума
Прохожий
 
Регистрация: 11.06.2013
Сообщения: 9
Версия Delphi: Delphi 2009
Репутация: 10
По умолчанию Работа с записями в БД Access

Здравствуйте! Картина такова: есть бд в access, есть подключение с delphi 2009. Проблему лучше всего описать на примере: допустим, надо вытащить количество определенной продукции за определенный период. Причем именно что бы пользователь мог выбрать что и как. Например он в комбобоксе выбирает "шкаф" и в других комбобоксах соответственно даты. А они уже как то подставляются в sql запрос. Собственно как сделать так, что бы они подставлялись?
Профессионалы, помогите новичку, пожалуйста
Ответить с цитированием
  #2  
Старый 13.06.2013, 10:51
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
По умолчанию

использовать параметры в запросе и подставлять нужные значения в них
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
Ответить с цитированием
  #3  
Старый 13.06.2013, 10:54
Аватар для Mrak
Mrak Mrak вне форума
Местный
 
Регистрация: 26.01.2013
Адрес: МО
Сообщения: 438
Версия Delphi: XE2
Репутация: 17
По умолчанию

Код:
adoquery1.sql.text:='SELECT * FROM table1 WHERE mebel = "' + combobox1.text + '" AND date = ' + datetimepicker1.date; 
__________________
Я за здоровый экстрим!
Спасибо за "спасибо")
Ответить с цитированием
Этот пользователь сказал Спасибо Mrak за это полезное сообщение:
chudovperyax (13.06.2013)
  #4  
Старый 13.06.2013, 10:55
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Лучше всего это делать через параметрический запрос:
Код:
AdoQuery1.SQL.Text := 'select * from UserTable where ProductID=:ProductID and SaleDate between :BSale and :ESale';
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 13.06.2013, 11:09
chudovperyax chudovperyax вне форума
Прохожий
 
Регистрация: 11.06.2013
Сообщения: 9
Версия Delphi: Delphi 2009
Репутация: 10
По умолчанию

Ну этот же вариант не предполагает возможности выбора пользователем? Мой запрос выглядит так на самом деле:
Код:
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  
Старый 13.06.2013, 12:27
Аватар для Mrak
Mrak Mrak вне форума
Местный
 
Регистрация: 26.01.2013
Адрес: МО
Сообщения: 438
Версия Delphi: XE2
Репутация: 17
По умолчанию

То что выберет в combobox, то и спросится в запросе
Вместо даты в combobox, используй с вкладки win32 datetimepicker или monthCalendar
Помни, что для полей даты и цифр кавычки необязательны (но лучше ставить)
Для удобочитаемости можешь воспользоваться функцией QuotedStr - типа кавычки
__________________
Я за здоровый экстрим!
Спасибо за "спасибо")
Ответить с цитированием
  #7  
Старый 13.06.2013, 17:48
chudovperyax chudovperyax вне форума
Прохожий
 
Регистрация: 11.06.2013
Сообщения: 9
Версия Delphi: Delphi 2009
Репутация: 10
По умолчанию

Спасибо за помощь! С комбобоксом все прекрасно работало, а вот на дату ругается( Подскажите в чем проблема, пожалуйста, все попробовала.
Вот мой код:
Код:
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  
Старый 13.06.2013, 18:56
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

лишний and:
Код:
'And And Period_vremeni.Period_vremeni_kon<=#'+ Datetostr(DateTimePicker3.date) +' #
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #9  
Старый 13.06.2013, 19:02
chudovperyax chudovperyax вне форума
Прохожий
 
Регистрация: 11.06.2013
Сообщения: 9
Версия Delphi: Delphi 2009
Репутация: 10
По умолчанию

Поняла в чем проблема: в синтаксисе access дата записывается как #dd/mm/yyyy#, здесь же она преобразуется в #dd.mm.yyyy#. Не подскажете, как это исправить?)
Ответить с цитированием
  #10  
Старый 13.06.2013, 19:04
chudovperyax chudovperyax вне форума
Прохожий
 
Регистрация: 11.06.2013
Сообщения: 9
Версия Delphi: Delphi 2009
Репутация: 10
По умолчанию

Это тут по невнимательности, лишнего энда в коде нет)
Формат ставила как dd/MM/yyyy, все равно в итоге пишет про ошибку синтаксиса и выводит там dd.MM.yyyy ((((

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

Код:
'' + Datetostr(formatdatetime('dd.mm.yyyy', DateTimePicker1.date)) + ''
__________________
Я за здоровый экстрим!
Спасибо за "спасибо")
Ответить с цитированием
  #12  
Старый 15.06.2013, 07:58
chudovperyax chudovperyax вне форума
Прохожий
 
Регистрация: 11.06.2013
Сообщения: 9
Версия Delphi: Delphi 2009
Репутация: 10
По умолчанию

Не могу понять почему, но даже так не работает( Пробовала даже не такой красивый, но казалось бы безошибочный вариант: сделала возможность выбора дат через dbcombobox, но даже так не работает О_о
Ответить с цитированием
  #13  
Старый 15.06.2013, 08:48
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от chudovperyax
Не могу понять почему, но даже так не работает( Пробовала даже не такой красивый, но казалось бы безошибочный вариант: сделала возможность выбора дат через dbcombobox, но даже так не работает О_о

сделай на параметрах и проблем будет меньше.
особенно с датами это помогает...
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter