Как параметром передать значение IS NOT NULL

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
sergey-911
Постоялец
Постоялец
 
Сообщения: 545
Зарегистрирован: 17.01.2005 (Пн) 19:10

Как параметром передать значение IS NOT NULL

Сообщение sergey-911 » 29.07.2007 (Вс) 13:38

Доброго времени суток уважаемые. Нужно выполнить параметрический запрос
Код: Выделить всё
SELECT * FROM vw_Personal WHERE [Код] LIKE '%' + ? + '%' OR [Логин] LIKE '%' + ? + '%' OR [Фамилия] LIKE '%' + ? + '%' OR [Имя] LIKE '%' + ? + '%' OR [Отчество] LIKE '%' + ? + '%' OR [Служба] LIKE '%' + ? + '%' OR [Должность] LIKE '%' + ? + '%' OR [Трудовые отношения] LIKE '%' + ? + '%' OR [Телефон] LIKE '%' + ? + '%' OR [Примечание] LIKE '%' + ? + '%'

Передаем параметры
Код: Выделить всё
Dim c As ADODB.Command
Set c = New ADODB.Command
c.CommandType = adCmdText

c.Parameters.Append c.CreateParameter _
("strParam" & j, adVarChar, adParamInput, 5000, "10")
...
...
c.Parameters.Append c.CreateParameter _
("strParam" & j, adVarChar, adParamInput, 5000, "10")

    'Подключаемся к БД
    Dim conn As ADODB.Connection
    Set conn = New ADODB.Connection
    conn.Open (Connect.Soedinenie)
    Dim r As ADODB.Recordset
    Set c.ActiveConnection = conn
    c.CommandType = adCmdText
    c.CommandText = sql
    Set r = New ADODB.Recordset
    r.Open c, , adOpenStatic, adLockReadOnly
    'Отключаемся от БД
    Set r = Nothing
    Set conn = Nothing
    Set c = Nothing


Проблема в том, что нужно найти в запросе примечания, значения которых отличны от NULL, т.е.
Код: Выделить всё
SELECT
...
...
WHERE
...
OR [Примечание] IS NOT NULL

, т.е. параметром передать значение IS NOT NULL.
С уважением, Сергей.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 29.07.2007 (Вс) 14:36

"IS NOT NULL" -- код, а не параметр. По-моему, это весьма очевидно. Собирать код запроса надо на стороне клиента, а не пытаться передать его параметром (какая глупость, чесслово).
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

sergey-911
Постоялец
Постоялец
 
Сообщения: 545
Зарегистрирован: 17.01.2005 (Пн) 19:10

Сообщение sergey-911 » 29.07.2007 (Вс) 15:09

GSerg писал(а):"IS NOT NULL" -- код, а не параметр. По-моему, это весьма очевидно. Собирать код запроса надо на стороне клиента, а не пытаться передать его параметром (какая глупость, чесслово).

GSerg, запрос я собираю на стороне клиента. Меня смутил тот факт, что часть запроса, в этом случае, будет передаваться параметрами, а часть запроса будет формироваться кодом.
Код: Выделить всё

SELECT * FROM vw_Personal WHERE [Код] LIKE '%' + ? + '%' OR [Логин] LIKE '%' + ? + '%' OR [Фамилия] LIKE '%' + ? + '%' OR [Имя] LIKE '%' + ? + '%' OR [Отчество] LIKE '%' + ? + '%' OR [Служба] LIKE '%' + ? + '%' OR [Должность] LIKE '%' + ? + '%' OR [Трудовые отношения] LIKE '%' + ? + '%' OR [Телефон] LIKE '%' + ? + '%' OR [Примечание] IS NOT NULL

Или так и должно быть?

Разве нельзя IS NOT NULL передать параметром.
С уважением, Сергей.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 29.07.2007 (Вс) 15:12

Или так и должно быть.
Тебя же не смущает, что параметрами не передаются SELECT, LIKE и [Телефон]?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

sergey-911
Постоялец
Постоялец
 
Сообщения: 545
Зарегистрирован: 17.01.2005 (Пн) 19:10

Сообщение sergey-911 » 29.07.2007 (Вс) 15:20

Спасибо GSerg! :D
С уважением, Сергей.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 30.07.2007 (Пн) 8:31

isnull(field,<null-value>) = isnull(param,<null-value>)
Lasciate ogni speranza, voi ch'entrate.

sergey-911
Постоялец
Постоялец
 
Сообщения: 545
Зарегистрирован: 17.01.2005 (Пн) 19:10

Сообщение sergey-911 » 30.07.2007 (Пн) 21:53

Спасибо alibek, но я не понимаю.
Правильно ли я понял?
Запрос
Код: Выделить всё
SELECT * FROM vw_Personal WHERE [Фамилия] LIKE '%' + ? + '%'

Передаем нулевой параметр
Код: Выделить всё
c.Parameters.Append c.CreateParameter _
("strParam" & j, adVarChar, adParamInput, 5000, <null-value>))


Как правильно в данном примере формировать запрос и передать параметр? Хочу код писать правильно, чтобы краснеть не пришлось.[/quote]
С уважением, Сергей.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 31.07.2007 (Вт) 7:08

Нет, неправильно.
Вместо <null-value> надо подставлять такое значение, которое никогда не будет в нормальных случаях.
Например, c.Parameters.Append c.CreateParameter ("strParam" & j, adVarChar, adParamInput, 5000, Null)) для запроса "SELECT * FROM vw_Personal WHERE ISNULL([Фамилия],'') = ISNULL(?,'')"
Lasciate ogni speranza, voi ch'entrate.

sergey-911
Постоялец
Постоялец
 
Сообщения: 545
Зарегистрирован: 17.01.2005 (Пн) 19:10

Сообщение sergey-911 » 31.07.2007 (Вт) 20:46

Спасибо alibek, сам бы я не разобрался.
С уважением, Сергей.


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

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

Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 40

    TopList