Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / И еще один вопрос - передача Null через datacombo (ADO ) ? / 17 сообщений из 17, страница 1 из 1
05.02.2002, 14:59
    #32022230
Erika
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И еще один вопрос - передача Null через datacombo (ADO ) ?
или хотя бы через textbox.
Уже задавала этот вопрос на конфе по VB, но увы &<

ADO recordset открыт через DataEnvironment, client-side, LockOptimistic.
Пытаюсь на Validate перехватить пустую строку и записать в recordset Null:
\nPrivate Sub txtp_name_Validate(Cancel As Boolean)
If txtp_name.Text = "" Then
DE1.rsadoEmployees("p_name").Value = Null
End If
End Sub

А записываются пустые поля :<
А с datacombo - вообще "Operation cancelled". И до сервера update не доходит - смотрела в профайлере. Такое ощущение, что datacombo cancel делает, т.к. не находит в списке соответствия "".
Причем после загрузки-то Null поля отображаются корректно?
...
Рейтинг: 0 / 0
05.02.2002, 15:25
    #32022234
Павел
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И еще один вопрос - передача Null через datacombo (ADO ) ?
Erika, а пробовала говорить DE1.rsadoEmployees.Update ?
...
Рейтинг: 0 / 0
05.02.2002, 16:25
    #32022242
Erika
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И еще один вопрос - передача Null через datacombo (ADO ) ?
2 Павел:
Угу, пробовала до того, сейчас еще раз проверила. Вместо Null - пустая строка. Причем что самое интересное - один раз из ~50 передается NULL. В основном это происходит при проходе отладчиком, но почему - сказать не могу, т.к. следующая же попытка опять передает ''
Пробовала и DE1.rsadoEmployees.Move(0) - с тем же результатом.
...
Рейтинг: 0 / 0
05.02.2002, 16:54
    #32022244
SergCat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И еще один вопрос - передача Null через datacombo (ADO ) ?
Я не знаю точно как в VB, но в Delphi(ADO) присваивание Null не проходит.
Для этого существует функция Clear. Т.е. Table.FieldByName('Name').Clear
Думаю ADO везде одинаково работает
...
Рейтинг: 0 / 0
05.02.2002, 17:02
    #32022246
