Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.12.2009, 21:17   #1
Lord777
Пользователь
 
Регистрация: 28.04.2009
Сообщений: 46
По умолчанию SQL and DataTimePicker

zdrastvuite delaiu zapros na viborku po datam OT-DO
pisu zapros piset nexvataet operatora pomogite pojaluista

Код:
begin
 DataModule3.sumdat.Active:=false;
 DataModule3.sumdat.SQL.Clear;
 DataModule3.sumdat.SQL.Add('SELECT SUM(kolicestvo*cena)');
 DataModule3.sumdat.SQL.Add('FROM istoriaprodaj');
 DataModule3.sumdat.SQL.Add('where dataprodaji LIKE '''+datetostr(datetimepicker2.date)+''' and LIKE '''+datetostr(datetimepicker3.date)+'''');
 
  DataModule3.sumdat.Active:=true;
end;
Поступай с человеком так как хотелбы чтоб поступали с тобой!!!
Код:
if помог:=True then репутация:='+1000' else зрятытак:=True;
Lord777 вне форума Ответить с цитированием
Старый 31.12.2009, 21:24   #2
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

А в каком месте показывает, что не хватает оператора?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 31.12.2009, 22:39   #3
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Попробуй так :
Код:
begin
DataModule3.sumdat.Active:=false;
DataModule3.sumdat.SQL.Clear;
DataModule3.sumdat.SQL.Add('SELECT SUM(kolicestvo*cena)');
DataModule3.sumdat.SQL.Add('FROM istoriaprodaj');
DataModule3.sumdat.SQL.Add('where dataprodaji LIKE ' + #39 +  datetostr(datetimepicker2.date) + #39 + ' and LIKE ' + #39 + datetostr(datetimepicker3.date) + #39);
 
DataModule3.sumdat.Active:=true;
end;
При таком подходе нет путаницы с кавычками.
#39 - это код одинарной кавычки
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 01.01.2010, 03:26   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

уж сколько раз твердили миру...
Если в запросе нужно использовать дату и не хочется иметь проблем и глюков на разных системах и с разными установками локального представления даты,
то запрос с датой должен быть ПАРАМЕТРИЧЕСКИМ!!

Код:
DataModule3.sumdat.Active:=false;
DataModule3.sumdat.SQL.Clear;
DataModule3.sumdat.SQL.Add('SELECT SUM(kolicestvo*cena)');
DataModule3.sumdat.SQL.Add('FROM istoriaprodaj');
DataModule3.sumdat.SQL.Add('where dataprodaji between :pDate1 and :pDate2');
DataModule3.sumdat.Parameters.ParamByName('pDate1').Value:=trunc(datetimepicker2.date);
DataModule3.sumdat.Parameters.ParamByName('pDate2').Value:=trunc(datetimepicker3.date);
 
DataModule3.sumdat.Active:=true;
p.s. кстати, в этом случае, имхо, формат даты, как ни странно, не виноват...
просто оператор LIKE используется неверно - пропущено наименование поля (выделено красным!)...
Pole Like Значение2 and Pole Like Значение2

p.p.s. в данном случае LIKE вообще не нужен. достаточно просто равно

p.p.p.s. если нужно получить выборку всех значений, попадающих в диапазон между двумя датами в Datapicker'ах - то нужно использовать оператор BETWEEN
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.01.2010, 11:37   #5
Ky3Heu,
Пользователь
 
Регистрация: 01.04.2009
Сообщений: 94
По умолчанию

И не забывайте ставить пробелы после оператора. А если пишите запрос на несколько строк, то желательно и в начале строки ставить пробел. Так на всякий случай. Много глюков подобных избежать можно.
По ракетам и хоккею - Россияне всех сильней!
Ky3Heu, вне форума Ответить с цитированием
Старый 01.01.2010, 16:52   #6
Lord777
Пользователь
 
Регистрация: 28.04.2009
Сообщений: 46
По умолчанию

kak ni stranno NO variaant kotori predlojil Serge_Bliznykov ne rabotaet vidaet osibku "nesootvetstvie tipovix dannix v virajenii uslovia otbora"

nekak poniat ne mogu v cem mojet bit problema
Поступай с человеком так как хотелбы чтоб поступали с тобой!!!
Код:
if помог:=True then репутация:='+1000' else зрятытак:=True;
Lord777 вне форума Ответить с цитированием
Старый 01.01.2010, 17:19   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Lord777
"nesootvetstvie tipovix dannix v virajenii uslovia otbora"
поздравляю...
А можно поинтересоваться, кто табличку проектировал?
Тут же всё ясно написано - несоответствие типов данных в выражении отбора - значит, рискну предположить, поле dataprodaji у Вас не типа ДАТА (не DATE и не DATETIME)

Давайте конкретно:
1) структуру таблицы istoriaprodaj
2) какая СУБД ?
3) пример данных из таблицы istoriaprodaj приведите
4) насчёт периода я угадал? Вам действительно нужно все записи между двумя датами?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.01.2010, 17:36   #8
Lord777
Пользователь
 
Регистрация: 28.04.2009
Сообщений: 46
По умолчанию

tablicku delal ia Acess a pole dataprodaji Data/Time i v parametre ustanovleno ShortDate toist zapis tipa 01.01.2010

struktura tablici istoriaprodaj

ID klucevoe pole
firma
model
razmer
cvet
cena
kolicestvo
dataprodaji Data/Time (ShortDate)
sklad
material
vid

sto kasaetsia 4 punkta to da mne deistvitelno nujen period poskolku inogda trebuetsia uznat na kakuiu sumu za mesiac bil prodan tovar inogda nujno uznat za 10-15 dnei nu i v etom rode
Поступай с человеком так как хотелбы чтоб поступали с тобой!!!
Код:
if помог:=True then репутация:='+1000' else зрятытак:=True;

Последний раз редактировалось Lord777; 01.01.2010 в 17:45.
Lord777 вне форума Ответить с цитированием
Старый 06.01.2010, 02:02   #9
Ky3Heu,
Пользователь
 
Регистрация: 01.04.2009
Сообщений: 94
По умолчанию

Измени ShortDate на DateTime иначе придется согласовывать системное представление даты с датой в таблице, а это совершенно не нужный гемор. По умолчанию в системе полное отображение даты, а тип ShortDate несовместим с ним. Используй в базе полный тип и будет тебе счастье.
По ракетам и хоккею - Россияне всех сильней!
Ky3Heu, вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление строки с помощью SQL запроса (Query1.SQL.ADD('Delete....')) Schutze Помощь студентам 6 29.11.2009 22:15
Создание новых таблиц в MS SQL SERVERE через SQL запрос в Delphi S_Yevgeniy Помощь студентам 1 27.10.2009 06:26
Занесение значения DataTimePicker в базу inret Общие вопросы Delphi 3 09.05.2008 15:21
интересная задача про DataTimePicker ГОСЕАН БД в Delphi 8 15.07.2007 16:37