На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! информация о разделе
user posted imageДанный раздел предназначается исключительно для обсуждения вопросов использования языка запросов SQL. Обсуждение общих вопросов, связанных с тематикой баз данных - обсуждаем в разделе "Базы данных: общие вопросы". Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ.

Модераторы: Akina
  
> Access м VBA - вопрос , Помогите разобраться!
    Возможно кому-то мой вопрос покажется глупым, но я в Аксессе ни бум бум, поэтому спрашиваю.

    Вот код главной кнопочной формы некоторой БД, опять же не знаю какая часть кода относится к моему вопросу, поэтому выкладываю полностью.

    ------------------------------------------------------------------------------------------
    ExpandedWrap disabled
      Option Compare Database
       
      Private Sub Form_Open(Cancel As Integer)
      ' Minimize the database window and initialize the form.
       
          ' Move to the switchboard page that is marked as the default.
          Me.Filter = "[ItemNumber] = 0 AND [Argument] = 'По умолчанию' "
          Me.FilterOn = True
          
      End Sub
       
      Private Sub Form_Current()
      ' Update the caption and fill in the list of options.
       
          Me.Caption = Nz(Me![ItemText], "")
          FillOptions
          
      End Sub
       
      Private Sub FillOptions()
      ' Fill in the options for this switchboard page.
       
          ' The number of buttons on the form.
          Const conNumButtons = 8
          
          Dim con As Object
          Dim rs As Object
          Dim stSql As String
          Dim intOption As Integer
          
          ' Set the focus to the first button on the form,
          ' and then hide all of the buttons on the form
          ' but the first.  You can't hide the field with the focus.
          Me![Option1].SetFocus
          For intOption = 2 To conNumButtons
              Me("Option" & intOption).Visible = False
              Me("OptionLabel" & intOption).Visible = False
          Next intOption
          
          ' Open the table of Switchboard Items, and find
          ' the first item for this Switchboard Page.
          Set con = Application.CurrentProject.Connection
          stSql = "SELECT * FROM [Switchboard Items]"
          stSql = stSql & " WHERE [ItemNumber] > 0 AND [SwitchboardID]=" & Me![SwitchboardID]
          stSql = stSql & " ORDER BY [ItemNumber];"
          Set rs = CreateObject("ADODB.Recordset")
          rs.Open stSql, con, 1   ' 1 = adOpenKeyset
          
          ' If there are no options for this Switchboard Page,
          ' display a message.  Otherwise, fill the page with the items.
          If (rs.EOF) Then
              Me![OptionLabel1].Caption = "На странице кнопочной формы нет элементов"
          Else
              While (Not (rs.EOF))
                  Me("Option" & rs![ItemNumber]).Visible = True
                  Me("OptionLabel" & rs![ItemNumber]).Visible = True
                  Me("OptionLabel" & rs![ItemNumber]).Caption = rs![ItemText]
                  rs.MoveNext
              Wend
          End If
       
          ' Close the recordset and the database.
          rs.Close
          Set rs = Nothing
          Set con = Nothing
       
      End Sub
       
      Private Function HandleButtonClick(intBtn As Integer)
      ' This function is called when a button is clicked.
      ' intBtn indicates which button was clicked.
       
          ' Constants for the commands that can be executed.
          Const conCmdGotoSwitchboard = 1
          Const conCmdOpenFormAdd = 2
          Const conCmdOpenFormBrowse = 3
          Const conCmdOpenReport = 4
          Const conCmdCustomizeSwitchboard = 5
          Const conCmdExitApplication = 6
          Const conCmdRunMacro = 7
          Const conCmdRunCode = 8
          Const conCmdOpenPage = 9
       
          ' An error that is special cased.
          Const conErrDoCmdCancelled = 2501
          
          Dim con As Object
          Dim rs As Object
          Dim stSql As String
       
      On Error GoTo HandleButtonClick_Err
       
          ' Find the item in the Switchboard Items table
          ' that corresponds to the button that was clicked.
          Set con = Application.CurrentProject.Connection
          Set rs = CreateObject("ADODB.Recordset")
          stSql = "SELECT * FROM [Switchboard Items] "
          stSql = stSql & "WHERE [SwitchboardID]=" & Me![SwitchboardID] & " AND [ItemNumber]=" & intBtn
          rs.Open stSql, con, 1    ' 1 = adOpenKeyset
          
          ' If no item matches, report the error and exit the function.
          If (rs.EOF) Then
              MsgBox "Ошибка при чтении таблицы Switchboard Items."
              rs.Close
              Set rs = Nothing
              Set con = Nothing
              Exit Function
          End If
          
          Select Case rs![Command]
              
              ' Go to another switchboard.
              Case conCmdGotoSwitchboard
                  Me.Filter = "[ItemNumber] = 0 AND [SwitchboardID]=" & rs![Argument]
                  
              ' Open a form in Add mode.
              Case conCmdOpenFormAdd
                  DoCmd.OpenForm rs![Argument], , , , acAdd
       
              ' Open a form.
              Case conCmdOpenFormBrowse
                  DoCmd.OpenForm rs![Argument]
       
              ' Open a report.
              Case conCmdOpenReport
                  DoCmd.OpenReport rs![Argument], acPreview
       
              ' Customize the Switchboard.
              Case conCmdCustomizeSwitchboard
                  ' Handle the case where the Switchboard Manager
                  ' is not installed (e.g. Minimal Install).
                  On Error Resume Next
                  Application.Run "ACWZMAIN.sbm_Entry"
                  If (Err <> 0) Then MsgBox "Команда недоступна."
                  On Error GoTo 0
                  ' Update the form.
                  Me.Filter = "[ItemNumber] = 0 AND [Argument] = 'По умолчанию' "
                  Me.Caption = Nz(Me![ItemText], "")
                  FillOptions
       
              ' Exit the application.
              Case conCmdExitApplication
                  CloseCurrentDatabase
       
              ' Run a macro.
              Case conCmdRunMacro
                  DoCmd.RunMacro rs![Argument]
       
              ' Run code.
              Case conCmdRunCode
                  Application.Run rs![Argument]
       
              ' Open a Data Access Page
              Case conCmdOpenPage
                  DoCmd.OpenDataAccessPage rs![Argument]
       
              ' Any other command is unrecognized.
              Case Else
                  MsgBox "Неизвестная команда."
          
          End Select
       
          ' Close the recordset and the database.
          rs.Close
          
      HandleButtonClick_Exit:
      On Error Resume Next
          Set rs = Nothing
          Set con = Nothing
          Exit Function
       
      HandleButtonClick_Err:
          ' If the action was cancelled by the user for
          ' some reason, don't display an error message.
          ' Instead, resume on the next line.
          If (Err = conErrDoCmdCancelled) Then
              Resume Next
          Else
              MsgBox "Ошибка при выполнении команды.", vbCritical
              Resume HandleButtonClick_Exit
          End If
          
      End Function
    ------------------------------------------------------------------------------------------

    Теперь суть вопроса: допустим я хочу изменить действие выполняемое при нажатии на одну из кнопок.
    Если к примеру в VB я пишу: Баттон1_клик()
    Действия операторы и тд
    энд саб

    То как это написать тут? Кнопки не имеют имен, и я никак не могу понять как к ним обратиться!
    Ну то есть имена у кнопок конечно есть, при запуске БД. как я понял они берутся из
    странной хитрой таблицы случайно обнаруженной мною, вот как она выглядит:
    user posted image
    Обращение к этой таблице в коде видно, но как все-таки все это работает? Подскажите где искать!

    Заранее спасибо!
    Сообщение отредактировано: Akina -
      Цитата SGY @
      Кнопки не имеют имен

      Неправда. Имеют.
      Цитата SGY @
      я в Аксессе ни бум бум

      Откройте Аксесс. Вызовите справку. Откройте её оглавление. и читайте - начиная с раздела "Начало работы в Microsoft Access для пользователей, не имеющих навыков работы с базами данных".
      А когда будете "бум-бум" - милости просим.

      PS. Ответ на заданный вопрос там, в справке, тоже есть.
        Akina При всем уважении, не надо мне читать мораль типа возьми и разберись сам на форуме где люди только и делаю что спрашивают друг у друга как сделать то или это. Или вы всем и каждому пишете одно и тоже вводное сообщение?

        Я задаю тут вопрос только потому что время на его решение очень ограниченно и мне кажется что человек хорошо знающий Аксесс или ВБА (Например как ВЫ, раз Вы точно знаете ответ и даже где он находится в справке) смог бы достаточно легко ответить на него. Или хотя бы просто дать ссылку на его решение. Это было бы даже намного быстрее чем вы писали то что писали. =)

        А на счет справки, я там смотрел, нашел только как добавить и удалять кнопки, и выбирать для них макрос, а меня интересует именно как обратиться к кнопкам при помощи рукописного кода, я специально написал пример:
        Цитата
        Если к примеру в VB я пишу: Баттон1_клик()
        Действия операторы и тд
        энд саб

        То как это написать тут? Кнопки не имеют имен, и я никак не могу понять как к ним обратиться!
          Открой Аксесс
          Загрузи базу данных
          Открой вкладку Формы
          Выбери нужную форму
          Открой её в режиме конструктора
          Выдели на ней любую кнопку
          Открой окно свойств кнопки
          Выбери вкладку Другие
          Найди строку Имя
          Цитата SGY @
          Или вы всем и каждому пишете одно и тоже вводное сообщение?

          Только тем, кто задаёт ТАКИЕ вопросы.
            Цитата
            Открой окно свойств кнопки
            Выбери вкладку Другие
            Найди строку Имя


            Вот за это спасибо! Теперь я вижу что Вы действительно хотели мне помочь. =) ЩА что-нить покумекаю!
            Сорри если резко вам ответил просто это нервы и нехватка времени!
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0332 ]   [ 15 queries used ]   [ Generated: 17.06.25, 14:41 GMT ]