MyTetra Share
Делитесь знаниями!
OpenRecordset.xlsm
Время создания: 16.03.2019 23:43
Текстовые метки: DAO.Recordset, DAO, Recordset
Раздел: Разные закладки - VBA - Access
Запись: xintrea/mytetra_db_adgaver_new/master/base/1516261728odzg25annt/text.html на raw.githubusercontent.com

'Option Compare Database

 

'================================================================================

' ##### Загрузка рекордсета

'   Если  таблица существует - вернет True (Истина = -1)

'   В остальных случаях: False

'--------------------------------------------------------------------

Sub InsertPJI_Tbl()

t = Timer

'Call Wind_Off

 

    Dim oDb As DAO.Database

    Dim rstData As DAO.Recordset

    Dim oTbl As TableDef

    Dim arrTemp()

   

   

    Call Проверка_библиотек_на_MISSING

    Call Подключение_библиотеки

   

    'arrTemp

    strPath = "strPath.mdb"

'    strPath = "strPath.mdb"

    TblDbName = "strTblName"

   

'    Set oDb = OpenDatabase("strPath.mdb") 'CurrentDb '

    Set oDb = FnCreateDataBaseDAO(strPath)

    'Проверка на наличие таблицы в текущей базе данных

    intFields = FnIsTablePresent(oDb, TblDbName)

   

    If intFields > 0 Then

    '    StrSQL = "SELECT " & TblDbName & ".* FROM " & TblDbName & " ORDER BY " & TblDbName & ".DatePJI DESC;"

        Set rstData = oDb.OpenRecordset("select * from " & TblDbName)

       

        If rstData.RecordCount = 0 Then

            rstData.Close

            MsgBox "Таблица " & NameTbl & " пустая!" _

            , 64, "Содержимое таблицы"

        End If

        ' определяем количество записей в рекордсете

        rstData.MoveLast ' перемещение в конец рекордсета

        rstData.MoveFirst ' перемещение в начало рекордсета

        eData = rstData.RecordCount ' количество записей в рекордсете

       

        'если таблица очень большая, то жрет память

        ReDim arrTemp(intFields, eData)

       

        ' первый параметр - число столбцов в массиве (полей в запросе)

        ' второй параметр - число строк в массиве (число записей в запросе)

        ' сброс данных из рекордсета в массив

        arrTemp = rstData.GetRows(eData)

        Set rstData = Nothing

        Erase arrTemp

        Set oDb = Nothing

    End If

t = Timer - t

Debug.Print t

 

End Sub

'================================================================================

 

'#####=====================================================================================================

' Создание(назначение) базы данных

'Sub test_CreateDataBaseDAO()

'    Dim strTblName As String: strTblName = "strTblName"

'    strPathDb = Range("strPathDb").Value

'    Set oDb = FnCreateDataBaseDAO(strPathDb)

'    Таблица = FnIsTablePresent(oDb, strTblName)

'    If Not Таблица Then Создать_таблицу = FnCreateTblInDB(oDb, strTblName)

'End Sub

'

'Sub KillDataBase()

'    On Error Resume Next

'    Kill "strPath.accdb"

'End Sub

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Function FnCreateDataBaseDAO(ByVal strPathDb As String) As DAO.Database

'Dim strPathDb As String

Dim oDb As DAO.Database ' бд, в которой будет создаваться таблица

 

'    strPathDb = Range("strPathDb").Value 'newDB = "strPath.accdb"

 

    If Len(Dir(strPathDb, 16)) = 0 Then 'если база отсутствует

        MsgBox "База данных не обнаружена!" & vbCrLf & "Будет создана новая. " & _

                vbCrLf & "Посмотрите предыдущие версии и восстановите." & _

                vbCrLf & "После восстановления, внесите данные повторно", 48, "Внимание"

        Stop

        Set oDb = DBEngine.Workspaces(0).CreateDatabase(strPathDb, dbLangCyrillic)

'        Set oDb = Nothing

    Else

   

    End If

   

    Set oDb = OpenDatabase(strPathDb)

   

    Set FnCreateDataBaseDAO = oDb

End Function

'=============================================================================================

 

'================================================================================

' ##### Проверка на наличие таблицы в текущей базе данных

'es - 13.06.2013

'Проверка на наличие таблицы в текущей базе данных

'   Если  таблица существует - вернет True (Истина = -1)

'   В остальных случаях: False

'--------------------------------------------------------------------

Public Function FnIsTablePresent(ByVal oDb As DAO.Database, _

                                ByVal strTableName As String) As Long 'As Boolean

Dim i As Integer

On Error Resume Next

'On Error GoTo IsTablePresent_Err

 

' Пытаемся посчитать кол-во полей в заданной таблице

    i = oDb.TableDefs(strTableName).Fields.Count

   

' Если поля есть - значит и таблица существует (что вполне логично)

    If i > 0 Then FnIsTablePresent = i

 

'IsTablePresent_Bye:

'    Exit Function

'

'IsTablePresent_Err:

'    'Болок [Select Case] ниже в принцие не нужен - так ... на всякий случай

'    Select Case Err.Number

'        Case 3265  ' Ошибка обращения к обьекту (т.е. НЕТ таблицы)

'        Case Else

'            'MsgBox "Error " & Err.Number & vbCrLf & Err.Description & vbCrLf & _

'            "in procedure IsTablePresent", vbCritical, "Error!"

'    End Select

'    Resume IsTablePresent_Bye

End Function

'================================================================================

 

'Sub Auto_open()

'    Проверка_библиотек_на_MISSING

'    Подключение_библиотеки

'

'End Sub

Sub Подключение_библиотеки() ' В данном случае Word

On Error Resume Next

'dd = Application.Path & Application.PathSeparator & "MSWORD.OLB"

'ThisWorkbook.VBProject.References.AddFromFile Application.Path & Application.PathSeparator & "MSWORD.OLB"

 

    With ThisWorkbook.VBProject.References

'        .AddFromGuid "{00000300-0000-0010-8000-00AA006D2EA4}", 1, 0  'Microsoft ActiveX Data Objects Recordset 6.0 Library

'        .AddFromGuid "{2A75196C-D9EB-4129-B803-931327F72D5C}", 1, 0  '    Microsoft ActiveX Data Objects 2.8 Library

'        .AddFromGuid "{00000600-0000-0010-8000-00AA006D2EA4}", 1, 0  '    Microsoft ADO Ext. 2.8 for DDL and Security

'        .AddFromGuid "{00000600-0000-0010-8000-00AA006D2EA4}", 1, 0 '    Microsoft ADO Ext. 6.0 for DDL and Security

        .AddFromGuid "{00025E01-0000-0000-C000-000000000046}", 1, 0 '    Microsoft DAO 3.6 Object Library

        .AddFromGuid "{420B2830-E718-11CF-893D-00A0C9054228}", 1, 0 '    Microsoft Scripting Runtime

'        .AddFromGuid "{00062FFF-0000-0000-C000-000000000046}", 1, 0 '    Microsoft Outlook 15.0 Object Library

        .AddFromGuid "{420B2830-E718-11CF-893D-00A0C9054228}", 1, 0 '    Microsoft Scripting Runtime '(для словарей)

    End With

End Sub

 

Sub Проверка_библиотек_на_MISSING()

    Dim iReference As Object, iReferences As Object    'или Variant

    Set iReferences = ThisWorkbook.VBProject.References

    For Each iReference In iReferences

        If (iReference.IsBroken) Then _

           iReferences.Remove Reference:=iReference

'    Debug.Print iReference.Name

'    Debug.Print iReference.FullPath

    Next

End Sub

 

 

 

Sub ref_check()

 

Dim i As Integer

 

With ThisWorkbook.VBProject.References

  For i = 1 To .Count

    Debug.Print .Item(i).GUID, .Item(i).Major, .Item(i).Minor, .Item(i).Description

    a = .Item(i).GUID

    b = .Item(i).Description

    c = .Item(i).Major

    d = .Item(i).Minor

 

'    If .Item(i).GUID = "{420B2830-E718-11CF-893D-00A0C9054228}" Then Exit Sub

 

  Next i

  'Microsoft scripting

'  .AddFromGuid "{420B2830-E718-11CF-893D-00A0C9054228}", 1, 0

End With

 

End Sub

'.AddFromGuid "{00000600-0000-0010-8000-00AA006D2EA4}" '    Microsoft ADO Ext. 6.0 for DDL and Security

'.AddFromGuid "{00025E01-0000-0000-C000-000000000046}" '    Microsoft DAO 3.6 Object Library

'.AddFromGuid "{420B2830-E718-11CF-893D-00A0C9054228}" '    Microsoft Scripting Runtime

'.AddFromGuid "{00062FFF-0000-0000-C000-000000000046}" '    Microsoft Outlook 15.0 Object Library

'.AddFromGuid "{00000600-0000-0010-8000-00AA006D2EA4}" '    Microsoft ADO Ext. 2.8 for DDL and Security

'{2A75196C-D9EB-4129-B803-931327F72D5C}    Microsoft ActiveX Data Objects 2.8 Library

'{00000300-0000-0010-8000-00AA006D2EA4}    Microsoft ActiveX Data Objects Recordset 6.0 Library

 

 

 

 

Прикрепленные файлы:
Так же в этом разделе:
 
MyTetra Share v.0.65
Яндекс индекс цитирования