Здравствуйте!
C#
Создал базу данных в Аксессе, провёл связи между таблицами так, как мне надо, создал запрос на выборку - тоже такой, какой мне нужен. Выборка(либо по И, либо по ИЛИ) идёт по 7 полям(параметрам). Так вот, у меня параметры зависят от наполнения текстбоксов в программе, но когда текстбокс пустой - прога вылетает с эксепшном "Параметр такой-то не имеет значения по умолчанию" - ругается так всякий раз, когда один(или несколько) текстбоксов пустые.
Запрос выглядит так:
[code=sql]
SELECT tindexes.who_not, twho.who, tindexes.act_not, tact.act, tindexes.obj_not, tobj.obj, tindexes.kind_not, tkind.kind, tindexes.gde_not,
tgde.gde, tindexes.kogda_not, tkogda.kogda, tother.other
FROM tother INNER JOIN (tkogda INNER JOIN (tgde INNER JOIN (tkind INNER JOIN (tobj
INNER JOIN (twho INNER JOIN (tact INNER JOIN tindexes ON
tact.id = tindexes.id_act) ON
twho.id = tindexes.id_who) ON
tobj.id = tindexes.id_obj)
ON
tkind.id = tindexes.id_kind) ON
tgde.id = tindexes.id_gde) ON
tkogda.id = tindexes.id_kogda) ON
tother.id = tindexes.id_other
WHERE (((tindexes.who_not)=False) AND ((twho.who)=@who) OR ((tindexes.act_not)=False) AND ((tact.act)=@act) OR ((tindexes.obj_not)=False) AND
((tobj.obj)=@obj) OR ((tindexes.kind_not)=False) AND ((tkind.kind)=@kind) OR ((tindexes.gde_not)=False) AND ((tgde.gde)=@gde) OR
((tindexes.kogda_not)=False) AND ((tkogda.kogda)=@kogda) OR ((tother.other)=@other))
[/code]
При помощи ArrayList я смог реализовать правильную подстановку частей запроса(в зависимости о того - пустой(ые) текстбокс(ы) или нет), но только во второй половине(после WHERE), но до WHERE это сделать, помоему, нереально(изза геморроя с записями в скобках).
Так вот, вопрос такой - как заставить её корректно работать(корректно и без проблем делать выборку по набранным параметрам) при некоторых пустых текстбоксах?
Ответы (4)
RSSr-ergey-ibalnikov
SELECT tindexes.who_not, twho.who, tindexes.act_not, tact.act, tindexes.obj_not, tobj.obj, tindexes.kind_not, tkind.kind, tindexes.gde_not,
tgde.gde, tindexes.kogda_not, tkogda.kogda, tother.other
FROM tother,
tkogda,
tgde,
tkind,
tobj,
twho,
tact,
tindexes
WHERE 1=1
and tact.id = tindexes.id_act
and (@act is null or tact.act = @act)
and twho.id = tindexes.id_who
and (@who is null or twho.who = @who)
and tobj.id = tindexes.id_obj
and (@obj is null or tobj.obj = @obj)
and tkind.id = tindexes.id_kind
and (@kind is null or tkind.kind = @kind)
and tgde.id = tindexes.id_gde
and (@gde is null or tgde.gde=@gde)
and tkogda.id = tindexes.id_kogda
and (@kogda is null or tkogda.kogda=@kogda)
and tother.id = tindexes.id_other
and (@other is null or tother.other=@other)
ivq
kanados
atealus
Вопрос закрыт