Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.04.24;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.007 c
1-76931
Tayfun
2003-04-14 14:42
2003.04.24
Как сделать Screen Saver


3-76830
Alexander1966
2003-04-07 18:33
2003.04.24
форматирование отображения ftFloat в TDBGrid


1-76920
Buggy
2003-04-14 20:47
2003.04.24
Работа с Excel


14-77077
Fiximil
2003-04-05 12:05
2003.04.24
Помогите осуществить сложную задачу...


9-76738
Shipilin Sergey
2002-11-22 21:18
2003.04.24
Создание стратегии!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский