Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
undll
0 / 0 / 0
Регистрация: 18.04.2011
Сообщений: 34
1

Оператор "=" не задан для тип "DBNull" и строка "1".

20.07.2011, 10:53. Просмотров 2550. Ответов 5
Метки нет (Все метки)

Есть цикл, который проходит по списку компаний и смотрит, если у человека есть доступ - то в чекбокслист ставит true
При заходе в программу и выборе первой записи - все работает. При попытке выбрать другую запись - прога валится с курсором на "If DS_Companies_Access.HR_SysUserCheck.Rows(0)(0) = "1" Then"

Ошибка: Оператор "=" не задан для тип "DBNull" и строка "1"

vb.net
1
2
3
4
5
6
7
8
9
10
11
    For j = 0 To CheckedListBox2.Items.Count - 1
      CheckedListBox2.SetItemChecked(j, False)
    Next
 
    For i = 0 To DS_Companies.SY150000.Rows.Count - 1
      X = DS_Companies.SY150000.Rows(i)("SY15001")
      TA_Companies_Access.Fill(DS_Companies_Access.HR_SysUserCheck, X, LN)
      If DS_Companies_Access.HR_SysUserCheck.Rows(0)(0) = "1" Then
        CheckedListBox2.SetItemChecked(i, True)
      End If
    Next
Оператор "=" не задан для тип "DBNull" и строка "1".


 Комментарий модератора 
Картинки желательно прикреплять к сообщению
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.07.2011, 10:53
Ответы с готовыми решениями:

Обработка "null" в MS Access "Приведение типа "|DBNull" к типу "String" является недопустимым"
Здравствуйте. Работаю с базой MS Access Вывожу в DataGridView таблицу Проблема следующая, если у...

Поиск в DGW вылетает с ошибкой "Приведение типа "|DBNull" к типу "String" является недопустимым."
В общем такой вопрос. Код рабочий. Только у меня не работает. For i = 0 To...

Оператор "+" для типов "String" и "System.Windows.Forms.ComboBox.ObjectCollection" не определен
Доброго времени суток,подскажите решение проблемы К комбобоксам привязал БД отображаются в них...

Оператор "&" для типов "String" и "c_auth.ClientPacket" не определен
Прошу помощи у экспертов. Фото все по порядку. 1.Невозможно преобразовать значение типа...

"Приведение типа "|DBNull" к типу "String" при попытке загрузить данные из ячейки DataGridView в ComboBox
Доброго времени суток! Сама ошибка "Приведение типа "|DBNull" к типу "String" является...

5
Bazzy
192 / 185 / 14
Регистрация: 09.02.2011
Сообщений: 458
20.07.2011, 11:38 2
vb.net
1
2
If (not DS_Companies_Access.HR_SysUserCheck.Rows(0)(0) is dbnull.value) _
 andalso (DS_Companies_Access.HR_SysUserCheck.Rows(0)(0) = "1") then
0
undll
0 / 0 / 0
Регистрация: 18.04.2011
Сообщений: 34
20.07.2011, 14:57  [ТС] 3
Цитата Сообщение от Bazzy Посмотреть сообщение
vb.net
1
2
If (not DS_Companies_Access.HR_SysUserCheck.Rows(0)(0) is dbnull.value) _
 andalso (DS_Companies_Access.HR_SysUserCheck.Rows(0)(0) = "1") then
плохое решение)
т.к. если изменить на выше написанное, то 1 раз проходит цикл и if - работает, то на второй, тупо не отмечаются компании к которым дан доступ.
0
Bazzy
192 / 185 / 14
Регистрация: 09.02.2011
Сообщений: 458
20.07.2011, 15:49 4
ищите ошибки в логике это строчка не причем... или в базе данных поставьте значение по умолчанию (допустим 0) чтобы необходимость в проверке отпала.

TA_Companies_Access.Fill(DS_Companies_Access.HR_SysUserCheck, X, LN) этой строкой вы заполняете таблицу датасета, а Вам, как я понял, надо получить единственное значение (ScalarQuery в TA)

Тем более можно исключать те компании которые не нужны уже в запросе к БД.

Лучше опишите задачу или выкладывайте весь проект иначе понять что Вы хотели сделать крайне проблематично.
0
undll
0 / 0 / 0
Регистрация: 18.04.2011
Сообщений: 34
20.07.2011, 17:17  [ТС] 5
Цитата Сообщение от Bazzy Посмотреть сообщение
ищите ошибки в логике это строчка не причем... или в базе данных поставьте значение по умолчанию (допустим 0) чтобы необходимость в проверке отпала.

TA_Companies_Access.Fill(DS_Companies_Access.HR_SysUserCheck, X, LN) этой строкой вы заполняете таблицу датасета, а Вам, как я понял, надо получить единственное значение (ScalarQuery в TA)

Тем более можно исключать те компании которые не нужны уже в запросе к БД.

Лучше опишите задачу или выкладывайте весь проект иначе понять что Вы хотели сделать крайне проблематично.
ммм, попробую:

Есть форма, на которой расположены:
ComboBox1 - список компаний, которую смотрим на данный момент
ListBox1 - список юзеров
CheckedListBox1 - список прав
CheckedListBox2 - список компаний, где есть юзер



Структура базы сделана так, что все это хранится в разны таблицах, в зависимости от компании, т.е.
<a href='http://imglink.ru/show-image.php?id=ed04679ee8bfb647956108e45ede8fce'> <img src='http://imglink.ru/thumbnails/20-07-11/79dc84eed2689acae5942fcdc1cafa57.jpg' alt='фотохостинг' border='0'> </a>
вот в названии таблиц прописан код компании _01 _02 и т.д... у каждой компании свой набор таблиц.
Есть таблица, с списком этих кодов и компаний:
01 - Компания01
02 - Компания02
03 - Компания03
и т.д..

Если с выводом галочек для списка прав - все понятно:
vb.net
1
2
3
4
5
6
7
8
9
10
11
12
    TA_Departament_Access.Fill(DS_Departament_Access.Access, CC, LN)
    For j = 0 To CheckedListBox1.Items.Count - 1
      CheckedListBox1.SetItemChecked(j, False)
    Next
 
    For i = 0 To DS_Departament_Access.Access.Rows.Count - 1
      For j = 0 To CheckedListBox1.Items.Count - 1
        If DS_Departament_Access.Access.Rows(i)("HR21003") = CheckedListBox1.Items(j).ToString Then
          CheckedListBox1.SetItemChecked(j, True)
        End If
      Next
    Next
и все работает замечательно, то со списком компаний не понятно,
есть процедура SQL, которая выводит 1 если такой логин найдет в данной компании @CC:
SQL
1
SELECT COUNT(*) AS [+@ACCOUNT+] FROM SYSTEM_'+@CC+' WHERE LOGIN = '+@ACCOUNT+'
Вот как это все в цикл запихнуть, чтобы при выборе в ListBox1 значения - проставлялись галочки с правами компаний?
был такой код:
vb.net
1
2
3
4
5
6
7
8
9
10
11
    For j = 0 To CheckedListBox2.Items.Count - 1
      CheckedListBox2.SetItemChecked(j, False)
    Next
 
    For i = 0 To DS_Companies.Companies.Rows.Count - 1
      X = DS_Companies.SY150000.Rows(i)("SY15001")
      TA_Companies_Access.Fill(DS_Companies_Access.Access, X, LN)
      If DS_Companies_Access.HR_SysUserCheck.Rows(0)(0) = "1" Then
         CheckedListBox2.SetItemChecked(i, True)
      End If
    Next
При заходе в программу, выборе логина - все проставляется верно, но при попытке выбрать другую запись - падает. Т.е. как только переключаемся с выбраной записи.
0
Миниатюры
Оператор "=" не задан для тип "DBNull" и строка "1".   Оператор "=" не задан для тип "DBNull" и строка "1".  
undll
0 / 0 / 0
Регистрация: 18.04.2011
Сообщений: 34
04.08.2011, 14:02  [ТС] 6
Актуальный вопрос
0
04.08.2011, 14:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.08.2011, 14:02

Приведение типа "|DBNull" к типу "Integer"
Всем привет.Собственно в коде вылетает ошибка Приведение типа &quot;|DBNull&quot; к типу &quot;Integer&quot; является...

"Не удалось привести тип объекта "System.Int32" к типу "System.String"."
Добрый день! Делаю запрос к локальной базе данных. Пытаюсь получить последнюю строку. Но что-то...

Ошибка "Приведение строки "explorer.exe" к типу "Double" является недопустимым" при записи в реестр
Помогите, хочу получить доступ к winlogon, что бы изменять любое другое значение shell на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru