imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 05.10.2005, 00:18     # 1
Raven B.
Member
 
Аватар для Raven B.
 
Регистрация: 13.07.2004
Адрес: Очень странное место.
Сообщения: 328

Raven B. Известность не заставит себя ждатьRaven B. Известность не заставит себя ждать
Question VBA, Access, MSDN и прочие неприятности

Доброго времени суток.

Есть 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
При этом на http://msdn.microsoft.com/archive/de.../D6/S5B1DB.asp
метод вроде нашло.
Что то я ничего не понял...
Raven B. вне форума  
Старый 05.10.2005, 01:42     # 2
Raven B.
Member
 
Аватар для Raven B.
 
Регистрация: 13.07.2004
Адрес: Очень странное место.
Сообщения: 328

Raven B. Известность не заставит себя ждатьRaven B. Известность не заставит себя ждать
Сходу еще один вопрос.
Не бейте сильно :
Как и где тут обьявитьглобальную переменную ?
Хотелось бы соединятся с базой ОДИН раз при загрузке формы, ане каждый раз когда кнопку жмут. ибо последнее - бред.

НО при этом

Код:
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
Выдает ошибку. Говорит что нельзя обявлять глобальные переменные в методах контролов. насколько я понял. Так где же их обьявлять то ?
Если вынести процедуру в модуль то обьявление ошибки не выдает, но переменную из другого модуля не видно....
Raven B. вне форума  
Старый 05.10.2005, 19:03     # 3
npoka3a
Guest
 
Сообщения: n/a

А сделать в проекте файл типа класс не пробовал?
 
Старый 05.10.2005, 19:17     # 4
Raven B.
Member
 
Аватар для Raven B.
 
Регистрация: 13.07.2004
Адрес: Очень странное место.
Сообщения: 328

Raven B. Известность не заставит себя ждатьRaven B. Известность не заставит себя ждать
Нет. А как это применимо в данном случае ?
В том смысле что зачем мне новый класс ?

Это относится к какой из проблем :
1. Обновление TextBox.
2. Создание глобальной переменной ?

Очень надеюсь на ваши пояснения.
А то

С уважением. Ворон.
Raven B. вне форума  
Старый 05.10.2005, 21:39     # 5
Al-x
Junior Member
 
Регистрация: 31.03.2003
Адрес: СПб
Сообщения: 162

Al-x МолодецAl-x МолодецAl-x Молодец
Глобальные переменные в VBA (если я правильно помню) объявляются вне процедуры так:
Код:
Public VarName As String
А по поводу Requery (в принципе) - а как иначе получить измененные данные из таблицы, если не выполнить запрос ешё раз? Можно конечно proff_list.Text = proff_in.Text, но это уже совсем из другой оперы...
__________________
640Kbytes should be enough for everything! (c) Bill Gates, 1981.
Все "спасибо" в репутацию

Последний раз редактировалось Al-x; 05.10.2005 в 21:41.
Al-x вне форума  
Старый 06.10.2005, 02:25     # 6
Raven B.
Member
 
Аватар для Raven B.
 
Регистрация: 13.07.2004
Адрес: Очень странное место.
Сообщения: 328

Raven B. Известность не заставит себя ждатьRaven B. Известность не заставит себя ждать
Public VarName As String
- сейчас попробую.

А по поводу Requery (в принципе) - а как иначе получить измененные данные из таблицы, если не выполнить запрос ешё раз?
-Никак. По логике должно работать. Но не работает. Не обновляется TextBox с таким кодом. Точнее обновляется но с "задержкой". Тоесть:

1. Нажал на кнопку. видимого эффекта нет.
2. Нажал еще раз появилось то что сохранил в прошлый раз.
3. Нажал еще раз появилось то что сохранил в прошлый раз.

Тоесть

RecordSet.Close
Connection.Close
proff_list.Requery

Нехватает. Нужно еще чего то. Но что ?
Raven B. вне форума  
Старый 06.10.2005, 14:07     # 7
Raven B.
Member
 
Аватар для Raven B.
 
Регистрация: 13.07.2004
Адрес: Очень странное место.
Сообщения: 328

Raven B. Известность не заставит себя ждатьRaven B. Известность не заставит себя ждать
На
Цитата:
Private Sub Form_Load()
Public Connection As New ADODB.Connection
Ругается что:
Цитата:
Invalid attribute in Sub function
Raven B. вне форума  
Старый 06.10.2005, 18:38     # 8
Al-x
Junior Member
 
Регистрация: 31.03.2003
Адрес: СПб
Сообщения: 162

Al-x МолодецAl-x МолодецAl-x Молодец
Попробуй так (объявит глобальную переменную вне процедуры):
Код:
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.
Все "спасибо" в репутацию
Al-x вне форума  
Старый 07.10.2005, 01:25     # 9
Raven B.
Member
 
Аватар для Raven B.
 
Регистрация: 13.07.2004
Адрес: Очень странное место.
Сообщения: 328

Raven B. Известность не заставит себя ждатьRaven B. Известность не заставит себя ждать
1. Не помогло. Не видит оно этой переменной.
2. Не ругалось, о и не работало. К своему стыду вынужден заметить что не понял что и как оно должно было сделать...
Raven B. вне форума  
Старый 07.10.2005, 10:28     # 10
Al-x
Junior Member
 
Регистрация: 31.03.2003
Адрес: СПб
Сообщения: 162

Al-x МолодецAl-x МолодецAl-x Молодец
С Public... я пробовал в Access 2003 - у меня он переменную видел.
Обновление скопировал из одного старого проекта.
Можешь базу выложить (2 файла - com_db.mdb и другой *.mdb в котором код)? Или там один файл?
__________________
640Kbytes should be enough for everything! (c) Bill Gates, 1981.
Все "спасибо" в репутацию
Al-x вне форума  
Старый 07.10.2005, 17:33     # 11
Raven B.
Member
 
Аватар для Raven B.
 
Регистрация: 13.07.2004
Адрес: Очень странное место.
Сообщения: 328

Raven B. Известность не заставит себя ждатьRaven B. Известность не заставит себя ждать
Там один файл.
Сейчас еще раз попробую с public...
Вроде все зделал как ты посоветовал...
Raven B. вне форума  
Старый 07.10.2005, 21:37     # 12
Al-x
Junior Member
 
Регистрация: 31.03.2003
Адрес: СПб
Сообщения: 162

Al-x МолодецAl-x МолодецAl-x Молодец
Цитата:
Raven B.:
Там один файл
Тогда зачем к нему коннект создавать? Можно просто с локальными талицами работать например так:
Код:
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.
Все "спасибо" в репутацию
Al-x вне форума  
Старый 12.10.2005, 22:58     # 13
Raven B.
Member
 
Аватар для Raven B.
 
Регистрация: 13.07.2004
Адрес: Очень странное место.
Сообщения: 328

Raven B. Известность не заставит себя ждатьRaven B. Известность не заставит себя ждать
Спасибо.
ОБНОВЛЕНИЕ РАБОТАЕТ !!!!
проблема похоже было в использованиии ADO/
Но конечно лутше без ADO. Просто во всех книгах которые мне в руки попадали я сталкивался только с соединением через ADO и DAO. А appliction для Access нигде описано не было. =(
Правда появились вопросы по DoCmd.RunSQL =(
Изложил в новой теме так как вроде бы к этой не относятся.
Raven B. вне форума  


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 21:26.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.