powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Вопрос про MySQL и Select в VB6
5 сообщений из 5, страница 1 из 1
Вопрос про MySQL и Select в VB6
    #36581576
velltar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!
Народ помогите, реально завис на следующей проблеме и не знаю даже как в поиске набрать чтобы на путь истинный выйти :)

Есть на удаленной машине база MySQL с такой таблицей
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
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 тут все как бы просто

Код: plaintext
1.
2.
rstRecordSet.OpenRs "SELECT * FROM Agregat WHERE StoimostAgregat=1500", conConnection
If Not rstRecordSet.EOF Then
    rstRecordSet.MoveFirst
и т.д.


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


Код: plaintext
1.
2.
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 ищются записи с пустими полями. ТАК КАК СДЕЛАТЬ ЧТОБЫ ПРИ ТАКОМ ЗАПРОСЕ В ЭТИХ ПОЛЯХ НИЧЕГО НЕ ИСКАЛОСЬ, А ТОЧНЕЕ ВЫБИРАЛИСЬ ВСЕ ЗАПИСИ.

Надеюсь объяснил суть проблемы подробно. Сам новичек и не совсем может быть верно владею терминалогией :)
Буду благодарен помощи старших товарищей.
Всем заранее спасибо за помощь.
...
Рейтинг: 0 / 0
Вопрос про MySQL и Select в VB6
    #36581616
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в чем собственно проблема? Вы строку запроса формируете "на лету", так и не добавляйте туда лишние критерии, которые не нужны в данный момент.

(есть, конечно, способ построить универсальный запрос, но вам в данном случае это не нужно)
...
Рейтинг: 0 / 0
Вопрос про MySQL и Select в VB6
    #36581617
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
типа
Код: plaintext
1.
2.
If name<>"" then k = k + " AND NameAgregat=" + Quote(name) 
If desc<>"" then k = k + " AND DescrAgregat=" + Quote(name) 
If foto<>"" then k = k + " AND PhotoAgregat=" + Quote(name) 
и т.п.

P.S. Используйте тэги для оформления кода!
...
Рейтинг: 0 / 0
Вопрос про MySQL и Select в VB6
    #36581620
Фотография klen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем доброй ночи! Моё почтение Shocker.Pro
В общем, Вам идею уже подсказали.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
Sub trpr()
Dim text1, text2, text3, text4, text5
text4 =  1500 

Dim SQL As String
SQL = "SELECT * FROM Agregat "
'заранее про пробел в конце строки, не забывайте
'допустим у Вас есть форма frm_Filter и на ней все возможные текстовые поля для той таблицы
'эти поля либо имеют значения для будущего фильтра, либо нет
Dim massiv( 5 ) As String, kol As Byte
kol =  5 
If Trim("" & text1) <> "" Then massiv( 1 ) = "NameAgregat = " & text1
If Trim("" & text2) <> "" Then massiv( 2 ) = "DescrAgregat = " & text2
If Trim("" & text3) <> "" Then massiv( 3 ) = "PhotoAgregat = " & text3
If Trim("" & text4) <> "" Then massiv( 4 ) = "StoimostAgregat = " & text4
If Trim("" & text5) <> "" Then massiv( 5 ) = "something = " & text5

Dim i As Byte, j As Byte, have As Boolean
For i =  1  To kol
    If Trim("" & massiv(i)) <> "" Then
        have = True
        massiv(i) = massiv(i) & " AND "
    End If
Next

If have Then
    massiv( 0 ) = "WHERE "
End If

For i =  0  To kol
    SQL = SQL & massiv(i)
Next

If have Then
    SQL = Mid(SQL,  1 , Len(SQL) -  4 )
End If

Debug.Print SQL

rstRecordSet.OpenRs SQL, conConnection
'и т.д.
'Попробуйте. Может быть ещё другие варианты будут.
'Я не знаю кто не ладит с пустыми значениями, Бейсик или я, но так надёжнее Trim("" &
End Sub
вместо РАВНО можно тоже какую-нибудь переменную создать, и AND также
...
Рейтинг: 0 / 0
Вопрос про MySQL и Select в VB6
    #36584842
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
P.S. Используйте тэги для оформления кода!
Модератор: +1
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Вопрос про MySQL и Select в VB6
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]