Форум: "Базы";
Текущий архив: 2002.10.14;
Скачать: [xml.tar.bz2];
ВнизФильтрация Найти похожие ветки
← →
RDA (2002-09-20 08:16) [0]Проблемы с фильтрацией в Accsess через ADO. При попытке установить фильтр в дочерней таблице - ошибка "Нельзя фильтровать в дочерней таблице" - так ли это? И проблема фильтрации запроса по дате. Пишу так
Filter:="DATA>="""+Дата1+""""+" AND DATA<="""+Дата2+"""";
← →
ЮЮ (2002-09-20 09:15) [1]"Нельзя фильтровать в дочерней таблице",т.к.,вероятно, установлена фильтрация, обеспечивающая связь Master-Detail
← →
RDA (2002-09-20 09:39) [2]procedure TfmFilter.SetFilter; //формирование строки фильтра
var
Str:String;
begin
with DM do //ДатаМодуль
begin
QueryFilter.Filtered:=False;
//Первый параметр - Название плательщика
if ENazv_P.Text<>"" then Str:="NAZV_P="""+ENazv_P.Text+"""";
//Второй параметр - Счет плательщика
if ERRax_P.Text<>"" then
begin
if Str<>"" then Str:=Str+" AND RRAX_P="""+ERRax_P.Text+""""
else Str:="RRax_P="""+ERRax_P.Text+"""";
end;
//Третий параметр - Название получателя
if ENazv_O.Text<>"" then
begin
if Str<>"" then Str:=Str+" AND NAZV_O="""+ENazv_O.Text+""""
else Str:="NAZV_O="""+ENazv_O.Text+"""";
end;
//Четвертый параметр - Счет получателя
if ERRax_O.Text<>"" then
begin
if Str<>"" then Str:=Str+" AND RRAX_P="""+ERRax_O.Text+""""
else Str:="RRax_O="""+ERRax_P.Text+"""";
end;
// До этих пор все работает нормально а дальше ошибка
//"Приложение использует аргументы, которые имеют неверный тип, выходят за пределы допустимого диапазона или вызывают конфликт друг с другом."
//Две даты - от и до
if (Start_Date.Text<>"") and (Stop_Date.Text<>"") then
begin
if Str<>"" then Str:=Str+" DATA >="""+Start_Date.Text+""""+" AND DATA <="""+Stop_Date.Text+""""
else Str:="DATA >="""+Start_Date.Text+""""+" AND DATA <="""+Stop_Date.Text+"""";
end;
if (Start_Date.Text<>"") and (Stop_Date.Text="") then
begin
if Str<>"" then Str:=Str+" DATA >="""+Start_Date.Text+""""
else Str:="DATA >="""+Start_Date.Text+"""";
end;
if (Start_Date.Text="") and (Stop_Date.Text<>"") then
begin
if Str<>"" then Str:=" DATA <="""+Stop_Date.Text+""""
else Str:="DATA <="""+Stop_Date.Text+"""";
end;
QueryFilter.Filter:=Str;
QueryFilter.Filtered:=True;
end;
end;
← →
Johnmen (2002-09-20 09:41) [3]>ЮЮ © (20.09.02 09:15)
Именно так ! Внутренняя реализация Master-Detail построена, естественно, на фильтрах.
>RDA ©
>Filter:="DATA>=""""+Дата1+"""+" AND DATA<="""+Дата2+"""";
Каковы значения Дата1 и Дата2 ?
← →
RDA (2002-09-20 09:50) [4]Текстовое представление даты.
← →
ЮЮ (2002-09-20 09:54) [5]В Accese формат даты несколько специфичен
#mm/dd/yyyy#, а не привычный "dd.mm.yyyy".
и спокойно пропускает #dd/mm/yyyy#. Так что в случае #11/12/2002#
не поймешь, то ли это 11 дек., толи 12 ноя.
← →
Johnmen (2002-09-20 09:57) [6]>RDA © (20.09.02 09:50)
>Текстовое представление даты.
Ты глумишься ? Или считаешь меня совсем дебилом ?
Я спрашивал про формат !!!
← →
RDA (2002-09-20 10:15) [7]>>Johnmen
Че ты нервничаешь, не понял я вопроса.
И если быть точным ты спрашивал про значения. Написал бы я тебе 18.09.02 (Это значение) - и что. Судя по ответу ЮЮ формат должен выглядеть #18.09.02#.
← →
Johnmen (2002-09-20 10:46) [8]>RDA ©
Да не нервничаю...
Если бы сразу привел значение (типа "18.09.02 "), то стало бы все ясно...
Впрочем, ответ уже дан ЮЮ © (20.09.02 09:54) :)))
← →
ЮЮ (2002-09-20 10:48) [9]Cудя по моему ответу, он должен быть #9/18/2002# :-)
← →
RDA (2002-09-20 10:55) [10]>>Johnmen, ЮЮ - Черт с ней с фильтрацией перешел на запрос и снова трабл. Помогите разобраться что не так.
Пишу
SELECT N_PLAT, NOMER, DATA, NAZV_P, RRAX_P, NAZV_O, RRAX_O, SUMA, PRIZN FROM PLAT WHERE (P_PRED="+PREDN_PRED.AsString+")"+" AND (NAZV_P="+ENazv_P.Text+")"
Пишет - Пропущен оператор в секции
(P_PRED="+PREDN_PRED.AsString+")"+" AND (NAZV_P="+ENazv_P.Text+")"
← →
Johnmen (2002-09-20 11:06) [11](P_PRED="""+PREDN_PRED.AsString+""")"+" AND (NAZV_P="""+ENazv_P.Text+""")"
← →
RDA (2002-09-20 12:02) [12]>>Johnmen - Спасибо.
Все, задолбался.
Теперь ошибка "Несоответствие типов данных в условии отбора данных".
Какое несоответствие не пойму все String в запросе.
← →
ЮЮ (2002-09-20 12:11) [13]P_PRED и NAZV_P какого типа?
← →
sniknik (2002-09-20 12:14) [14]RDA ©
хочеш пришлю програмку для тестов запросов? приблизительный аналог Query Analizer-а из MSSQL только для разных баз. изначально именно под Access. архив 400кб. глядиш поможет.
← →
RDA (2002-09-20 12:24) [15]>> ЮЮ
P_PRED и NAZV_P оба длинное целое.
Ну да ладно. Переделал через параметр - работает но проблема снова с датой. Вот код:
procedure TfmFilter.SetFilter;
const
Text="SELECT N_PLAT, NOMER, DATA, NAZV_P, RRAX_P, NAZV_O, RRAX_O, SUMA, PRIZN FROM PLAT WHERE (P_PRED=:PRED)";
var
Str:String;
begin
with DM do
begin
QueryFilter.Active:=False;
QueryFilter.SQL.Clear;
if ENazv_P.Text<>"" then Str:=Str+" AND (NAZV_P="""+ENazv_P.Text+""")";
if ERRax_P.Text<>"" then Str:=Str+" AND (RRAX_P="""+ERRax_P.Text+""")";
if ENazv_O.Text<>"" then Str:=Str+" AND (NAZV_O="""+ENazv_O.Text+""")";
if ERRax_O.Text<>"" then Str:=Str+" AND (RRAX_O="""+ERRax_O.Text+""")";
//Все работает нормально
//Дата трабл.
if Start_Date.Text<>"" then Str:=Str+" AND (DATA>="""+Start_Date.Text+""")";
if Stopt_Date.Text<>"" then Str:=Str+" AND (DATA<="""+Stopt_Date.Text+""")";
QueryFilter.SQL.Add(Text);
QueryFilter.Parameters.ParamByName("PRED").Value:=PREDN_PRED.AsInteger;
QueryFilter.SQL.Append(Str);
QueryFilter.Active:=True;
end;
end;
Пробовал менять сроки с датой на
if Start_Date.Text<>"" then Str:=Str+" AND (DATA>="""+"#"+Start_Date.Text+"#"+""")";
if Stopt_Date.Text<>"" then Str:=Str+" AND (DATA<="""+"#"+Stopt_Date.Text+"#"+""")";
Не помогает. В базе установлен краткий формат даты "dd.mm.yy" - и именно так, в значении "19.09.02".
Всем большое спасибо за участие в решении проблемы.
← →
Anatoly Podgoretsky (2002-09-20 12:28) [16]Не стоит в запрос напрямую передавать дату, используй параметры
← →
ЮЮ (2002-09-20 12:31) [17]>P_PRED и NAZV_P оба длинное целое
Тогда не нужны "обрамляющие" кавычки для числа, как не нужны они и для даты
← →
RDA (2002-09-20 18:03) [18]procedure TfmFilter.SetFilter;
const
Text="SELECT N_PLAT, NOMER, DATA, NAZV_P, RRAX_P, NAZV_O, RRAX_O, SUMA, PRIZN FROM PLAT WHERE (P_PRED=";
var
Str:String;
begin
with DM do
begin
QueryFilter.Active:=False;
QueryFilter.SQL.Clear;
if ENazv_P.Text<>"" then Str:=Str+" AND (NAZV_P="""+ENazv_P.Text+""")";
if ERRax_P.Text<>"" then Str:=Str+" AND (RRAX_P="""+ERRax_P.Text+""")";
if ENazv_O.Text<>"" then Str:=Str+" AND (NAZV_O="""+ENazv_O.Text+""")";
if ERRax_O.Text<>"" then Str:=Str+" AND (RRAX_O="""+ERRax_O.Text+""")";
//Сдесь ошибка у меня
if Start_D.Text<>"" then Str:=Str+" AND (DATA>="+Start_D.Date+")";
if Stopt_D.Text<>"" then Str:=Str+" AND (DATA<="+Stopt_D.Date+")";
//
QueryFilter.SQL.Add(Text+PREDN_PRED.AsString+")"+Str);
QueryFilter.Active:=True;
end;
end;
Пробовал по разному - не получаеться. Подскажите если знаете.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.10.14;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.009 c