Erika
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И еще один вопрос - передача Null через datacombo (ADO ) ?
У ADO recordset метода Clear я не нашла (
...
Рейтинг: 0 / 0
05.02.2002, 17:15
    #32022247
SergCat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И еще один вопрос - передача Null через datacombo (ADO ) ?
Нет у RecordSet ф-ии Clear нет.
Она должна быть у Field (или как оно там в VB обзывается).
DE1.rsadoEmployees("p_name").Clear
...
Рейтинг: 0 / 0
06.02.2002, 09:18
    #32022298
Erika
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И еще один вопрос - передача Null через datacombo (ADO ) ?
Я в VB метод Clear нашла только в применении к ADO:
Removes all the Error objects from the Errors collection.

Ничего не получается
Как же быть? Ниужели никто на VB с этим не сталкивался?
Можно, конечно, закрыть глаза на пустые строки вместо null для textbox (хотя мне привычнее как-то Null), но как быть с datacombo? На Null то он реагирует корректно, а на '' начинает искать соответствующую запись в связанной таблице, и не находя ее сильно ругается.
...
Рейтинг: 0 / 0
07.02.2002, 02:56
    #32022362
AlexanderVS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И еще один вопрос - передача Null через datacombo (ADO ) ?
Дык когда проблема то возникает? При попытке передать-записать в таблицу/поле значение NULL. А ты, как я понял, пишешь в таблицы напрямую из открытого рекордсета? Попробуй сохранять данные через SP. Там можно будет делать проверку типа:
IF @Param=''
SET @Param=NULL
UPDATE TBL SET FLD=@Param WHERE.....
...
Рейтинг: 0 / 0
07.02.2002, 08:29
    #32022375
Павел
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И еще один вопрос - передача Null через datacombo (ADO ) ?
Я проверял, у меня саокойно из рекордсета вбивается Null. Попробуйте симитировать ситуацию без использования визуальных компонентов - чисто программно. Если все будет ок, то проблема в них. Если нет, то Какая версия MDAC?
...
Рейтинг: 0 / 0
07.02.2002, 11:24
    #32022405
Erika
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И еще один вопрос - передача Null через datacombo (ADO ) ?
2 Павел:
Действительно, программно Null передается без проблем. Интересно, что же с ним контролы делают?

2 AlexanderVS:
По сильной привычке к Аксессу97, действительно работаю с открытым recordset (на VB перешла недавно). Отсюда ламерский вопрос - если обновление делать через хп, то recordset открывать с блокировкой adLockReadOnly? А при перемещении на другую запись сохранять данные через SP, а потом еще и контролы обновлять?
Если меня ткнут носом в хорошую ссылку, буду весьма признательна. ( Мне надо сымитировать работу формы Access, чтобы не пугать пользователей сразу непривычным интерфейсом)
...
Рейтинг: 0 / 0
07.02.2002, 18:05
    #32022446
Erika
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И еще один вопрос - передача Null через datacombo (ADO ) ?
Крыша тихо едет!!!
Для textbox сработала такая конструкция:
\nPrivate Sub txtp_name_Validate(Cancel As Boolean)
If txtp_name.Text = "" Then
DE1.rsadoEmployees("p_name").Value = Null
DE1.rsadoEmployees.Update "p_name", Null
End If
End Sub

Причем именно сначала Value = Null, а потом еще и Update ее. Чисто интуитивно очень мне эта конструкция не нравится.

А вот с datacombo этот фокус не работает - говорит "Multiple-step operation generated errors. Check each status value. (-2147217887)
...
Рейтинг: 0 / 0
07.02.2002, 18:05
    #32022447
Erika
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И еще один вопрос - передача Null через datacombo (ADO ) ?
Крыша тихо едет!!!
Для textbox сработала такая конструкция:
\nPrivate Sub txtp_name_Validate(Cancel As Boolean)
If txtp_name.Text = "" Then
DE1.rsadoEmployees("p_name").Value = Null
DE1.rsadoEmployees.Update "p_name", Null
End If
End Sub

Причем именно сначала Value = Null, а потом еще и Update ее. Чисто интуитивно очень мне эта конструкция не нравится.

А вот с datacombo этот фокус не работает - говорит "Multiple-step operation generated errors. Check each status value. (-2147217887)
...
Рейтинг: 0 / 0
08.02.2002, 02:07
    #32022457
AlexanderVS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И еще один вопрос - передача Null через datacombo (ADO ) ?
Если у вас контролы на форме соеденены напрямую с полями таблицы через датаконтрол, то конечно обновление данных через SP тут не пройдет.
При использовании SP необходимо подготовить все данные в отвязанной форме, а потом запустить SP и передать эти данные в качестве параметров или через временную таблицу, если параметров слишком много.

Удачи.
...
Рейтинг: 0 / 0
05.03.2002, 09:40
    #32024378
Erika
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И еще один вопрос - передача Null через datacombo (ADO ) ?
Хочу похвастаться - не прошло и полгода, как решение было найдено:
Отлавливается событие RecordChangeComplete и в нем при adReason = adRsnFirstChange все проверяется и заменяется, и если поле поддерживает NULL, а его значение "", подставляется NULL.
(Критику принимаю)

Private Sub rsEmp_RecordChangeComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal cRecords As Long, _
ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
Dim f As ADODB.Field

If adReason = adRsnFirstChange Then
For Each f In pRecordset.Fields
If f.Type <> adChapter Then
If CBool(f.Attributes And adFldIsNullable) And f.Value = "" Then
f.Value = Null
End If
End If
Next f
End If
End Sub
...
Рейтинг: 0 / 0
06.03.2002, 11:27
    #32024532
Erika
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И еще один вопрос - передача Null через datacombo (ADO ) ?
(Тихо сам с собою я веду беседу.)
Рано обрадовалась и похвасталась, как оказалось - все это работает, только ежели BoundColumn текстовый. А если числовой - увы и ах.
Ну неужели никто не пишет на VB для связанного режима? Мне не очень понравились для ввода данных отсоединенные рекордсеты в плане блокировок - народ любит дружно бросаться редактировать последние записи.
...
Рейтинг: 0 / 0
06.03.2002, 11:55
    #32024539
Erika
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И еще один вопрос - передача Null через datacombo (ADO ) ?
(Тихо сам с собою я веду беседу.)
Рано обрадовалась и похвасталась, как оказалось - все это работает, только ежели BoundColumn текстовый. А если числовой - увы и ах.
Ну неужели никто не пишет на VB для связанного режима? Мне не очень понравились для ввода данных отсоединенные рекордсеты в плане блокировок - народ любит дружно бросаться редактировать последние записи.
...
Рейтинг: 0 / 0
07.03.2002, 12:04
    #32024696
Erika
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И еще один вопрос - передача Null через datacombo (ADO ) ?
Судя по оживленности обсуждения, вопрос не очень интересный, но я все же изложу найденное решение (немного через коленку):
Создается sp:
\nCREATE PROCEDURE dbo.stuffsAndNull AS
SELECT post_num , post_name
FROM dbo.Stuffs
UNION
SELECT 0 AS post_num, '-' AS post_name
ORDER BY post_name
GO
Опосля чего на событии FieldChangeComplete текстовые строки проверяются на "" а числовые на 0

Private Sub rsemp_FieldChangeComplete(ByVal cFields As Long, ByVal Fields As Variant, _
ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
Dim f As Variant
For Each f In Fields
If CBool(f.Attributes And adFldIsNullable) = True Then
If f.Type = adChar Then
If f.Value = "" Then
f.Value = Null
End If
ElseIf f.Type = adBigInt Or f.Type = adInteger Or f.Type = adSmallInt Or f.Type = adTinyInt Then
If f.Value = 0 Then
f.Value = Null
End If
End If
End If
Next f
End Sub

т.е. чтобы обнулить поле пользователь должен набрать "-"
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / И еще один вопрос - передача Null через datacombo (ADO ) ? / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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