Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.04.24;
Скачать: CL | DM;

Вниз

select and between   Найти похожие ветки 

 
Roka ©   (2003-04-04 21:42) [0]

Нужно отобрать из базы записи, попадающие в интервал дат между датами в DateEdit
Где порылась ошибка?
MyQuery.SQL.Add("select count(*) as Colich from zzz where BETWEEN(pole,DateEdit1.Date,DateEdit2.Date)");
Пишет "Invalid use of keyword. Token: BETWEEN(pole,DateEdit1.Date,DateEdit2.Date)"
В данном случае поле pole в формате даты, но бывает что приходится работать с символьными
полями приводя их к дате.
Вобще помогайте. Что-то после фокса никак неосвоюсь.

P.S.: Как забить на региональные установки при работе с датой? Т.е. всегда работать
с разделителем ".", независимо установлено ли "/" или "-".


 
Cranium ©   (2003-04-04 22:02) [1]


> P.S.: Как забить на региональные установки при работе с
> датой? Т.е. всегда работать
> с разделителем ".", независимо установлено ли "/" или "-".

Через предопределенные переменные форматов вот к примеру
var DateSeparator: Char;
^^^^^^^^^^^^^^^^^^^^^^^^^^
Это для даты.........

var ShortDateFormat: string;
var LongDateFormat: string;
var TimeSeparator: Char;
var TimeAMString: string;
var TimePMString: string;
var ShortTimeFormat: string;
var LongTimeFormat: string;

var ShortMonthNames: array[1..12] of string;
var LongMonthNames: array[1..12] of string;
var ShortDayNames: array[1..7] of string;
var LongDayNames: array[1..7] of string;
var SysLocale: TSysLocale;
var EraNames: array[1..7] of string;
var EraYearOffsets: array[1..7] of Integer;
var TwoDigitYearCenturyWindow: Word = 50;






 
Johnmen ©   (2003-04-05 02:56) [2]

>"select count(*) as Colich from zzz where BETWEEN
>(pole,DateEdit1.Date,DateEdit2.Date)"

Ты не находишь странным, что сервер вдруг должен что-то знать про твое приложение ? И не стоит ли подучить SQL ?

Короче - "Читать, читать, читать..."..................



 
ЮЮ ©   (2003-04-05 02:58) [3]

Это текст запроса, переданный БДЕ.

select count(*) as Colich from zzz where BETWEEN(pole,DateEdit1.Date,DateEdit2.Date)

Как ты думаешь, что означает на SQL выражение вида "DateEdit1.Date"? Правильно, поле Date таблицы DateEdit1! Ты это подразумевал, когда писал запрос?

Как правильно составить запрос.
Написать его текст в SQL Explorer-е, подставляя реальные данные в условиях и добиться правильного выполнения:

Сначала
select *from zzz where pole BETWEEN "01.01.2003" AND "31.12.2003"

Затем, когда убедишься, что это именно те записи

select count(*) as Colich from zzz where pole BETWEEN "01.01.2003" AND "31.12.2003"

Теперь фактические значения заменяешь на параметры

select count(*) as Colich from zzz where pole BETWEEN :Date1 AND :Date2

и кладем текст запроса в Query.SQL. Определяем типы параметров в Query.Params.

Теперь когда надо изменить параметры пишем
qMain.Close;
qMain.Params[0].asDate := DateEdit1.Date;
qMain.Params[1].asDate := DateEdit2.Date;
qMain.Open;








 
roka ©   (2003-04-07 21:04) [4]

Срасибо ЮЮ, размусолил. Стало прорисовываться :)
Но дальше оказалось хуже. Книжек нет, а почитать негде.
А SQL в VFP я так понимаю нестандартный ибо половина моих запросов непроходит.
Поэтому еще тут попристаю.
Вобщем поле "pole" стринговое содержащее данные типа:
"??????????YYYYMMDD??????????????", где YYYY-год, MM-месяц, DD-день
Нужно участок YYYYMMDD перевести в формат даты и проверить на вхождение в
интервал дат DateEdit1.Date и DateEdit2.Date
MyQuery.Close;
MyQuery.SQL.Clear;
MyQuery.SQL.Add("select count(*) as Colichdoc from zzz.dbf where StrToDate(midstr(Table2.FieldByName("pole").AsString,17,2)+"."+midstr(Table2.FieldByName("pole").AsString,15,2)+"."+midstr(Table2.FieldByName("pole").AsString,11,4)) BETWEEN :Date1 AND :Date2");
MyQuery.Params[0].AsDate := DateEdit1.Date;
MyQuery.Params[1].asDate := DateEdit2.Date;
MyQuery.Open;
colich:= MyQuery.FieldByName("colichdoc").AsInteger;


 
ЮЮ ©   (2003-04-08 03:36) [5]

>Книжек нет, а почитать негде.

C:\Program Files\Common Files\Borland Shared\BDE\LOCALSQL.HLP

>"where StrToDate("
Опять смешиваешь SQL и код Delphi :-)

StrToDate(<string>) в D <==> CAST(<string> AS DATE)

midstr(Table2.FieldByName("pole").AsString,17,2) <==>
SUBSTRING(POLE FROM 12 FOR 2)





Страницы: 1 вся ветка

Текущий архив: 2003.04.24;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.017 c
6-77049
Adventure
2003-03-03 11:36
2003.04.24
Предложите идею, как реализовать....


1-76944
balykovdron
2003-04-12 12:15
2003.04.24
Помогите новичку вызвать поток.


14-77093
Сергей Чурсин
2003-04-02 20:50
2003.04.24
---|Ветка была без названия|---


7-77209
Tylli
2003-03-05 08:23
2003.04.24
Скрытие установленных программ


1-76953
Pitay
2003-04-12 17:56
2003.04.24
Создание компонент во время работы проложения