Вопрос про MySQL и Select в VB6

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
velltar
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 24.09.2009 (Чт) 18:57

Вопрос про MySQL и Select в VB6

Сообщение velltar » 15.04.2010 (Чт) 22:27

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

Есть на удаленной машине база 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 (Это неважно:)), а остальные переменные name, foto остаються пустыми и когда отправляется запрос к базе данных то там соответственно по полям NameAgregat PhotoAgregat ищются записи с пустими полями. ТАК КАК СДЕЛАТЬ ЧТОБЫ ПРИ ТАКОМ ЗАПРОСЕ В ЭТИХ ПОЛЯХ НИЧЕГО НЕ ИСКАЛОСЬ, А ТОЧНЕЕ ВЫБИРАЛИСЬ ВСЕ ЗАПИСИ.

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

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Вопрос про MySQL и Select в VB6

Сообщение iGrok » 15.04.2010 (Чт) 22:42

Ну у тебя самого же приведён правильный вариант.
Только собирай строку запроса "динамически" - добавляй в запрос только те условия, по которым реально нужно вести отбор.
label:
cli
jmp label

velltar
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 24.09.2009 (Чт) 18:57

Re: Вопрос про MySQL и Select в VB6

Сообщение velltar » 15.04.2010 (Чт) 22:48

А вот как ее динамически собрать просто не знаю и нимогу никак врубиться. Знаний не хватает. Поскажите плиз :)

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Вопрос про MySQL и Select в VB6

Сообщение iGrok » 16.04.2010 (Пт) 0:01

Ну.. Можно как-то так.
Код: Выделить всё
Dim strConn as String
strConn = ""

If Len(name) > 0 Then strConn = strConn & IIF(Len(strConn), " AND ", "") & "NameAgregat=" & Quote(name)
If Len(desc) > 0 Then strConn = strConn & IIF(Len(strConn), " AND ", "") & "DescrAgregat=" & Quote(desc)
If Len(foto) > 0 Then strConn = strConn & IIF(Len(strConn), " AND ", "") & "PhotoAgregat=" & Quote(foto)
If Len(stoim) > 0 Then strConn = strConn & IIF(Len(strConn), " AND ", "") & "StoimostAgregat=" & Quote(stoim)

If Len(strConn) > 0 Then
    strConn = "SELECT * FROM Agregat WHERE " & strConn
Else
    strConn = "SELECT * FROM Agregat"
End If

rstRecordSet.OpenRs strConn , conConnection
label:
cli
jmp label

velltar
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 24.09.2009 (Чт) 18:57

Re: Вопрос про MySQL и Select в VB6

Сообщение velltar » 24.04.2010 (Сб) 3:15

Большое спасибо за пример. Помогло. Все работает :)


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Mail.ru [бот], Yandex-бот и гости: 23

    TopList