| imho.ws |
![]() |
|
|
|
# 1 |
|
Member
Регистрация: 13.07.2004
Адрес: Очень странное место.
Сообщения: 328
![]() ![]() |
Доброго времени суток.
Есть access и база данных в нем. Точнее пока ее нет. Но будет. В форме есть незамысловатый контрол - TextBox. Еще там есть строка ввода и кнопка. При загрузке формы в TextBox грузится содержимое столбца таблицы. По нажатии кнопки в эту таблицу добавляется то что в строке ввода. Естественно надо обновиьт содержимое TextBox. Вот тут у меня ступор. Никаких тебе рефрещей. Только какой то подозрительный .Requery. Естественное решение вопроса - открываем MSDN и смотрим. Вот тут и появляется целый ряд вопросов: 1. В MSDN я не нашол у TextBox такого метода. Его нет. Такого метода вообще нет. Фильтровал по Visual Basic. Искал по TextBox и .Requery. MSDN за апрель 2003. В MSDN что информации о классах VBA нет ? 2. Есль ли какой то специализированый форум по VBA. А еще лутше по VBA и Access ? Вопросов у меня судя по всему будет много... 3. Как эту гадость обновлять то ? На всяк случай привожу текущий код формы: Код:
Option Compare Database
Private Sub proff_in_b_Click()
On Error GoTo Err_proff_in_b_Click
Const Provider = "Provider=Microsoft.Jet.OLEDB.4.0;"
Const DataSource = "Data Source=com_db.mdb"
Dim Connection As New ADODB.Connection
Dim RecordSet As New ADODB.RecordSet
Dim qwery As String
On Error GoTo Finally
Call Connection.Open(Provider & DataSource)
MsgBox "connected"
proff_in.SetFocus
qwery = "INSERT INTO proff_T (proff) values (" + proff_in.Text + ")"
Call RecordSet.Open("proff_t", Connection, adOpenKeyset, adLockOptimistic)
Call RecordSet.AddNew("proff", proff_in.Text)
RecordSet.Close
Connection.Close
proff_list.Requery
Finally:
If (Err.Number <> 0) Then
MsgBox Err.Description
End If
DoCmd.GoToRecord , , acNewRec
Exit_proff_in_b_Click:
Exit Sub
Err_proff_in_b_Click:
MsgBox Err.Description
Resume Exit_proff_in_b_Click
End Sub
Private Sub proff_del_b_Click()
On Error GoTo Err_proff_del_b_Click
DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
DoCmd.DoMenuItem acFormBar, acEditMenu, 6, , acMenuVer70
Exit_proff_del_b_Click:
Exit Sub
Err_proff_del_b_Click:
MsgBox Err.Description
Resume Exit_proff_del_b_Click
End Sub
Private Sub proff_upd_b_Click()
On Error GoTo Err_proff_upd_b_Click
DoCmd.DoMenuItem acFormBar, acEditMenu, acUndo, , acMenuVer70
Exit_proff_upd_b_Click:
Exit Sub
Err_proff_upd_b_Click:
MsgBox Err.Description
Resume Exit_proff_upd_b_Click
End Sub
метод вроде нашло. Что то я ничего не понял... |
|
|
|
|
# 2 |
|
Member
Регистрация: 13.07.2004
Адрес: Очень странное место.
Сообщения: 328
![]() ![]() |
Сходу еще один вопрос.
Не бейте сильно : Как и где тут обьявитьглобальную переменную ? Хотелось бы соединятся с базой ОДИН раз при загрузке формы, ане каждый раз когда кнопку жмут. ибо последнее - бред. НО при этом Код:
Private Sub Form_Load()
Global Connection As New ADODB.Connection
Const Provider = "Provider=Microsoft.Jet.OLEDB.4.0;"
Const DataSource = "Data Source=com_db.mdb"
Connection.Open (Provider & DataSource)
On Error GoTo Finally
Exit Sub
Finally:
If (Err.Number <> 0) Then
MsgBox Err.Description
End If
DoCmd.GoToRecord , , acNewRec
End Sub
Если вынести процедуру в модуль то обьявление ошибки не выдает, но переменную из другого модуля не видно.... |
|
|
|
|
# 4 |
|
Member
Регистрация: 13.07.2004
Адрес: Очень странное место.
Сообщения: 328
![]() ![]() |
Нет. А как это применимо в данном случае ?
В том смысле что зачем мне новый класс ? Это относится к какой из проблем : 1. Обновление TextBox. 2. Создание глобальной переменной ? Очень надеюсь на ваши пояснения. А то С уважением. Ворон. |
|
|
|
|
# 5 |
|
Junior Member
Регистрация: 31.03.2003
Адрес: СПб
Сообщения: 162
![]() ![]() ![]() |
Глобальные переменные в VBA (если я правильно помню
) объявляются вне процедуры так:Код:
Public VarName As String
__________________
640Kbytes should be enough for everything! (c) Bill Gates, 1981. Все "спасибо" в репутацию
Последний раз редактировалось Al-x; 05.10.2005 в 21:41. |
|
|
|
|
# 6 |
|
Member
Регистрация: 13.07.2004
Адрес: Очень странное место.
Сообщения: 328
![]() ![]() |
Public VarName As String
- сейчас попробую. А по поводу Requery (в принципе) - а как иначе получить измененные данные из таблицы, если не выполнить запрос ешё раз? -Никак. По логике должно работать. Но не работает. Не обновляется TextBox с таким кодом. Точнее обновляется но с "задержкой". Тоесть: 1. Нажал на кнопку. видимого эффекта нет. 2. Нажал еще раз появилось то что сохранил в прошлый раз. 3. Нажал еще раз появилось то что сохранил в прошлый раз. Тоесть RecordSet.Close Connection.Close proff_list.Requery Нехватает. Нужно еще чего то. Но что ? |
|
|
|
|
# 8 |
|
Junior Member
Регистрация: 31.03.2003
Адрес: СПб
Сообщения: 162
![]() ![]() ![]() |
Попробуй так (объявит глобальную переменную вне процедуры):
Код:
Public Connection As Variant
Private Sub Form_Load()
Set Connection = New ADODB.Connection
Const Provider = "Provider=Microsoft.Jet.OLEDB.4.0;"
Const DataSource = "Data Source=com_db.mdb"
Connection.Open (Provider & DataSource)
On Error GoTo Finally
Exit Sub
Finally:
If (Err.Number <> 0) Then
MsgBox Err.Description
End If
DoCmd.GoToRecord , , acNewRec
End Sub
По поводу обновления - сейчас уже и не вспомню почему так делал, но когда мне надо было обновить список я делал так (strFilter - SQL запрос): Код:
If SysCmd(acSysCmdGetObjectState, acForm, "frmExportWord") Then _
Forms!frmExportWord.lbxDatalist.RowSource = strFilter
__________________
640Kbytes should be enough for everything! (c) Bill Gates, 1981. Все "спасибо" в репутацию
|
|
|
|
|
# 10 |
|
Junior Member
Регистрация: 31.03.2003
Адрес: СПб
Сообщения: 162
![]() ![]() ![]() |
С Public... я пробовал в Access 2003 - у меня он переменную видел.
Обновление скопировал из одного старого проекта. Можешь базу выложить (2 файла - com_db.mdb и другой *.mdb в котором код)? Или там один файл?
__________________
640Kbytes should be enough for everything! (c) Bill Gates, 1981. Все "спасибо" в репутацию
|
|
|
|
|
# 12 | |
|
Junior Member
Регистрация: 31.03.2003
Адрес: СПб
Сообщения: 162
![]() ![]() ![]() |
Цитата:
Код:
Private Sub proff_in_b_Click()
Dim qwery As String
On Error GoTo Finally
proff_in.SetFocus
qwery = "INSERT INTO proff_T ( proff ) VALUES ('" + proff_in.Text + "');"
DoCmd.RunSQL (qwery)
proff_list.Requery
End Sub
__________________
640Kbytes should be enough for everything! (c) Bill Gates, 1981. Все "спасибо" в репутацию
|
|
|
|
|
|
# 13 |
|
Member
Регистрация: 13.07.2004
Адрес: Очень странное место.
Сообщения: 328
![]() ![]() |
Спасибо.
ОБНОВЛЕНИЕ РАБОТАЕТ !!!! проблема похоже было в использованиии ADO/ Но конечно лутше без ADO. Просто во всех книгах которые мне в руки попадали я сталкивался только с соединением через ADO и DAO. А appliction для Access нигде описано не было. =( Правда появились вопросы по DoCmd.RunSQL =( Изложил в новой теме так как вроде бы к этой не относятся. |
|
|