2016-01-20 3 views
0

Я застрял, пытаясь исправить эту ошибку и был у нее слишком долго. Я много сделал для Google и искал этот сайт, но не могу найти правильный ответ для меня, хотя есть много разных вариантов этого вопроса.SQL-преобразование DB DB-значение в пустую строку

Я пишу интерфейсный интерфейс с использованием VB.Net с базой данных Access на задней панели. БД имеет значения NULL в PartnerFirstName, PartnerLastName и Organization в моей таблице партнеров. Я загружаю их в Datatable в моем приложении, чтобы их можно было искать у пользователя. На прошлой неделе я узнал, что некоторые партнеры (с значениями NULL) не загружаются.

код ниже:

("SELECT IDPartner, IIF(ISNULL(PartnerFirstName),'',PartnerFirstName) as PartnerFirstName, IIF(ISNULL(PartnerLastName), '', PartnerLastName) AS PartnerLastName, IIF(ISNULL(Organization), '', Organization) AS Organization, " & _ 
     "Address1, City, State, Zip, Country, Active " & _ 
"FROM tblPartner " & _ 
"WHERE IDPartner like '%" & txtPartnerID.Text & "%' AND " & _ 
"  PartnerFirstName like '%" & txtFirstName.Text & "%' AND " & _ 
"  PartnerLastName like '%" & txtLastName.Text & "%' AND " & _ 
"  Organization like '%" & txtOrganization.Text & "%' AND " & _ 
"  Address1 like '%" & txtStreet.Text & "%' AND " & _ 
"  City like '%" & txtCity.Text & "%' AND " & _ 
"  State like '%" & txtState.Text & "%' AND " & _ 
"  Zip like '%" & txtZipCode.Text & "%' AND " & _ 
"  Country like '%" & txtCountry.Text & "%' " & _ 
"ORDER BY IDPartner, partnerlastname, partnerfirstname", cn) 

Причина like с то, потому что я хочу найти обновление в режиме реального времени на основе значений текстового поля формы. Это источник моей проблемы, поскольку по умолчанию они являются пробелами, а в базе данных есть нули.

===================

EDIT:

Спасибо за начальные комментарии. Теперь я понимаю, что использовал неправильную функцию. IIF, предложенный Баро, заставляет меня пройти через SQL, и это здорово!

Похоже, что проблема, с которой я столкнулась, не обнаруживается в моем предложении WHERE. Если я удалю это, тогда все записи загрузятся в мой Datatable. Когда я включаю предложение Where, как показано, записи будут исключать значения NULL.

Я попытался использовать OR PartnerFirstName IS NULL (а также другие поля), но это оставляет слишком много дополнительных результатов, которые также имеют значения NULL. Я не могу понять, что делать, чтобы разрешить поиск теперь, когда я знаю, что проблема находится в разделе Where.

+0

Это SQL Server или Access? Это не одно и то же. Статья MSDN, ссылка на которую вы указываете для SQL Server. В Access эквивалент - это функция Nz. – Rabbit

+1

Попробуйте: IIF (ISNULL (PartnerFirstName), '', PartnerFirstName) ... а затем исправьте свой первый, как будто вам не хватает «И». – Baro

+0

вам нужно увидеть, что запрос выполняется в Access; Access не имеет второго параметра для ISNULL – techspider

ответ

0

Спасибо всем вам за помощью и предложения, я узнал много из нескольких предложений, и действительно ценю это!

Я решил проблему, возвращаясь в Access. Я запустил запрос на обновление в любом поле NULL и изменил его на "". Такое простое решение!

Если бы у меня не было требований WHERE, которые я делаю, это было бы не так уж важно.

0

Проблема заключается в том, что предикат WHERE предназначен для исходного поля (-ов), у которого не было применено выражение IIF(ISNULL(...)). Трудно видеть, потому что вы сгенерировали поле в операторе SELECT в том же названии, что и поле, лежащее в основе. Таким образом, запрос выполняет то, что вы ему поручили, хотя и не то, что вы имели в виду для этого. Чтобы решить, я бы использовал подзапрос, который преобразует значения NULL в пустые строки, а затем во внешнем запросе добавьте предикат WHERE. Что-то вроде следующего должен сделать трюк:

("SELECT q.* FROM (SELECT IDPartner, IIF(ISNULL(PartnerFirstName),'',PartnerFirstName) as PartnerFirstName, IIF(ISNULL(PartnerLastName), '', PartnerLastName) AS PartnerLastName, IIF(ISNULL(Organization), '', Organization) AS Organization, " & _ 
     "Address1, City, State, Zip, Country, Active " & _ 
"FROM tblPartner) q " & _ 
"WHERE q.IDPartner like '%" & txtPartnerID.Text & "%' AND " & _ 
"  q.PartnerFirstName like '%" & txtFirstName.Text & "%' AND " & _ 
"  q.PartnerLastName like '%" & txtLastName.Text & "%' AND " & _ 
"  q.Organization like '%" & txtOrganization.Text & "%' AND " & _ 
"  q.Address1 like '%" & txtStreet.Text & "%' AND " & _ 
"  q.City like '%" & txtCity.Text & "%' AND " & _ 
"  q.State like '%" & txtState.Text & "%' AND " & _ 
"  q.Zip like '%" & txtZipCode.Text & "%' AND " & _ 
"  q.Country like '%" & txtCountry.Text & "%' " & _ 
"ORDER BY q.IDPartner, q.partnerlastname, q.partnerfirstname", cn) 
+0

Спасибо, Тим, я решил проблему, запустив запрос обновления в моей БД, чтобы обновить все поля NULL до "". NULLS, где результат плохих данных, которые были внесены в таблицу во время недавнего опроса в нашу новую систему. – mrmiller1023

+0

NULL и "" означают две совершенно разные вещи, поэтому простое обновление NULL до "" изменяет значение данных. В вашем случае это _CULD BE_, что «означает», мы спросили парня, и он говорит, что у него нет партнера », где NULL _COULD_ означает« О, дерьмо, мы забыли спросить ». – Jeroen

+0

Jeroen, Я получаю то, что вы говорите, и я знаю различия между NULL и "". В этом случае я работаю над этой БД на 6 лет и перерабатываю его. Хотя я понимаю разницу между этими двумя типами, «более чем достаточно для того, что мы здесь делаем. – mrmiller1023