Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Проблема с пустыми указателями Добавлено: 10.10.02 00:38  

Автор вопроса:  Comanche

На форме есть MS DataGrid, через ADODC подключённая к MDB-базе, и несколько элементов типа
TextBox, которые я использую как для вывода в них соответствующих полей выбранной в гриде
записи (для просмотра), так и для ввода через них данных в базу.

'

Примечание: текстбоксы НЕ ЗАВЯЗАНЫ на базу через своё свойство DataSource; при вводе/выводе
чтение/заполнение текстбоксов выполняется тупо из кода. Так сделано потому, что хотелось
ввод в базу выполнять не автоматом по ходу заполнения привязанных текстбоксов (полей), а
только по нажатию кнопки "Сохранить".

'

Так вот, если в одном из полей записи БД ничего нет (т.е. при создании базы в Аксессе в это
поле просто ничего не ввели), то при попытке выполнить приведённый ниже код по заполнению
текстбокса (соответствующего этому полю) возникает ошибка "Недопустимое использование пустого
указателя". А вот и код:

'

Private Sub adoEvents_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal pError As _
        ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
' ...
' какой-то код
' ...
    TextBox1.Text = adoEvents.RecordSet![Описание события]
' ...
' какой-то код
' ...
End Sub
[/code]

'

Если в поле "Описание события" есть какой-то текст, то всё ОК. Но если там нет НИЧЕГО, то
выскакивает ошибка. Не помогает ни Is Nothing, ни Is Null, ни Is Empty, ни сравнение с пустой
строкой, ни сравнение длины строки с нулём.

'

Ставил даже в начале этой процедуры On Error Resume Next, а в конце - On Error Goto 0. Эта
ошибка пропала, и стало вроде всё нормально: как будто приведённая выше строка
"adoEvents.RecordSet![Описание события]" стала возвращать ПУСТУЮ СТРОКУ, когда сама эта строка
вызывала ту самую ошибку. Но это очень некрасивый и неправильный способ решения проблемы, что
очень скоро и подтвердилось: когда плюс к обычным текстбоксам я добавил маскированные
(MS MaskEdit Control), то у них (при наличии всё тех же On Error ...) присвоение TextBox1.Text
вообще не стало выполняться (т.е. строка "adoEvents.RecordSet![Описание события]" перестала
возвращать не то что ПУСТУЮ СТРОКУ, но что-либо вообще!), в результате чего в MaskEdit-ах
стали оставаться "хвосты" от их прошлых значений. Отключение On Error, естественно, опять
вызвало ту же ошибку насчёт пустого указателя.

'

В итоге, я никак не могу поставить контроль за выводом в текстбоксы (как обычные, так и
маскированные) НЕЗАДАННЫХ в базе значений. Есть ли какой-нибудь выход помимо того, чтобы при
предшествующей всему этому ЗАПИСИ В БАЗУ нарочно писать пустые строки или пробелы, если юзер
ничего не задал вообще?

'

PS: Всё это может показаться мутью, но если вы воссоздадите условия эксперимента (это 5-10
минут), то сразу поймёте, в чём проблема.

'

Всем заранее спасибо!

Ответить

  Ответы Всего ответов: 3  

Номер ответа: 1
Автор ответа:
 Evgeny D



Вопросов: 10
Ответов: 33
 Профиль | | #1 Добавлено: 10.10.02 16:37

А очищать содержимое перед записью значений из полей базы данных не пробовал?

Как вариант - можно сделать значение поля в базе данных по умолчанию "".

Ответить

Номер ответа: 2
Автор ответа:
 MAGNUS



Вопросов: 12
Ответов: 430
 Профиль | | #2 Добавлено: 10.10.02 21:27
Странно, если в поле нет ничего то это однозначно NULL, т.е. проверка должна работать....
Но что более странно, у меня все работает без ошибок и без проверок, т.е. если в базе ничего нет, то и в техтбоксе именно его и выводит :)... Надо подумать... Что то у тебя там не тут...:P

Ответить

Номер ответа: 3
Автор ответа:
 Comanche



Вопросов: 87
Ответов: 459
 Профиль | | #3 Добавлено: 11.10.02 18:18

2 Evgeny D:

Насчёт значения по умолчанию - это здорово.  Я как-то и не подумал про это. Спасибо, закрываю тему!

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам