Оновлення даних у формі, MS Office, Програмні керівництва, статті






Оновлення даних на формі методом Refresh
У проектах ADP оновлення форми методом Refresh проявляє себе так само, як і Requery

В якості альтернативи можна вибрати один із способів

  • Оновлення однієї, поточного запису
    Me.Recordset.Resync adAffectCurrent, adResyncAllValues
    (Попередньо потрібно коректно вказати властивості «Однозначна таблиця» UniqueTable і «Команда синхронізації» ResyncCommand)
  • Оновлення всього набору з последуещей установкою поточного запису

    On error Resume Next
    Dim bm
    “Запам’ятовуємо положення покажчика форми
    bm = Me.Bookmark
    Me.Requery
    “Чекаємо поки закінчиться завантаження даних в рекордсет
    Do WhileMe.RecordsetClone.State And adStateFetching
    DoEvents
    Loop
    Me.Bookmark = bm

  • варіант більш безглючною
    On error Resume Next
    Dim bm
    “Запам’ятовуємо положення покажчика форми
    bm = Me.Bookmark
    Me.Requery
    “Чекаємо поки закінчиться завантаження даних в рекордсет
    Dim rs
    “Хитро але так треба для безглючною
    set rs = me.recordsetclone.clone

    WaitEndOfRequery RS “Процедура наведена нижче

    Me.Bookmark = bm
    rs.close
    setrs = Nothing

  • Використовувати для користувача функцію


    Оновлення набору записів іншими способами

    (Форми, підпорядкованої форми, елементів управління список і поля зі списком)

    Одне з:

  • Me.Requery
  • Me.Recordset.Requery
  • Me.Recordsource = Me.Recordsource
  • DoCmd.RunCommand acCmdRefresh
  • оновлення значення головного поля для підпорядкованої форми
  • оновлення значення поля – є джерелом вхідного параметра

    після будь-якого оновлення бажано дочекатися завантаження всіх записів:
    Стандартний варіант:
    Do WhileMe.Recordset.State And adStateFetching
    DoEvents
    Loop

    Просунутий варіант, який працює на повільних з’єднаннях: (by Latuk)

    Public Sub WaitEndOfRequery(rs AsADODB.Recordset, Optional SleepTime Asinteger = 33)
    “Дождатся заповнення рекордсета
    “Public Declare Sub Sleep Lib “kernel32″(ByVal dwMilliseconds As Long)
    DimT As Single
    T = Timer
    Do
    DoEvents
    Sleep SleepTime
    Loop Until(rs.State = adStateOpen) OrTimer – T > GetOption(“OLE/DDE Timeout (sec)”)

    End Sub


    Прим. : Не у всіх випадках коректно виконується оновлення підпорядкованої форми без установки на неї фокуса. Тому завжди перед викликом методу оновлення об’єкта – встановіть на нього фокус. Для підлеглих форм, які вкладені одна в одну фокус потрібно встановлювати на всі об’єкти послідовно 1 Головна форма.Setfocus, підпорядкована головній форми.Setfocus, подчіенная подчіненной.Setfocus

  •  

    Схожі статті:


    Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

    Коментарів поки що немає.

    Ваш отзыв

    Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

    *

    *