Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с SQL запросом в C# 
:(
    Опции темы
LeeleeKeelee
Дата 13.2.2009, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 2.11.2008

Репутация: нет
Всего: нет



Здравствуйте!
C#
Создал базу данных в Аксессе, провёл связи между таблицами так, как мне надо, создал запрос на выборку - тоже такой, какой мне нужен. Выборка(либо по И, либо по ИЛИ) идёт по 7 полям(параметрам). Так вот, у меня параметры зависят от наполнения текстбоксов в программе, но когда текстбокс пустой - прога вылетает с эксепшном "Параметр такой-то не имеет значения по умолчанию" - ругается так всякий раз, когда один(или несколько) текстбоксов пустые.

Запрос выглядит так: 
Код

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))


При помощи ArrayList я смог реализовать правильную подстановку частей запроса(в зависимости о того - пустой(ые) текстбокс(ы) или нет), но только во второй половине(после WHERE), но до WHERE это сделать, помоему, нереально(изза геморроя с записями в скобках).

Так вот, вопрос такой - как заставить её корректно работать(корректно и без проблем делать выборку по набранным параметрам) при некоторых пустых текстбоксах?

Это сообщение отредактировал(а) LeeleeKeelee - 13.2.2009, 22:32
PM MAIL   Вверх
thomas
Дата 14.2.2009, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

Репутация: 35
Всего: 65



LeeleeKeelee, 
Привет.
Твой хитрый запрос не осилил, много букв.  smile 
Но раз такой запрос есть, то значит он тебе нужен.   smile 
Твоя проблема, как я понял, в том что запрос может содержать в себе от одного до семи параметров на выборку.  smile 
Но эти параметры пользователь может выбрать либо все либо часть. И в этом случае у тебя вылетает исключение.
Одним из вариантов решения данной проблемы, по моему, являеться следующее:
- тебе надо сделать таблицу параметров и запросов. Т.е. в табличной форме отобразить как выглядит запрос при наличии того или иного параметра. (на бумаге, для наглядности)
- на основании этой таблицы написать достаточное кол-во выражений if{} elseif{} else{}, возможно  с многоступенчатыми вложениями условий  для выводы правильного запроса, содержащего только указанные в комбобоксах параметры. (другими словами проверять комбобоксы: выбран параметр - запрос такой, не выбран смотри на следующий комбобокс и т.д.)

или вместо if подумать над select case. 

Подумай в этом направлении.
Успехов.  smile 



--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
LeeleeKeelee
Дата 14.2.2009, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 2.11.2008

Репутация: нет
Всего: нет



Спасибо smile

Мысль про if else у меня была, но это адская жесть(этож сколько их нужно написать, да ещё и чтобы не перепутать ничего)! ) Просто думал, что есть решение попроще)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0473 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.