Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / TextBox и ADODB.Recordset / 10 сообщений из 10, страница 1 из 1
06.07.2006, 12:37
    #33835291
Юрий_Ш
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TextBox и ADODB.Recordset
Добрый день всем. У мены такая проблемма, если конечно она таковой является:

На форме есть 2 textBox а. Источником данных для обоих является один ADODB.recordeset и соответственно определенные его столбцы.

Ситуация: Ввожу данные в box1, затем в box2 и не выходя из box2 в отладке делаю recordset.UpdateBacth.

Обнаруживаю, что в исходной таблице (SQL server 2000) в поле, связанном с Вох1 данные появились, а в том, что связано с вох2 (из которого я не вышел после ввода данных) стоит null. Но в отладке-то свежее значение вох2 просматривается! Пробовал setfocus ом поиграть-то же самое.

Какой выход из этой ситуации, кто-нибудь знает?
...
Рейтинг: 0 / 0
06.07.2006, 14:21
    #33835665
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TextBox и ADODB.Recordset
Если ваш рекордсет открыт на единственной записи, и привязывается к элементам ввода данных, надо перед привязкой выполнить rs.MoveFirst.
...
Рейтинг: 0 / 0
10.07.2006, 10:20
    #33841286
Юрий_Ш
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TextBox и ADODB.Recordset
Прошу прощения, маленькая неточность. Ещё есть addnew. Вот код и ситуация с ним такая же печальная:

Option Explicit
Dim r1 As New ADODB.Recordset

Private Sub Command3_Click() 'прикрепление к источнику
r1.Open "Select * FROM tblUnit", conn, adOpenKeyset, adLockOptimistic
r1.MoveFirst
r1.AddNew
Set txt1.DataSource = r1
End Sub
'попытка обновить после ввода в поле некого значения
'обновление txt1 ни к чему не приводит
Private Sub txt1_DblClick()
r1.UpdateBatch
End Sub

Далее вылетает сообщение про обработчик, который не допускает повторные коды. Заранее спасибо.
...
Рейтинг: 0 / 0
10.07.2006, 10:33
    #33841320
TIKO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TextBox и ADODB.Recordset
Set txt1.DataSource = r1
DataField еще нужен новерное
попробуй установи txt1.DataSource и txt1.DataField
перед Addnew
...
Рейтинг: 0 / 0
10.07.2006, 10:36
    #33841337
Юрий_Ш
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TextBox и ADODB.Recordset
DataField установлен на странице свойств и остается неизменным. (?)
...
Рейтинг: 0 / 0
10.07.2006, 10:50
    #33841389
TIKO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TextBox и ADODB.Recordset
поменяй
r1.UpdateBatch
на это
r1.Save
...
Рейтинг: 0 / 0
10.07.2006, 11:17
    #33841499
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TextBox и ADODB.Recordset
TIKOпоменяй
r1.UpdateBatch
на это
r1.SaveЭто для сохранения рекордсета в файл и к проблеме отношения не имеет.
Юрий_Ш Это такое поведение стандартного биндинга и оно никак не лечится. Пиши свой класс, который при сохранении будет заполнять рекордсет значениями из контролов и наоборот. Или бери мой.
...
Рейтинг: 0 / 0
10.07.2006, 11:50
    #33841625
_bob
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TextBox и ADODB.Recordset
пока не уберешь фокус из текстбокса, значение из него не считаешь, просто переведи фокус и все
...
Рейтинг: 0 / 0
10.07.2006, 11:54
    #33841647
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TextBox и ADODB.Recordset
Есть два способа привязки контролов к единичной записи:
Через свойство DataSource или через BindingColleciton.
Пишу не с работы, поэтому могут быть неточности.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
'Используя DataSource
Dim rs as ADODB.recordset

Public sub OpenOnNewRecord
  set rs= new ADODB.Recordset
'Нам не надо фетчить записи из таблицы, поэтому открываем на несуществующей записи 
  rs.Open "Select * FROM tblUnit Where ID = -1", conn, adOpenStatic, adLockBatchOptimistic
  rs.AddNew  '"ID", x  ' Это - если значение первичного ключа известно заранее
'Если используется счетчик в качестве первичного ключа, придется чуть хитрее
  rs.UpdateButch
  rs.Resinq
  Set txt1.DataSource = rs
  Set txtXX.DataSource = rs  'все контролы - так же
end sub

private sub btnOK_Click()
  Sendkeys "+{Tab}"  'Чтобы значение из последнего измененного текстбокса попало в рекордсет
'(не помню, отработает ли Validate при получении фокуса кнопкой)
  Sendkeys "{Tab}"
  rs.UpdateButch
end sub
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
'Используя BindingCollection
Dim rs as ADODB.recordset
dim bnd1 as BindingCollection

Public sub OpenOnNewRecord
  set rs= new ADODB.Recordset
  rs.Open "Select * FROM tblUnit Where ID = -1", conn, adOpenStatic, adLockBatchOptimistic
'Нам не надо фетчить записи из таблицы, поэтому открываем на несуществующей записи 
  rs.AddNew  '"ID", x  ' Это - если значение первичного ключа известно заранее
'Если используется счетчик в качестве первичного ключа, придется чуть хитрее
  rs.UpdateButch
  rs.Resinq
  Set bnd1.DataSource = rs
  bnd1.Add txt1, "Text", "ПолеРекодсета"
  bnd1.Add txtXXX, "Text", "ПолеРекодсетаXXX"
end sub

private sub btnOK_Click()
  Sendkeys "+{Tab}"  'Чтобы значение из последнего измененного текстбокса попало в рекордсет 
'(не помню, отработает ли Validate при получении фокуса кнопкой)
  Sendkeys "{Tab}"
  rs.UpdateButch
end sub
BindingCollection имеет то приемущество, что можно забиндить любое свойство любого контрола.
...
Рейтинг: 0 / 0
10.07.2006, 13:43
    #33842209
Юрий_Ш
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TextBox и ADODB.Recordset
bob: SetFocus не помогает
Antonariy спасибо
Начинаю штудировать
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / TextBox и ADODB.Recordset / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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