Поиск:

Ответ в темуСоздание новой темы Создание опроса
> > DELPHI Paradox 5.x Выборка за промижуток дат и в 
:(
    Опции темы
Ripperr
  Дата 22.12.2008, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 1.11.2008

Репутация: нет
Всего: нет



Надо произвести выборку за период дат дата1-дата2 с последующим введением ограничения датавремя1 -датавремя2.
Парадокс связан через ADO MicroSoftJEt

Код
SELECT CallDate, UserName, Duration, PhoneNumber, Country, ROUND(SumMoney,2) AS SumMoney FROM Statist WHERE  CallDate + CallBegin >= :firstDate AND CallDate + CallBegin <= :secodDate


form1.ADOQuery1.SQL.Clear;
form1.ADOQuery1.SQL.Add(query1);
form1.ADOQuery1.Parameters.ParamByName('firstDate').Value:=SplitString(datetostr(form1.DateTimePicker1.Date),'.',1)+'/'+SplitString(datetostr(form1.DateTimePicker1.Date),'.',0)+'/'+SplitString(datetostr(form1.DateTimePicker1.Date),'.',2)+' 00:00:00';
form1.ADOQuery1.Parameters.ParamByName('secodDate').Value:=SplitString(datetostr(form1.DateTimePicker2.Date),'.',1)+'/'+SplitString(datetostr(form1.DateTimePicker2.Date),'.',0)+'/'+SplitString(datetostr(form1.DateTimePicker2.Date),'.',2)+' 23:00:00';
form1.ADOQuery1.ExecSQL;
form1.ADOQuery1.Active:=true;


неработает результат пусто

значения праметра
Код
firstDate
'01/01/2008 00:00:00'

Код
secodDate
'12/22/2008 23:00:00'


я уже незнаю что с этим делать стою на одном месте уже голова болит с MSSQL, MySQL, Access некогда таких боков небыло.  smile:
PM MAIL ICQ   Вверх
pseud
Дата 22.12.2008, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 16
Всего: 40



такая штука в SQL Explorer отрабатывает нормально?
Код

SELECT 
  CallDate, 
  UserName, 
  Duration, 
  PhoneNumber, 
  Country, 
  ROUND(SumMoney,2) AS SumMoney 
FROM 
  Statist 
WHERE  
  CallDate + CallBegin >= '01/01/2008 00:00:00' 
  AND CallDate + CallBegin <= '12/22/2008 23:00:00'

а лучше такая
Код

SELECT 
  CallDate, 
  UserName, 
  Duration, 
  PhoneNumber, 
  Country, 
  ROUND(SumMoney,2) AS SumMoney 
FROM 
  Statist 
WHERE  
  CallDate + CallBegin >= '01.01.2008 00:00:00' 
  AND CallDate + CallBegin <= '12.22.2008 23:00:00'



--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
Ripperr
Дата 22.12.2008, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 1.11.2008

Репутация: нет
Всего: нет



Если оба запроса вставить на пряму в адокювери результат пусто


Код

SELECT 
  CallDate, 
  UserName, 
  Duration, 
  PhoneNumber, 
  Country, 
  ROUND(SumMoney,2) AS SumMoney 
FROM 
  Statist 
WHERE  
  CallDate >= '01/01/2008' 
  AND CallDate <= '12/22/2008'



если так то говорит "несоотведствие типов в выражении условий отбора"

если без каваычек результат пусто

Это сообщение отредактировал(а) Ripperr - 22.12.2008, 16:55
PM MAIL ICQ   Вверх
pseud
Дата 22.12.2008, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 16
Всего: 40



CallDate и CallBegin - это кто?


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
Ripperr
Дата 22.12.2008, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 1.11.2008

Репутация: нет
Всего: нет



Это поле дата и время
отдельные
PM MAIL ICQ   Вверх
pseud
Дата 22.12.2008, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 16
Всего: 40



а так?
Код

SELECT 
  CallDate, 
  UserName, 
  Duration, 
  PhoneNumber, 
  Country, 
  ROUND(SumMoney,2) AS SumMoney 
FROM 
  Statist 
WHERE  
  (CallDate BETWEEN  '01.01.2008'  AND '12.22.2008')
  AND
  (CallBegin BETWEEN '00:00:00' AND '23:00:00')



--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
Ripperr
Дата 22.12.2008, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 1.11.2008

Репутация: нет
Всего: нет



это немного по логике другой вопрос но пишет что не совмесимость типов данных и выражений в условиях отбора... 

Тут походу особеность что это Paradox и ADO.  ..  надо поробовать через BDE хотя я ранше некогда им не пользовался...

Драйвер подключения для адо соствален так :


Код

Provider=Microsoft.Jet.OLEDB.4.0;
Password="";
User ID=Admin;
Data Source=C:\Tarificator\Phone Inspector\Database;
Mode=Share Deny None;
Extended Properties=Paradox 5.x;
Jet OLEDB:System database="";
Jet OLEDB:Registry Path="";
Jet OLEDB:Database Password="";
Jet OLEDB:Engine Type=82;
Jet OLEDB:Database Locking Mode=0;
Jet OLEDB:Global Partial Bulk Ops=2;
Jet OLEDB:Global Bulk Transactions=1;
Jet OLEDB:New Database Password="";
Jet OLEDB:Create System Database=False;
Jet OLEDB:Encrypt Database=False;
Jet OLEDB:Don't Copy Locale on Compact=False;
Jet OLEDB:Compact Without Replica Repair=False;
Jet OLEDB:SFP=False




Это сообщение отредактировал(а) Ripperr - 22.12.2008, 20:24
PM MAIL ICQ   Вверх
Akella
Дата 22.12.2008, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(Ripperr @  22.12.2008,  15:36 Найти цитируемый пост)
form1.ADOQuery1.ExecSQL;
form1.ADOQuery1.Active:=true;

когда народ начнёт различать Exec и Open?

Добавлено через 7 минут и 45 секунд
Ripperr, запомни, если твой запрос должен что-то тебе вернуть, показать, например, в гриде, или тебе нужна навигация по записям полученного набора данных, то
Код

form1.ADOQuery1.Active:=true;

или
Код

form1.ADOQuery1.Open;

затем нужно закрывать 
Код

form1.ADOQuery1.Close;



Если тебе нужно выполнить, например, хранимую процедуру, или вставить/обновить запись, то
Код

form1.ADOQuery1.ExecSQL;

в этом случае уже закрывать не нужно, т.к. закрывать нечего, ты послал запрос серверу БЕЗ получения данных.

Добавлено через 12 минут и 8 секунд
Вот ещё будет полезно

Добавлено через 13 минут и 38 секунд
А здесь ближе к концу страницы

Цитата

Open или ExecSQL?

После того, как составлен SQL запрос, есть два различных способа выполнить его. Если Вы хотите получить курсор, то нужно вызывать Open. Если выражение SQL не подразумевает возвращение курсора, то нужно вызывать ExecSQL. Например, если происходит вставка, удаление или обновление данных (т.е. SQL запросы INSERT, DELETE, UPDATE), то нужно вызывать ExecSQL. Тоже самое можно сказать по-другому: Open вызывается при запросе типа SELECT, а ExecSQL - во всех остальных случаях...... читай дальше

PM MAIL   Вверх
pseud
Дата 23.12.2008, 12:08 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 16
Всего: 40



Цитата(Ripperr @  22.12.2008,  20:11 Найти цитируемый пост)
Тут походу особеность что это Paradox и ADO.

никогда не пользовал парадокс/АДО
бде мой последний запрос съедает запросто


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
Ripperr
Дата 23.12.2008, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 1.11.2008

Репутация: нет
Всего: нет



Цитата(pseud @ 23.12.2008,  12:08)
Цитата(Ripperr @  22.12.2008,  20:11 Найти цитируемый пост)
Тут походу особеность что это Paradox и ADO.

никогда не пользовал парадокс/АДО
бде мой последний запрос съедает запросто

Я копирую твой запрост просто а ADOQuery 

если так как оно у тебя написано говорит несоотведствие типов

если возле дат и врмени убрать кавыки говорит что неопределены параметры если убрать даты то запрос выполняется без ощибки но результат пустота....



PM MAIL ICQ   Вверх
Ripperr
Дата 23.12.2008, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 1.11.2008

Репутация: нет
Всего: нет



Запрос сейчас который скармливается ADO выглядит так


Код

SELECT 
               CallDate, UserName, Duration, PhoneNumber, Country, ROUND(SumMoney,2) AS SumMoney 
FROM 
               Statist 
WHERE  
               CallDate + CallBegin >= :firstDate AND CallDate + CallBegin <= :secodDate



код адо

Код

form1.ADOQuery1.SQL.Clear;
form1.ADOQuery1.SQL.Add(query1);
form1.ADOQuery1.Parameters.ParamByName('firstDate').Value:=''+SplitString(datetostr(form1.DateTimePicker1.Date),'.',1)+'/'+SplitString(datetostr(form1.DateTimePicker1.Date),'.',0)+'/'+SplitString(datetostr(form1.DateTimePicker1.Date),'.',2)+' 00:00:00''';
form1.ADOQuery1.Parameters.ParamByName('secodDate').Value:=''+SplitString(datetostr(form1.DateTimePicker2.Date),'.',1)+'/'+SplitString(datetostr(form1.DateTimePicker2.Date),'.',0)+'/'+SplitString(datetostr(form1.DateTimePicker2.Date),'.',2)+' 23:00:00''';
form1.ADOQuery1.Active:=true;
form1.ADOQuery1.Close;

Результат пустота не ощибки не данных....

PM MAIL ICQ   Вверх
Akella
Дата 23.12.2008, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(Ripperr @  23.12.2008,  19:34 Найти цитируемый пост)
form1.ADOQuery1.Active:=true;
form1.ADOQuery1.Close;

 smile я просто под столом...

Ripperr, ты перед этим всем этим ИЗУЧИ хоть маломальски методы компонент, а ты ты так и будешь тыкаться по форумам как слепой котёнок.
Что такое Close, что такое Active, что такое Open хотябы  smile 

Это сообщение отредактировал(а) Akella - 23.12.2008, 20:08
PM MAIL   Вверх
Ripperr
Дата 23.12.2008, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 1.11.2008

Репутация: нет
Всего: нет



Цитата(Akella @  22.12.2008,  20:14 Найти цитируемый пост)
Ripperr, запомни, если твой запрос должен что-то тебе вернуть, показать, например, в гриде, или тебе нужна навигация по записям полученного набора данных, то
Выделить всёкод Pascal/Delphi
1:
    
form1.ADOQuery1.Active:=true;

или
Выделить всёкод Pascal/Delphi
1:
    
form1.ADOQuery1.Open;

затем нужно закрывать 
Выделить всёкод Pascal/Delphi
1:
    
form1.ADOQuery1.Close;



я просто прочитал что тут было написано

Добавлено через 4 минуты и 49 секунд
Ты меня направляеш в книжки а я ищю решение чтобы знать в чем прикол. Я ранше с этим не сталкивался всегда когда запрос выполнялся в SQL редакторе в такойже форме он работал и в ADO а тут непонятно что.
PM MAIL ICQ   Вверх
pseud
Дата 24.12.2008, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 16
Всего: 40



Ripperr, пояняю смех Акеллы:
Код

ADOQuery1.Active:=true;
ADOQuery1.Close;

это тоже самое, что и
Код

ADOQuery1.Active := True;
ADOQuery1.Active := False;

и
Код

ADOQuery1.Open;
ADOQuery1.Close;

т.е. ты, не успев открыть выборку, ее сразу закрываешь.
так что ты хочешь увидеть, если выборка закрыта???


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
Ripperr
Дата 24.12.2008, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 1.11.2008

Репутация: нет
Всего: нет



В исправленом варианте тоже пустота... Неощибки не результата просто пустая таблица.......


Код

Для "SELECT * FROM Statist WHERE  CallDate <= :firstDate AND CallDate =>  :secodDate"


Пишет Ощибка синтаксиса пропущен оператор в выражении запроса...

где

Код

form1.ADOQuery1.SQL.Clear;
form1.ADOQuery1.SQL.Add(query1);
form1.ADOQuery1.Parameters.ParamByName('firstDate').Value:='01/01/2008';
form1.ADOQuery1.Parameters.ParamByName('secodDate').Value:='12/31/2008';
form1.ADOQuery1.Active:=true;


Это сообщение отредактировал(а) Ripperr - 24.12.2008, 19:01
PM MAIL ICQ   Вверх
Akella
Дата 24.12.2008, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Ripperr, подсказываю:
Код

form1.ADOQuery1.SQL.Clear;
form1.ADOQuery1.SQL.Add(query1);
form1.ADOQuery1.Parameters.ParamByName('firstDate').Value:='01/01/2008';
form1.ADOQuery1.Parameters.ParamByName('secodDate').Value:='12/31/2008';

ShowMessage(form1.ADOQuery1.SelectSQL.TEXT); // чтобы увидеть реальный запрос, ну или дебаггером смотри, что ты серверу отдаёшь

form1.ADOQuery1.Active:=true;


во вторых это: '01/01/2008';, а с чего ты взял, что так нужно передавать дату?

я бы сделал так
Код
form1.ADOQuery1.Parameters.ParamByName('firstDate').Value := StrToDate('01/01/2008');


а у сервера точно формат даты такой, как ты передаёшь?

ну сам запрос попробовать переделать с использованием скобок
Код
SELECT * FROM Statist WHERE  (CallDate <= :firstDate) AND (CallDate =>  :secodDate)


Добавлено через 56 секунд
Цитата(Ripperr @  24.12.2008,  13:06 Найти цитируемый пост)
form1.ADOQuery1.SQL.Add(query1);

ну и откуда нам знать, что у тебя в query1?
PM MAIL   Вверх
Ripperr
Дата 26.12.2008, 05:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 1.11.2008

Репутация: нет
Всего: нет



Код

ShowMessage(form1.ADOQuery1.SelectSQL.TEXT);


такой вещи нет есть

Код

ShowMessage(form1.ADOQuery1.SQL.TEXT);


оно показывает то что надо 

user posted image


а вот что мы имеем

user posted image


так мы передаем параметры

user posted image

запрос загнали просто в компонент ADOquery

В винде формат через точку а от единственый пока рабочий вариант выглядит так 

user posted image

ток как сюда припоять диапазон времени если поле в котором хранится время CallBegin

Это сообщение отредактировал(а) Ripperr - 26.12.2008, 05:15
PM MAIL ICQ   Вверх
Akella
Дата 26.12.2008, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(Ripperr @  26.12.2008,  05:02 Найти цитируемый пост)
оно показывает то что надо 

по идее там должны быть подставлены реальные значения вместо имён параметров

Добавлено @ 12:12
у ADOQuery должно быть свойство CheckParams, помоему, нет дельфи под рукой, не могу проверить
CheckParams должно быть установлено в True

Это сообщение отредактировал(а) Akella - 26.12.2008, 12:13
PM MAIL   Вверх
Ripperr
Дата 26.12.2008, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 1.11.2008

Репутация: нет
Всего: нет



Но в рабочем варианте тоже показывает имя параметра но при этом все работает.
PM MAIL ICQ   Вверх
Ripperr
Дата 29.12.2008, 03:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 1.11.2008

Репутация: нет
Всего: нет



Есть еще какието мысли на эту тему....



Или возможно как-то объеденить 3 запроса в 1 ? типо три запроса одна результирующая таблица ?
PM MAIL ICQ   Вверх
Ripperr
Дата 7.1.2009, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 1.11.2008

Репутация: нет
Всего: нет



тема все еще актуална получилось выберать инфу за период дата1-дата2 но некак не могу наложиить ограничения по времени...
PM MAIL ICQ   Вверх
Akella
Дата 8.1.2009, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Не знаю, есть ли в парадоксе 5 CAST, а то можно было бы из полей firstDate и secodDate выделять на лету время.
PM MAIL   Вверх
Ripperr
Дата 9.1.2009, 05:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 1.11.2008

Репутация: нет
Всего: нет



дайп правильный синтаксис я попробую
PM MAIL ICQ   Вверх
Akella
Дата 9.1.2009, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



неужели в гугле трудно набрать: select cast?

Добавлено через 2 минуты и 17 секунд
Код
select CAST(fromDate AS TIME) from TABLE

Хотя я не уверен, что в парадоксе такое прокатит.

Возможно прийдётся в дельфи, в наборах данных создавать калькулируемые поля, где будет храниться только время и с помощью их фильтровать данные
PM MAIL   Вверх
Ripperr
Дата 9.1.2009, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 1.11.2008

Репутация: нет
Всего: нет



Так стой в поле дата там ж токо дата откудо оно будет брать время время у меня отдельно поле `Calltime`

PM MAIL ICQ   Вверх
Akella
Дата 9.1.2009, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Тогда никак, просто столку меня сбило несколько сообщений

Цитата(pseud @  22.12.2008,  15:53 Найти цитируемый пост)
CallDate + CallBegin >= '01/01/2008 00:00:00' 
  AND CallDate + CallBegin <= '12/22/2008 23:00:00'


Цитата(pseud @  22.12.2008,  15:53 Найти цитируемый пост)
 CallDate + CallBegin >= '01.01.2008 00:00:00' 
  AND CallDate + CallBegin <= '12.22.2008 23:00:00'


Цитата(pseud @  22.12.2008,  19:34 Найти цитируемый пост)
 (CallDate BETWEEN  '01.01.2008'  AND '12.22.2008')
  AND
  (CallBegin BETWEEN '00:00:00' AND '23:00:00')


PM MAIL   Вверх
Ripperr
Дата 9.1.2009, 23:13 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 1.11.2008

Репутация: нет
Всего: нет



Я попробую еще раз но походу оно у меня не работает просто пустота...


И так в делфе непонятно что творится сново говорит что не может найти параметры

попробовал запрос напрямую засунуть в  DataBase Tour

и так что мы имеем


Код

SELECT * FROM Statist WHERE  CallDate + CallBegin >= '01.01.2008 00:00:00' AND CallDate + CallBegin <= '12.22.2008 23:00:00'


Type missmach in expression


Код

SELECT *
FROM Statist
WHERE  (CallDate BETWEEN  '01/01/2008'  AND '12/22/2008')
  AND
  (CallBegin BETWEEN  '00:00' AND '12:00' )


это работает но не то что мне надо оно выводит данные за 01/01/2008 до 12/22/2008 с ограничением с 00:00 до 12:00
 на каждый день а мне надо ограничить токо граничне данные тоесть с 01/01/2008 00:00 по 12/22/2008 12:00 ток вопрос что надо поправить в синтаксисе


Код

SELECT *
FROM Statist
WHERE  (CallDate BETWEEN  '11/19/2008'  AND '11/19/2008')
  AND
  (CallBegin BETWEEN  '12:00' AND '23:59' )
UNION
SELECT *
FROM Statist
WHERE  (CallDate BETWEEN  '11/20/2008'  AND '11/20/2008')
UNION
SELECT *
FROM Statist
WHERE  (CallDate BETWEEN  '11/21/2008'  AND '11/21/2008')
  AND
  (CallBegin BETWEEN  '00:00' AND '12:00' )


вот приблезительно что мне надо но он сильно нагружен текстом а я хотел запрос чтобы генирировался автоматически тут придется поморочится и что самое удевительное похоже что оно  работает Пробовал INTERSECT И MINUS  Paradox такого не знает =(

мыла мысль сделать исколечение 2х периодов до и после и вывести оставшыйся тобиш искомый

Это сообщение отредактировал(а) Ripperr - 10.1.2009, 06:40
PM MAIL ICQ   Вверх
pseud
Дата 10.1.2009, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 16
Всего: 40



а так?
Код

SELECT * FROM Statist WHERE  CallDate + CallBegin >= '01/01/2008 00:00' AND CallDate + CallBegin <= '12/22/2008 23:59'



--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
Ripperr
Дата 10.1.2009, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 1.11.2008

Репутация: нет
Всего: нет



В делфе пустота 
Код

query1:='SELECT * FROM Statist WHERE  CallDate + CallBegin >= ''01/01/2008 00:00'' AND CallDate + CallBegin <= ''12/22/2008 23:59'''; 
form3.ADOQuery1.SQL.Clear;
form3.ADOQuery1.SQL.Text:=query1;
form3.ADOQuery1.Active:=True;



результат пустота

В DataBase Tour type missmatch in expression 

Да и еще одно если мой запрос вставить  в Delphi то оно говорит что внешняя таблица не имеет проедпологаемый формат что это значит.

Это сообщение отредактировал(а) Ripperr - 10.1.2009, 18:41
PM MAIL ICQ   Вверх
pseud
Дата 10.1.2009, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 16
Всего: 40



Цитата(Ripperr @  10.1.2009,  18:28 Найти цитируемый пост)
Да и еще одно если мой запрос вставить  в Delphi

в дельфи - это как?

ну а такой запрос хоть отрабатывает?
Код

SELECT 
  * 
FROM 
  Statist 
WHERE  
  CallDate + CallBegin >= '01/01/2008' 
  AND CallDate + CallBegin <= '12/22/2008'


Добавлено через 6 минут и 43 секунды


------
и вот еще попробуй:
Код

SELECT 
  * 
FROM 
  Statist 
WHERE  
  CallDate + CallBegin >= '01/01/2008 0:00:00 AM' 
  AND CallDate + CallBegin <= '12/22/2008 11:59:59 PM'



--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
Akella
Дата 10.1.2009, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(Ripperr @  9.1.2009,  23:13 Найти цитируемый пост)
CallBegin >= '01.01.2008 00:00:00' 


Цитата(Ripperr @  9.1.2009,  23:13 Найти цитируемый пост)
CallBegin <= '12.22.2008 23:00:00'


Цитата(Ripperr @  9.1.2009,  23:13 Найти цитируемый пост)
Type missmach in expression

ты ж сам меня упрекал, что не хранится в поле время  smile

Добавлено через 40 секунд
Цитата(Ripperr @  9.1.2009,  23:13 Найти цитируемый пост)
WHERE  CallDate + CallBegin >=

сомневаюсь, что так правильно

Добавлено через 1 минуту и 40 секунд
Я уже запутался, что у тебя там в полях и какие типы smile

Добавлено через 2 минуты и 48 секунд
Цитата(pseud @  10.1.2009,  19:13 Найти цитируемый пост)
в дельфи - это как?

вот так видимо
Цитата(Ripperr @  10.1.2009,  18:28 Найти цитируемый пост)
query1:='SELECT * FROM Statist WHERE  CallDate + CallBegin >= ''01/01/2008 00:00'' AND CallDate + CallBegin <= ''12/22/2008 23:59'''; 


PM MAIL   Вверх
Ripperr
Дата 11.1.2009, 03:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 1.11.2008

Репутация: нет
Всего: нет



Цитата(pseud @ 10.1.2009,  19:13)
Код

SELECT 
  * 
FROM 
  Statist 
WHERE  
  CallDate + CallBegin >= '01/01/2008' 
  AND CallDate + CallBegin <= '12/22/2008'

просто по датам работает а при наложении времни показывает чуш

PM MAIL ICQ   Вверх
pseud
Дата 12.1.2009, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 16
Всего: 40



Цитата(Ripperr @  11.1.2009,  03:31 Найти цитируемый пост)
просто по датам работает а при наложении времни показывает чуш


т.е. таки показывает? отбирает? может все таки CallDate + CallBegin - переосмыслить?


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
Ripperr
Дата 12.1.2009, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 1.11.2008

Репутация: нет
Всего: нет



чтото выбирает но несовсем коректо пишу с  1 по 3 в реальности отбражает с 2 по 3
PM MAIL ICQ   Вверх
pseud
Дата 12.1.2009, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 16
Всего: 40



Цитата(Ripperr @  12.1.2009,  12:35 Найти цитируемый пост)
чтото выбирает но несовсем коректо пишу с  1 по 3 в реальности отбражает с 2 по 3

ты про числа или про время?


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
Ripperr
Дата 12.1.2009, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 1.11.2008

Репутация: нет
Всего: нет



Числа в запросе с 1/01/2009 по 3/01/2009 а в результате с 2 по 3 щас выложу сурс...

http://upload.com.ua/get/900643896/

запросы добавляй просто в ADOQuery и отредактируй путь к базе в Adoconnection


Это сообщение отредактировал(а) Ripperr - 12.1.2009, 20:40
PM MAIL ICQ   Вверх
pseud
Дата 13.1.2009, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 16
Всего: 40



Цитата(Ripperr @  12.1.2009,  20:37 Найти цитируемый пост)
http://upload.com.ua/get/900643896/


upload.com.ua
не хватило меня на просмотр ссылок на сомнительные ресурсы, не гарантирующий таки загруку.
залей плиз на ifolder.ru


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
Akella
Дата 13.1.2009, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



pseud, нормально там всё качается
PM MAIL   Вверх
pseud
Дата 13.1.2009, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 16
Всего: 40



первые грабли ADO
в твой TADOQuery ввел запрос без параметров:
Код

SELECT 
      CallDate
     , CallBegin
     , UserName
     , Duration
     , PhoneNumber
     , Country
  FROM Statist
 WHERE CallDate + CallBegin >= '01.01.1990'
  AND CallDate + CallBegin <= '01.01.2050'

получил интересную картину по CallBegin (который якобы просто Time)
user posted image


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
pseud
Дата 13.1.2009, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 16
Всего: 40



с параметрами - НЕ РАБОТАЕТ
копать здесь:
  во-первых не
Код

SELECT 
  CallDate
  , CallBegin
  , UserName
  , Duration
  , PhoneNumber
  , Country
FROM 
  Statist
WHERE 
  CallDate + CallBegin >= ':firstDate'
  AND CallDate + CallBegin <= ':secondDate'

а
Код

SELECT 
  CallDate
  , CallBegin
  , UserName
  , Duration
  , PhoneNumber
  , Country
FROM 
  Statist
WHERE 
  CallDate + CallBegin >= :firstDate
  AND CallDate + CallBegin <= :secondDate

кликаем в дизайне в Parameters и видим что наши параметры типа 
DataType = ftFixedChar
даже если руками ставим ftDate(ftDateTime)
все-равно лажа. ПУСТО.
Parameters.ParseSQL(SQL.Text,True) - возвращает на местах наших параметров ?

РЕШЕНИЕ:
Код

procedure TMainForm.UpdateSourceActionExecute(Sender: TObject);
const
  S_SQL = 'SELECT' + #13#10 +
          '  CallDate' + #13#10 +
          '  , CallBegin' + #13#10 +
          '  , UserName' + #13#10 +
          '  , Duration' + #13#10 +
          '  , PhoneNumber' + #13#10 +
          '  , Country' + #13#10 +
          'FROM' + #13#10 +
          '  Statist' + #13#10 +
          'WHERE' + #13#10 +
          '  CallDate + CallBegin >= %d' + #13#10 +
          '  AND CallDate + CallBegin <= %g';
var
  c: Char;
begin
  with MainDataModule.TestQuery do
  begin
    Active := False;
    c := DecimalSeparator;
    try
      DecimalSeparator := '.';
      SQL.Text := Format(S_SQL, [Trunc(StartDate.Date), Trunc(EndDate.Date) + 1 - 1/(24*60*60*1000)]);
      ShowMessage(SQL.Text);
    finally
      DecimalSeparator := c;
    end;
    Active := True;
  end;
end;


выводы - с парадоксом следует работать через бде (правда его придется ставить на все машины)


Это сообщение отредактировал(а) pseud - 13.1.2009, 15:42


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
Ripperr
Дата 13.1.2009, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 1.11.2008

Репутация: нет
Всего: нет



О спасибо болшое я поробую просто я с таким сталкнулся первый раз и с бде некогда не работал.... Спасибо за основательный подход
PM MAIL ICQ   Вверх
Ripperr
Дата 14.1.2009, 04:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 1.11.2008

Репутация: нет
Всего: нет



А как всетаки быть  с временем мне надо ограничивать типо с 1.01.09 12:00 по 10.01.09 12:00
PM MAIL ICQ   Вверх
pseud
Дата 14.1.2009, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 16
Всего: 40



замени строки
Код

          '  CallDate + CallBegin >= %g' + #13#10 +
          '  AND CallDate + CallBegin <= %g';

и
Код

      SQL.Text := Format(S_SQL, [Trunc(StartDate.Date) + Frac(StartTime.Time), Trunc(EndDate.Date) + Frac(EndTime.Time)]);

StartTime и EndTime - контролы для ввода времени


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
Ripperr
Дата 14.1.2009, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 1.11.2008

Репутация: нет
Всего: нет



Спс шас попробую а что значит "#13#10 "


а как можно видоизменить просто я хотел чтобы в зависимостри от того что выбрал видоизменялся запрос


Так у меня было ранше ....

Код

function QueryGeneration(query:string): string;
{разбивка строки, пустые строки НЕ добавляются}
var
ifbegin: Bool;
day_from, month_from, year_from, day_to, month_to, year_to :integer;
begin
ifbegin:=False;
// если надо искать по дате
if ifbegin=False  then  ifbegin:=True else query:=query+' AND ';   //Первый запрос ?
query:=query+' CallDate BETWEEN :firstDate AND :secodDate';
//query:=query+' CallDate <= :firstDate AND CallDate =>  :secodDate';

// если надо искать по времени
if form1.CheckBox2.Checked=TRUE then
begin
if ifbegin=False then  ifbegin:=True else query:=query+' AND ';   //Первый запрос ?
end;

// если надо искать в Группе
if form1.ComboBox1.Text <> 'Все группы' then
begin
if ifbegin=False then  ifbegin:=True else query:=query+' AND ';   //Первый запрос ?
query:=query+' Groups='''+form1.ComboBox1.Text+''' ';
end;
// если надо искать Определенного Абонента
if form1.ComboBox2.Text <> 'Все абоненты' then
begin
if ifbegin=False then  ifbegin:=True else query:=query+' AND ';   //Первый запрос ?
query:=query+' USERname='''+form1.ComboBox2.Text+''' ';
end;

// если надо искать Определенную Гор. линию
if form1.ComboBox3.Text <> 'Все гор. линии' then
begin
if ifbegin=False then  ifbegin:=True else query:=query+' AND ';   //Первый запрос ?
query:=query+' TEL='''+form1.ComboBox3.Text+''' ';
end;
 result:=query;
end;



Код

procedure TForm1.Image5Click(Sender: TObject);
var
query1: string;
query2: string;
a,b: string;
begin
// Базовый запрос
//query1:=QueryGeneration('SELECT CallDate, UserName, Duration, PhoneNumber, Country, ROUND(SumMoney,2) AS SumMoney FROM Statist WHERE ');
query2:=QueryGeneration('SELECT ROUND(SUM(SumMoney),2) AS Total FROM Statist WHERE ');
query1:=QueryGeneration('SELECT CallDate, UserName, Duration, PhoneNumber, Country, ROUND(SumMoney,2) AS SumMoney FROM Statist WHERE ');
form1.Memo1.Text:=query1;

//ВЫПОЛНЕНИЕ ЗАПРОСА
form1.ADOQuery1.SQL.Clear;
form1.ADOQuery1.SQL.Add(query1);
form1.ADOQuery1.Parameters.ParamByName('firstDate').Value:=' '+SplitString(datetostr(form1.DateTimePicker1.Date),'.',1)+'/'+SplitString(datetostr(form1.DateTimePicker1.Date),'.',0)+'/'+SplitString(datetostr(form1.DateTimePicker1.Date),'.',2)+'';
form1.ADOQuery1.Parameters.ParamByName('secodDate').Value:=' '+SplitString(datetostr(form1.DateTimePicker2.Date),'.',1)+'/'+SplitString(datetostr(form1.DateTimePicker2.Date),'.',0)+'/'+SplitString(datetostr(form1.DateTimePicker2.Date),'.',2)+'';
//form1.ADOQuery1.Parameters.ParamByName('firstDate').Value:='01/01/2008';
//form1.ADOQuery1.Parameters.ParamByName('secodDate').Value:='12/31/2008';
form1.ADOQuery1.Active:=true;
//ShowMessage(form1.ADOQuery1.sql.GetText);
//--ВЫПОЛНЕНИЕ ЗАПРОСА



//КАЛЬКУЛЯЦИЯ СУММЫ
DataModule3.ADOQuery1.SQL.Clear;
DataModule3.ADOQuery1.SQL.Add(query2);
DataModule3.ADOQuery1.Parameters.ParamByName('firstDate').Value:=' '+SplitString(datetostr(form1.DateTimePicker1.Date),'.',1)+'/'+SplitString(datetostr(form1.DateTimePicker1.Date),'.',0)+'/'+SplitString(datetostr(form1.DateTimePicker1.Date),'.',2)+'';
DataModule3.ADOQuery1.Parameters.ParamByName('secodDate').Value:=' '+SplitString(datetostr(form1.DateTimePicker2.Date),'.',1)+'/'+SplitString(datetostr(form1.DateTimePicker2.Date),'.',0)+'/'+SplitString(datetostr(form1.DateTimePicker2.Date),'.',2)+'';
//form1.ADOQuery1.Parameters.ParamByName('firstDate').Value:='01/01/2008';
//form1.ADOQuery1.Parameters.ParamByName('secodDate').Value:='12/31/2008';
DataModule3.ADOQuery1.Active:=true;
form1.Label20.Caption:=DataModule3.ADOQuery1.Fields.FieldByName('Total').Asstring;
//--КАЛЬКУЛЯЦИЯ СУММЫ
end;


Это сообщение отредактировал(а) Ripperr - 14.1.2009, 16:16
PM MAIL ICQ   Вверх
pseud
Дата 14.1.2009, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

Репутация: 16
Всего: 40



Цитата(Ripperr @  14.1.2009,  15:45 Найти цитируемый пост)
а как можно видоизменить просто я хотел чтобы в зависимостри от того что выбрал видоизменялся запрос


читай мою подпись.
от много жирного бывет изжога.
во-первых. вопрос решен. ставь птицу.
во-вторых. ты издеваешься.
в-третьих. если таки ты и вправду не в силах разложить свою кашу по тарелкам, то помогу разложить позже... возможно... если будет настроение...


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
Ripperr
Дата 14.1.2009, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 1.11.2008

Репутация: нет
Всего: нет



похоже я уже тебя достал =) ладно буду мучать мозг...
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.1741 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.