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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос про MySQL и Select в VB6 
:(
    Опции темы
velltar
Дата 15.4.2010, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всем привет!
Народ помогите, реально завис на следующей проблеме и не знаю даже как в поиске набрать чтобы на путь истинный выйти smile

Есть на удаленной машине база MySQL с такой таблицей
Код

CREATE TABLE IF NOT EXISTS `Agregat` (
  `ID` varchar(8) NOT NULL,
  `NameAgregat` varchar(64) default NULL,
  `DescrAgregat` varchar(5000) default NULL,
  `PhotoAgregat` varchar(100) default NULL,
  `StoimostAgregat` varchar(100) default NULL,
  PRIMARY KEY  (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;


Так вот когда нужно вытащить например все записи у которых StoimostAgregat равен 1500 тут все как бы просто
Код

rstRecordSet.OpenRs "SELECT * FROM Agregat WHERE StoimostAgregat=1500", conConnection
If Not rstRecordSet.EOF Then
    rstRecordSet.MoveFirst
и т.д.


А вот что делать и как построить запрос к базе данных если мне нужно вытянуть из базы данных записи построенные по фильтру, т.е. например в проге я выбрал типа вывести мне все агрегаты у которых есть фото и у которых стоимость 1500, а в другой раз выбрал например вывести все записи без описаний, но с фотографиями и стоимостью 2500 кпримеру.
Как понимаете таким образом можно несметное кол-во комбинаций придумать в фильтре и тупо было бы под каждую мыслимую комбинацию писать отдельный запрос и ведь должно быть что то такое что бы помогло бы в этой ситуации. В частности можно былобы построить запрос в которой былибы перечисленны все критерии:

Код

rstRecordSet.OpenRs "SELECT * FROM Agregat WHERE NameAgregat=" & Quote(name) & " AND DescrAgregat=" & Quote(desc) & " AND PhotoAgregat=" & Quote(foto) & " AND StoimostAgregat=" & Quote(stoim) , conConnection
If Not rstRecordSet.EOF Then
    rstRecordSet.MoveFirst 


Но тогда возникает проблема - мне в данном случаи нужны записи в которых StoimostAgregat равен 1500 и DescrAgregat например 16980 (Это неважноsmile), а остальные переменные name, foto остаються пустыми и когда отправляется запрос к базе данных то там соответственно по полям NameAgregat PhotoAgregat ищются записи с пустими полями. ТАК КАК СДЕЛАТЬ ЧТОБЫ ПРИ ТАКОМ ЗАПРОСЕ В ЭТИХ ПОЛЯХ НИЧЕГО НЕ ИСКАЛОСЬ, А ТОЧНЕЕ ВЫБИРАЛИСЬ ВСЕ ЗАПИСИ. 

Наверное можно сказать теперь проще - как создать динамическую строку запроса к базе данных в которую я сам включаю программно только те поля по которым хочу вести поиск?

Надеюсь объяснил суть проблемы подробно. Сам новичек и не совсем может быть верно владею терминалогией smile
Буду благодарен помощи старших товарищей.
Всем заранее спасибо за помощь.

Это сообщение отредактировал(а) velltar - 15.4.2010, 23:00
PM MAIL   Вверх
Akina
Дата 16.4.2010, 07:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

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



Цитата(velltar @  15.4.2010,  23:20 Найти цитируемый пост)
когда нужно вытащить например все записи у которых StoimostAgregat равен 1500 тут все как бы просто

Ошибка. См. тип данных в полях.

Цитата(velltar @  15.4.2010,  23:20 Найти цитируемый пост)
КАК СДЕЛАТЬ ЧТОБЫ ПРИ ТАКОМ ЗАПРОСЕ В ЭТИХ ПОЛЯХ НИЧЕГО НЕ ИСКАЛОСЬ, А ТОЧНЕЕ ВЫБИРАЛИСЬ ВСЕ ЗАПИСИ. 

Динамически строить строку запроса, вставляя в неё только введённые условия отбора.

Тема не имеет отношения к Visual Basic. Перенесено.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
FallFan
Дата 16.4.2010, 08:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Решить проблему можно путем ввода в функции вида:

Код

MakeMySQLString (Param1 as string, Param2 as string,..., Paramn as string) as String
 

Данные в эту функцию поступают из формы поиска в VB, а сама функция проверят значения параметра и формирует строку запроса, т.е. напичкана операторами if:

Код

If Paramn <> "" Then
   MakeMySQLString  = MakeMySQLString + ...
End if


Затем подставляется:

Код

rstRecordSet.OpenRs MakeMySQLString (Param1 as string, Param2 as string,..., Paramn as string)
If Not rstRecordSet.EOF Then
    rstRecordSet.MoveFirst 


Также если, задуматься о расширяемости программы без переписывании кода, можно в качестве параметра функции вводить 2-мерный массив (Название поля, значение поля)

Это сообщение отредактировал(а) FallFan - 16.4.2010, 08:04
PM   Вверх
Akina
Дата 16.4.2010, 08:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

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



Цитата(FallFan @  16.4.2010,  09:03 Найти цитируемый пост)
если, задуматься о расширяемости программы без переписывании кода, можно в качестве параметра функции вводить 2-мерный массив (Название поля, значение поля)

Расширяемость НА КЛИЕНТЕ? эка ты хватил... я понимаю, предложить CREATE PROCEDURE/FUNCTION/VIEW с учётом (не)указывания условий отбора на сервере...
Или речь об универсализации функции динамического построения условия отбора? 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
FallFan
Дата 16.4.2010, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Речь идет об универсализации функции динамического построения условия отбора.
PM   Вверх
Zloxa
Дата 18.4.2010, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

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



Цитата(FallFan @  16.4.2010,  15:33 Найти цитируемый пост)
Речь идет об универсализации функции динамического построения условия отбора. 

можно и без динамики, статикой.
Код

selct * 
from table
where (:param1 is null or field1 = :param1)
    and (:param2 is null or field2 = :param2)
    and (:param3 is null or field3 = :param4)
.....

Однако же следует понимать что автомобиль-амфибия, хоть и универсален, но все же едет хуже чем автомобиль и плавает хуже чем катер, а стоит больше чем оба вместе взятые. Универсализм отнюдь не всегда оправдан и на самом деле нужен.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




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


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

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