powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Вот намудрила с запросом...!
10 сообщений из 10, страница 1 из 1
Вот намудрила с запросом...!
    #34562955
ЕленаMC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня беда с запросом:
Код: plaintext
adr.Open "select * from docs WHERE user='" & int1 & "' AND viddoc='" & int2 & "' AND firm='" & int3 & "' AND firma='" & int4 & "'", cnn, adOpenDynamic, adLockOptimistic
принцип поиска: я задаю парамеры и оно соответственно ищет. все нормально. но до того момента, пока не нужно найти только по одному или нескольким значениям (не всем 4-ем).
Пыталась выйти из ситуации присвоив переменным int * :
Код: plaintext
If Combo5.Text = "" Then int1 = "*" Else int1 = Combo5.Text
но это не помагает, т.к. присваивается значение "*" т.е. со скобками. Как с этим бороться?
...
Рейтинг: 0 / 0
Вот намудрила с запросом...!
    #34562960
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ты запрос формируй не в команде Open, а заранее. В переменной. Например так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Dim where_string as String, sql_string as String

where_string = ""
if user_field.Text <> "" then
   where_string = where_string & "user='" & user_field.Text & "'"
end if

if viddoc_field.Text <> "" then
   if where_string <> "" then where_string = where_string & " AND "
   where_string = where_string & "viddoc='" & viddoc_field.Text & "'"
end if

if firma_field.Text <> "" then
   if where_string <> "" then where_string = where_string & " AND "
   where_string = where_string & "firma='" & firma_field.Text & "'"
end if

' и так далее а потом уже 
sql_string = "select * from docs"
if where_string <> "" then
     sql_string = sql_string & " WHERE " & where_string
end if

adr.Open sql_string, cnn, adOpenDynamic, adLockOptimistic
По желанию упростишь
...
Рейтинг: 0 / 0
Вот намудрила с запросом...!
    #34563446
JaneDoe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
незнаю.. может попробуешь вместо
int1 = "*"
что то типа
int1= Chr$(42)
42 это звездочка если не путаю
...
Рейтинг: 0 / 0
Вот намудрила с запросом...!
    #34563635
ЕленаMC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уже сделала как показал White Owl. Меня не буду :-) Действую по принципу: "Работает - не трогай" :-)
...
Рейтинг: 0 / 0
Вот намудрила с запросом...!
    #34563907
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Звездочка в sql имеет только два смысла - умножение и "все поля из таблицы". "Любое значение" в них не входит.
...
Рейтинг: 0 / 0
Вот намудрила с запросом...!
    #34569945
Фотография Залетин Виталий Викторович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Звезда как маска-символ не проходит! Тут надо использовать LIKE:

% - любое кол-во любых символов.
_ - любой один символ.

Например:

Dim sql_string as String

where_string = vbNullString
sql_string="select * from docs where user like '%$user$%' and viddoc like '%$viddoc$%' and firma like '%$firma$%'"

sql_string=replace(sql_string,"$user$",iif(Len(user_field.Text) > 0,user_field.Text,vbNullString))
sql_string=replace(sql_string,"$viddoc$",iif(Len(viddoc_field.Text) > 0,viddoc_field.Text,vbNullString))
sql_string=replace(sql_string,"$firma$",iif(Len(firma_field.Text) > 0,firma_field.Text,vbNullString))

adr.Open sql_string, cnn, adOpenDynamic, adLockOptimistic

Вот таким образом можно не бояться отсутствия значения в поле - если там ничего не введено, то будет стоять "%%", что никак не влияет на запрос (это все то же любое кол-во любых символов).
...
Рейтинг: 0 / 0
Вот намудрила с запросом...!
    #34570569
ЕленаMC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В продолжение темы:
Код: plaintext
sql_string = "select * from docs ORDER BY id DESC"
сортирует нормально.
но если добавляю WHERE или LIKE то выдает ошибку. каким образом соединить операторы ORDER BY и WHERE?

Заранее благодарна.

И еще один вопросик по поиску...
Можно ли в этот запрос влепить что-то типа: SRC vba]sql_string = "select * from docs WHERE Cdate (date_upd) BETWEEN CDate (A) AND CDate (B)"[/src]т.е. У меня задаются 2 переменный даты... в формате A = Calendar1.Value...
и в таблице берется дата формата 08.05.2007...
Все переменные - string
нужно сделать запрос и выдать результаты записей, которые были сделаны в период с A по B.

Может кто подскажет?
...
Рейтинг: 0 / 0
Вот намудрила с запросом...!
    #34571102
Фотография michael R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как ты пишешь запрос для where
where до order by ??


для дат кажется нужно писать так

str="Select * from docs where date_updbeteen #" & cdate(A) & " and " & Cdate(B) & "#"

удачи
...
Рейтинг: 0 / 0
Вот намудрила с запросом...!
    #34573170
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Залетин Виталий ВикторовичВот таким образом можно не бояться отсутствия значения в поле - если там ничего не введено, то будет стоять "%%", что никак не влияет на запрос (это все то же любое кол-во любых символов).Если ты с такими запросами прийдешь в мою базу - убью.
Хотя нет, сначала ты сам помрешь со скуки пока будешь ждать результат. LIKE это одна из самых медленных операций, ее надо использовать только тогда, когда она действительно необходима.

michael Rдля дат кажется нужно писать так

str="Select * from docs where date_updbeteen #" & cdate(A) & " and " & Cdate(B) & "#"Неправда.
Во первых, следи за скобками. А во вторых, использовать диезы в качестве кавычек для дат умеют только некоторые версии Акцесса и dBase-ODBC драйверов.
Наиболее универсальное решение это передавать в строке запроса дату как строку и оборачивать ее sql функцией конвертации в дату. Например так:
Код: plaintext
1.
2.
3.
lsStartDate = "2007-06-01"
lsEndDate = "2007-06-01"
lsSQL = "select * from sometable where somedate between cast('" & lsStartDate & _
          "' as date) and cast('" & lsEndDate & "' as date);"
Хочешь сделать проще - открывай документацию на свой сервер БД, и на свой интерфейс доступа к БД и смотри в них, какой синтаксис работы с датами.
...
Рейтинг: 0 / 0
Вот намудрила с запросом...!
    #34573911
TIKO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
cast, convert используется в SQL server

CONVERT(DATETIME, '2007-01-01 00:00:00', 102))
для Access
можно так Where data=#01/1/2007# можно и так
Where data=Cdate('01/012007')
все зависит от типа БД
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Вот намудрила с запросом...!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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