Главная страница
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.012 c
6-77057
AlexeyBykov
2003-02-27 20:08
2003.04.24
Организация многопотоковой докачки файлов по локальной сети


7-77186
kalishenko stas
2003-03-05 18:56
2003.04.24
Печать на принтер


7-77196
velk
2003-03-06 08:31
2003.04.24
Как перехватить все задания на печать


3-76836
Vovaka
2003-04-07 10:18
2003.04.24
BDE - ошибка Insufficient memory for this operation


1-77030
OlkaGTS
2003-04-14 15:31
2003.04.24
Как получить объект, зная Handle?