DTPicker -- привязка к БД

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

DTPicker -- привязка к БД

Сообщение VVitafresh » 19.10.2006 (Чт) 11:26

Подвязываю датапикер к полю Дата/время
Код: Выделить всё
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset

Private Sub Form_Load()
    Dim SQL As String
    Set cn = New ADODB.Connection
    Set rs = New ADODB.Recordset
    cn.Provider = "Microsoft.Jet.OLEDB.4.0"
    cn.Open "Data Source=E:\VBProject\analitic\calend\db.mdb"
    SQL = "SELECT id, dat_od FROM dates"
    rs.CursorLocation = adUseClient
    rs.Open SQL, cn, adOpenKeyset, adLockOptimistic
    DTPicker1.DataField = "dat_od"
    Set DTPicker1.DataSource = rs
    rs.MoveFirst
End Sub

Private Sub Form_Unload(Cancel As Integer)
    rs.UpdateBatch adAffectAll 
    rs.Close
    Set rs = Nothing
    cn.Close
    Set cn = Nothing
End Sub

Уже введеную дату отображает правильно. Но при смене даты через контрол дата в БД не обновляется. Хотя если подвязать текстовое поле, то изменения происходят.

Как правильно подвязать DTPicker?

P.S. Обычно делаю rs.Fields("dat_od").Value = DTPicker1.Value в событии Change. Но ведь и привязка должна работать по-идее.
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Сообщение MIT » 19.10.2006 (Чт) 22:18

Напиши тожже самое в других похожих событиях
Например у combobox не срабатывает Change, но Click работает даже при получении фокуса от Tab
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 19.10.2006 (Чт) 23:16

MIT, ты не понял сути вопроса. Я не хочу ничего писать в событиях. Большинство стандартных элементов управления можно связать с определенным полем в БД (посредством DataSource, DataField). Для DTPicker'a такая привязка не работает должным образом, а должна (наверное).
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

lister
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 389
Зарегистрирован: 15.01.2005 (Сб) 7:34
Откуда: Страна оления

Сообщение lister » 20.10.2006 (Пт) 0:06

VVitafresh писал(а):...такая привязка не работает должным образом, а должна (наверное)...


А может все-таки не должна?... Может стоит обратиться к MSDN?

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 20.10.2006 (Пт) 0:09

Должна-должна. Иначе зачем тогда контролу свойства DataSource и DataField?
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

lister
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 389
Зарегистрирован: 15.01.2005 (Сб) 7:34
Откуда: Страна оления

Сообщение lister » 20.10.2006 (Пт) 0:16

VVitafresh писал(а):Должна-должна. Иначе зачем тогда контролу свойства DataSource и DataField?


В этом контроле скорее всего привязка односторонняя - только на чтение полей из БД. Сохранять скорее всего нужно вручную. (Хотя я не настаиваю на верности этого)

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 20.10.2006 (Пт) 0:31

Изменение
Код: Выделить всё
rs.UpdateBatch adAffectAll
на
Код: Выделить всё
rs.UpdateBatch adAffectCurrent
исправило ситуацию. Выбор новой даты теперь запоминается в БД.

Казалось бы мелочь -- а такое неадекватное поведение.

(555 пост)
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

lister
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 389
Зарегистрирован: 15.01.2005 (Сб) 7:34
Откуда: Страна оления

Сообщение lister » 20.10.2006 (Пт) 0:46

Хм... не знал...

VVitafresh, где вычитал?.. Или сам догадался?

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 20.10.2006 (Пт) 0:54

lister писал(а):VVitafresh, где вычитал?.. Или сам догадался?

Методом научного тыка, исходя из того, что должно ведь как-то работать :)

Кстати, если менять текущую запись в рекордсете (rs.MoveNext, rs.MovePrevious), то Update вообще не нужен и все привязки работают корректно. Но у меня вызывается форма для редактирования одной конкретной записи и все изменения при выходе должны сохраняться.
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 60

    TopList