Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Вот намудрила с запросом...! / 10 сообщений из 10, страница 1 из 1
31.05.2007, 01:39
    #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
31.05.2007, 01:58
    #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
31.05.2007, 10:28
    #34563446
JaneDoe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вот намудрила с запросом...!
незнаю.. может попробуешь вместо
int1 = "*"
что то типа
int1= Chr$(42)
42 это звездочка если не путаю
...
Рейтинг: 0 / 0
31.05.2007, 11:03
    #34563635
ЕленаMC
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вот намудрила с запросом...!
Уже сделала как показал White Owl. Меня не буду :-) Действую по принципу: "Работает - не трогай" :-)
...
Рейтинг: 0 / 0
31.05.2007, 11:48
    #34563907
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вот намудрила с запросом...!
Звездочка в sql имеет только два смысла - умножение и "все поля из таблицы". "Любое значение" в них не входит.
...
Рейтинг: 0 / 0
02.06.2007, 19:39
    #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
03.06.2007, 19:05
    #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
04.06.2007, 09:44
    #34571102
michael R
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вот намудрила с запросом...!
как ты пишешь запрос для where
where до order by ??


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

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

удачи
...
Рейтинг: 0 / 0
04.06.2007, 18:24
    #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
05.06.2007, 07:20
    #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
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Вот намудрила с запросом...! / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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