Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » VBA for Access

Модерирует : ShIvADeSt

ShIvADeSt (14-09-2011 00:58): Все обсуждение тут http://forum.ru-board.com/topic.cgi?forum=33&topic=0357&start=1180  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

   

dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Slatsik
setFocus не вызывается, потому как это не событие, а как бы свойство. Поставь обработку(код) на событие GotFocus
Цитата:
если же нет никаких элементов, то нажатие кнопок и других управляющих элементов приводит к выводу access'ом предупреждающих сообщений
На клик проверяй Count елементов. Если = 0, то Exit Sub. А уже после данной прверки код открытия

Цитата:
Может, имеет смысл как-то по-другому выкрутиться, например, проверять на наличие записей ...  
 
я проверяю, только это не влияет на выводимое предупреждение  
Kак проверку делаешь?  

Всего записей: 3923 | Зарегистр. 31-03-2002 | Отправлено: 23:39 06-05-2009 | Исправлено: dneprcomp, 23:54 06-05-2009
Slatsik



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dneprcomp
Правильно! я и имел в виду, что установка свойства SetFocus в VBA приводит к вызову  события GotFocus. Собственно, мне и нужно инициировать событие GotFocus! (на самом деле DblClick, о чем говорится в самом начале моего поста) прямо из VBA. Вопрос: как это сделать из VBA?
 
проверка такая (не нашел клавиш с форматированием, потому привожу plaintext )
    msFormName = "fClntMain"
     
    If IsNull(Me.idClnt) Then Exit Sub
    DoCmd.openform msFormName, , , , acFormEdit, , str(Me.idClnt)
 
 
Добавлено:
Ура! Все разрешилось!!!
у меня изначально была правильная идея, только в одном месте ступил (неправильно организовал переход в субформу)...  
зато нет худа без добра - нашел способ вызывать любую обработку событий из любых открытых форм. На всякий случай приведу его здесь - мало ли кому пригодится...
Если событие навешано на элемент, у которого нет метода SetFocus (типа, заголовки, надписи и т.д.), то создается отдельная кнопка (как бы псевдокнопка, пусть будет dummy), которую можно сделать невидимой/прозрачной и на событие click по ней навесить нужную обработку  события. а потом в нужном месте обозначать след. код:
 
    форма![dummy].SetFocus
    SendKeys "{ENTER}", True
 
будет выполнено нужное событие.

Всего записей: 59 | Зарегистр. 12-05-2003 | Отправлено: 10:13 10-05-2009
Nubiko

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте. Помогите пожалуйста!!! Мне нужно при нажатии кнопки выбрать изображение и чтобы потом оно сохранилось на форме. Я только учусь)) Заранее спасибо.

Всего записей: 1 | Зарегистр. 14-05-2009 | Отправлено: 22:23 14-05-2009
Slatsik



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Уважаемые форумчане,
подскажите, плз, что в VBA отвечает за назначение свойств в окне [Сервис]->[Параметры запуска]? Буду очень признателен!

Всего записей: 59 | Зарегистр. 12-05-2003 | Отправлено: 23:29 21-05-2009
filemoto



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Люди добрые, подскажите такую вещь, очень нужно.
Есть прайс, много позиций, я допустим, изменил цену у одной позиции, как можно пометить както, что произошло изменение у этой записи?
Чтобы потом макросом оставить только тех, в которых произошли изменения. Было 100 записей, у двух изменилась цена, я запускаю макрос, все записи удаляются, кроме тех, где произошли изменения.
 
Плиз хелп.

Всего записей: 132 | Зарегистр. 08-04-2006 | Отправлено: 17:59 03-06-2009
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
filemoto
Где просходит изменение? Если  записи в базу(только на скрине), то можешь менять цвет поля. Или заносить в массив идентификаторы какие-нибудь.
Если после записи в базу, то
или добавь еще одно поле в table и меняй его значение
или опять же заноси в массив ID измененых рекордов

Всего записей: 3923 | Зарегистр. 31-03-2002 | Отправлено: 20:51 03-06-2009
TohaDub



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Друзья, сразу оговорюсь что в сабже не силен.
Подскажите плиз есть форма

 
Как сделать что бы при нажатии на галочку, в поле проставлялась текущая дата?

Всего записей: 371 | Зарегистр. 26-06-2007 | Отправлено: 10:04 10-06-2009
vofkanov



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
TohaDub
 
по идее где-то так
 
Private Sub MBIspolz_AfterUpdate()
  If MBIspolz Then
    Me.MBIspolzDate = Date
  End If
End Sub
 
Добавлено:
Slatsik
в ВБА не нашел, м.б. в Access?

Всего записей: 181 | Зарегистр. 06-02-2008 | Отправлено: 23:36 12-06-2009 | Исправлено: vofkanov, 23:39 12-06-2009
TohaDub



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vofkanov

Цитата:
в ВБА не нашел, м.б. в Access?

 
Наверное да, в конструкторе формы вызывается в обработчике (Microsoft Visual Basic).

Всего записей: 371 | Зарегистр. 26-06-2007 | Отправлено: 08:45 13-06-2009
vofkanov



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
TohaDub

Цитата:
Наверное да, в конструкторе формы вызывается в обработчике (Microsoft Visual Basic).

Параметры запуска?

Всего записей: 181 | Зарегистр. 06-02-2008 | Отправлено: 13:54 14-06-2009
jek1976



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Извините за ламерский вопрос. Только начинаю разбираться с Access.
Подскажите, как организовать вывод записей из таблицы БД на экранную форму?

Всего записей: 1057 | Зарегистр. 15-04-2005 | Отправлено: 21:05 20-06-2009 | Исправлено: jek1976, 14:39 21-06-2009
filemoto



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
а народ, будьте добры, скажите, вот я получил из другой базы рекордсет.
могу ли я его вставить в свою таблицу в текущей базе данных?
 
потому что. если делать перебором:

Код:
while rs.eof = false
docmd.runsql ("INSERT INTO myTable(id, name) VALUES(" & rs.Fields(0) & ",'" & rs.Fields(1) & "')")
rs.movenext
wend

получается о-о-о-чень медленно
 
может както быстрее можно, типа:
dim db as databse
set db = currentdb
db.Recordset = rs    '<--- вот чтото в таком духе

Всего записей: 132 | Зарегистр. 08-04-2006 | Отправлено: 03:05 21-06-2009
jek1976



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Извините за ламерский вопрос. Только начинаю разбираться с Access.  
Подскажите, как организовать вывод записей из таблицы БД на экранную форму?

Уточню вопрос.
Мне требуется организовать вывод записей из таблицы БД на экранную форму -- в таблицу с полосой прокрутки?  
 
Штатная таблица БД, которую можно разместить на форме - не устраивает, т.к. там присутствуют (внизу) штатные кнопки перемещения по базе данных, а они мне не нужны! Для перемещения по базе вместо этих кнопок мне надо использовать полосу прокрутки.

Всего записей: 1057 | Зарегистр. 15-04-2005 | Отправлено: 14:42 21-06-2009
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
jek1976
Ну зачем задавать один и тот же вопрос повсюду? Уже отвечено в http://forum.ru-board.com/topic.cgi?forum=33&bm=1&topic=0357&start=860#lt
 
Добавлено:
filemoto

Цитата:
получается о-о-о-чень медленно  
Как получен rs? Надо бы полный код приводить.
В общем виде нужна всего одна строка:
Код:
 
docmd.runsql ("INSERT INTO myTable (id, name)  SELECT Fields(0), Fields(1)  From [имя table, использованный для формирования rs]  
   
'<--- вот что-то в таком духе
 
http://www.blueclaw-db.com/accessquerysql/sql_insert_into.htm

Всего записей: 3923 | Зарегистр. 31-03-2002 | Отправлено: 19:52 21-06-2009 | Исправлено: dneprcomp, 20:05 21-06-2009
jek1976



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dneprcomp
Извиняюсь, не увидел ответа, т.к. не получал уведомление.

Всего записей: 1057 | Зарегистр. 15-04-2005 | Отправлено: 20:32 21-06-2009
jek1976



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть форма с размещенными элементами управления ComboBox.
Еще есть процедура, в которой считываются значения из этих элементов.
Вот ее фрагмент:
 

Код:
   'опрос элементов управления
    Автор = Me!Pole1.Text
    Соавторы = Me!Pole2.Text
    Название = Me!Pole3.Text
    Издательство = Me!Pole4.Text
    Год = Pole5.Text

 
При запуске формы (в режиме формы) и попытке считывания значения из первого элемента выдается ошибка: Невозможно обратиться к свойству или методу элемента управления, пока на этот элемент не установлен фокус ввода.
 
Как это побороть?

Всего записей: 1057 | Зарегистр. 15-04-2005 | Отправлено: 01:01 04-07-2009
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
jek1976
Установить фокуc, естественно
[элемент].SetFocus

Всего записей: 3923 | Зарегистр. 31-03-2002 | Отправлено: 03:40 04-07-2009
jek1976



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dneprcomp
Спасибо, работает.
 
Но появилась другая проблема.
Опрос элементов у меня идет при событии Change в элементе TextBox с именем Pole3 (находится под Label'ом "Название" на картинке внизу сообщения). Поскольку при опросе значений остальных элементов формы фокус уходит с Pole3, то я автоматически "теряю" курсор, которым редактирую в нем текст.
 
Как мне "удержать" курсор в TextBox и в это же время еще умудриться, как и раньше, считывать значения из других элементов формы при событии Change? Или может быть опрос элементов делать каким-нибудь другим способом, без привлечения метода .SetFocus ?
 
 
Вот часть программы:
 
 
 
Это описано на уровне модуля:
----------------------------------
Option Compare Database
Option Explicit
 
'Глобальные переменные модуля
 Dim БиблиоЗапись As String
----------------------------------
 
 
 
Это описано на уровне формы:
----------------------------------------------------------------
Private Sub Pole1_Change()
Call ПостроительБиблиографическойЗаписи("статья")
End Sub
 
 
Private Sub Pole2_Change()
Call ПостроительБиблиографическойЗаписи("труды")
End Sub
 
 
Private Sub Pole3_Change()
Call ПостроительБиблиографическойЗаписи("книга")
End Sub
 
 
Public Sub ПостроительБиблиографическойЗаписи(Тип As String)
    Dim Автор As String
    Dim Соавторы As String
    Dim Название As String
    Dim Издательство As String
    Dim Год As String
    Dim Том As String
    Dim Номер As String
    Dim Страницы As String
    Dim Конференция As String
    Dim МестоДатаПроведения As String
    Dim МестоДатаОпубликования As String
    Dim Серия As String
 
   'опрос элементов управления
    Pole1.SetFocus
    Автор = Pole1.Text
    Pole2.SetFocus
    Соавторы = Pole2.Text
    Pole3.SetFocus
    Название = Pole3.Text
    Pole4.SetFocus
    Издательство = Pole4.Text
    Pole5.SetFocus
    Год = Pole5.Text
    Pole6.SetFocus
    Том = Pole6.Text
    Pole7.SetFocus
    Номер = Pole7.Text
    Pole8.SetFocus
    Страницы = Pole8.Text
    Pole9.SetFocus
    Конференция = Pole9.Text
    Pole10.SetFocus
    МестоДатаПроведения = Pole10.Text
    Pole11.SetFocus
    МестоДатаОпубликования = Pole11.Text
    Pole12.SetFocus
    Серия = Pole12.Text
 
   'построение библиографической записи
    Select Case Тип
    Case "статья"
         БиблиоЗапись = Автор + " " + Соавторы + " " + Название
    Case "труды"
         БиблиоЗапись = Автор + " " + Соавторы
    Case "книга"
         БиблиоЗапись = Автор + " " + Название
    End Select
 
    БиблиографическаяСтрока.SetFocus
    БиблиографическаяСтрока.Text = БиблиоЗапись
End Sub
----------------------------------------------------------------
 
 
Это форма:
Все элементы связаны с одноименными полями таблицы БД. Исключение составляет лишь TextBox с именем БиблиографическаяСтрока (находится под Label "Библиографическая запись").

 

Всего записей: 1057 | Зарегистр. 15-04-2005 | Отправлено: 22:03 04-07-2009 | Исправлено: jek1976, 14:31 05-07-2009
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
jek1976

Цитата:
Поскольку при опросе значений остальных элементов формы фокус уходит с Pole3, то я автоматически "теряю" курсор, которым редактирую в нем текст.  

Логику работы формы не понял. Что значит "теряю" и чем это мешает?  
Какой смысел переформировывать строку после добавления/удаления каждого знака?
Лучше на LostFocus подвесить.

Всего записей: 3923 | Зарегистр. 31-03-2002 | Отправлено: 10:04 05-07-2009 | Исправлено: dneprcomp, 10:25 05-07-2009
jek1976



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Логику работы формы не понял.

Я делаю БД для хранения библиографической информации о печатных и электронных публикациях (подобные аналоги программы, имеющиеся в инете, меня не устраивают по функциональности). На данный момент разрабатываю форму для ввода и корректировки данных, заносимых в БД. Общий вид этой формы уже был приведен выше (в предыдущем посте). Если Вам это будет интересно, то я с удовольствием объясню логику работы. Суть в следующем.
Вначале, при вводе данных о публикации в окне "Тип публикации" выбирается, собственно, тип публикации из следующего списка - книга, статья, обзор, учебное пособие, методические указания, монография, диссертация. Дело в том, что для каждого из этих типов нужны свои - индивидуальные - поля для занесения данных. Например, для книги достаточно указать автора, название, год издания, издательство и кол-во страниц. А для статьи, кроме автора, названия и года издания, нужны уже другие поля - название журнала, его том и номер, серия, первая и последняя страницы статьи. Поэтому при выборе типа публикации лишние поля на форме становятся неактивными, что я делаю при помощи такого фрагмента кода:

Код:
'Действие после выбора ТипаПубликации на форме
 Private Sub Pole0_AfterUpdate()
      If Pole4.Text = "статья" Then
         Pole4.Enabled = False
      End If
      . . .
 End Sub

Далее, в поля, оставшиеся активными для выбранного типа публикации, надо вносить данные. Одновременно с процессом ввода данных формируется строка в поле "Библиографическая запись". Эта строка представляет собой набор таких данных, как ФИО автора, название публикации и прочих, выстроенных друг за другом в определенном порядке. Здесь тоже есть свои правила, которые взаимно отличаются для разных типов публикаций!!! Замечу, что мне нужно, чтобы строка в поле "Библиографическая запись" формировалась при вводе или изменении данных в полях формы! То есть, если я набираю или редактирую текст в поле "Название", то содержимое поля "Библиографическая запись" тоже должно изменяться ОДНОВРЕМЕННО с редактированием соответствующего поля на форме. Аналогично должно происходить и с другими полями. Я делаю это при помощи события Change, привязанного к редактируемому полю и процедуры ПостроительБиблиографическойЗаписи, которая получает управление при этом событии:
 
Private Sub Pole1_Change()  
Call ПостроительБиблиографическойЗаписи("статья")  
End Sub  
Private Sub Pole2_Change()  
Call ПостроительБиблиографическойЗаписи("труды")  
End Sub  
Private Sub Pole3_Change()  
Call ПостроительБиблиографическойЗаписи("книга")  
End Sub  
 . . .
 
Public Sub ПостроительБиблиографическойЗаписи(Тип As String)  
    Dim Автор As String  
    Dim Соавторы As String  
    Dim Название As String  
    Dim Издательство As String  
    Dim Год As String  
    Dim Том As String  
    Dim Номер As String  
    Dim Страницы As String  
    Dim Конференция As String  
    Dim МестоДатаПроведения As String  
    Dim МестоДатаОпубликования As String  
    Dim Серия As String  
 
   'опрос элементов управления  
    Pole1.SetFocus :    Автор = Pole1.Text  
    Pole2.SetFocus :    Соавторы = Pole2.Text  
    Pole3.SetFocus :    Название = Pole3.Text  
    Pole4.SetFocus :    Издательство = Pole4.Text  
    Pole5.SetFocus :    Год = Pole5.Text  
    Pole6.SetFocus :    Том = Pole6.Text  
    Pole7.SetFocus :    Номер = Pole7.Text  
    Pole8.SetFocus :    Страницы = Pole8.Text  
    Pole9.SetFocus :    Конференция = Pole9.Text  
    Pole10.SetFocus :    МестоДатаПроведения = Pole10.Text  
    Pole11.SetFocus :    МестоДатаОпубликования = Pole11.Text  
    Pole12.SetFocus :    Серия = Pole12.Text  
 
   'построение библиографической записи  
    Select Case Тип  
    Case "статья"  
         БиблиоЗапись = Автор + " " + Соавторы + " " + Название  
    Case "труды"  
         БиблиоЗапись = Автор + " " + Соавторы  
    Case "книга"  
         БиблиоЗапись = Автор + " " + Название  
    End Select  
 
    БиблиографическаяСтрока.SetFocus              'ИЗ-ЗА ЭТОЙ ПЕРЕСТАНОВКИ ФОКУСА  
                                                                        ПРОИСХОДИТ "ПОТЕРЯ" ФОКУСА И НЕВОЗМОЖНО
                                                                        ПРОДОЛЖАТЬ РЕДАКТИРОВАНИЕ В ДРУГИХ ПОЛЯХ ФОРМЫ

    БиблиографическаяСтрока.Text = БиблиоЗапись  
End Sub
 
 

Цитата:
Что значит "теряю" и чем это мешает? Какой смысел переформировывать строку после добавления/удаления каждого знака?

Но как я уже сказал, есть проблема в том, что если я редактирую какое-либо поле (например, убираю символы в поле "Название"), то для отображения изменений, внесенных в поле "Название", фокус надо перевести в поле "Библиографическая запись". И при этом курсор из поля "Название" исчезает и редактирование невозможно продолжить, не поставив ВРУЧНУЮ курсор обратно! То есть курсор слетает после ввода/удаления хотя бы одного символа в полях формы.
 
Такая же история и с остальными полями - Год, Издательство, Место издания и проч. Можно было бы, конечно, не делать мгновенное обновление строки в поле "Библиографическая запись", а прикрутить кнопку для ручного обновления информации, но это будет крайне неудобно и придется ее опять же нажимать, чтобы увидеть изменения в поле "Библиографическая запись".
 
Что еще можно придумать, чтобы вернуть фокус от поля "Библиографическая строка" тому элементу, в котором я в данный момент редактирую данные? Или может быть, есть способ передачи данных в определенное поле, минуя необходимость установки фокуса на этом поле, ведь в обычном VBA, да и в других языках, установка фокуса для операций чтения/записи свойств элементов управления НЕ ТРЕБУЕТСЯ.

Всего записей: 1057 | Зарегистр. 15-04-2005 | Отправлено: 13:27 05-07-2009 | Исправлено: jek1976, 15:02 05-07-2009
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » VBA for Access
ShIvADeSt (14-09-2011 00:58): Все обсуждение тут http://forum.ru-board.com/topic.cgi?forum=33&topic=0357&start=1180


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2025

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru