VB раздувает базу Access что делать

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
vrodo
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 109
Зарегистрирован: 09.10.2003 (Чт) 18:45
Откуда: Дубна МО, Москва

VB раздувает базу Access что делать

Сообщение vrodo » 12.05.2004 (Ср) 11:01

Доброе время суток
топик собсно
работает прога на VB которая работая в трее смотрит за состоянием одной из таблиц
за сутки база увеличивается на 10 мег
что делать
Заранее благодарю за любые ответы
Чтобы понять свои ошибки их достаточно написать (c)
Интернет большой, ему видней
С наилучшими Пожеланиями и Всех Благ :D

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 12.05.2004 (Ср) 11:36

Надо ее сжать. Используй DAO , там есть метод для сжатия базы.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 12.05.2004 (Ср) 11:55

Сжатие есть и в ADO, надо подключить Jet and Replication Objects (JRO).
Lasciate ogni speranza, voi ch'entrate.

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 12.05.2004 (Ср) 13:22

Точно, можно через JRO , спасибо за поправку БОЛЬШОЙ ЧЕЛОВЕК :wink:

vrodo
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 109
Зарегистрирован: 09.10.2003 (Чт) 18:45
Откуда: Дубна МО, Москва

Сообщение vrodo » 12.05.2004 (Ср) 18:27

хмм но ведь люди работают в онлайн режиме как же я ее сжимать буду ?
база от 97 акцеса
Чтобы понять свои ошибки их достаточно написать (c)
Интернет большой, ему видней
С наилучшими Пожеланиями и Всех Благ :D

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 12.05.2004 (Ср) 23:14

Надо выбрать время (например, раз в сутки) для сжатия базы. Я думаю, это не очень болезненно. Или пересмотреть структуру базы, т.е. что в неё заносить.

vrodo
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 109
Зарегистрирован: 09.10.2003 (Чт) 18:45
Откуда: Дубна МО, Москва

Сообщение vrodo » 13.05.2004 (Чт) 8:21

самое интересное что данные через Access заносились нормально
а вот простой запрос с группировкой через VB вызывает раздутие ее
вчера сжимал вручную до 500Кб сжалась а сегодня утром уже 39Мб
причем увеличивается 1 раз в 10сек как раз по времени запроса
что делать?
вот собсно код который осуществляет получение инфо
может че пальцами кривыми не то настучал
с базой в 1 раз работаю через VB :oops:
Код: Выделить всё
Function get_info()
again:
    Dim Col As TrueOLEDBList60.Column
    Dim Cols As TrueOLEDBList60.Columns
   
    Dim C As Integer
   
    On Error GoTo OpenRecSetError
    Set WK = Nothing
    Set DB = Nothing
    Set RS = Nothing
   
    Set WK = DBEngine.Workspaces(0)
    Set DB = WK.OpenDatabase("путь к базе данных")
    Set RS = DB.OpenRecordset("count_query", dbOpenDynaset) ' сохраненный запрос
   
    Sink.RecordSet = RS
   
    Set Cols = TDBList1.Columns
    Set Flds = RS.Fields
   
    While Cols.Count
        Cols.Remove 0
    Wend
    TDBList1.ReBind
   
    ' Configure the list
    For C = 0 To Sink.ColCount - 1
        Set Col = Cols.Add(C)
        Col.Caption = Flds(C).Name
        Col.Visible = True
        Col.HeadingStyle.Font.Bold = True
    Next C
   
    Sink.Attach TDBList1
   
    TDBList1.ReBind
   
    TDBList1.ApproxCount = Sink.RowCount
    If TDBList1.ApproxCount > 0 Then
        Me.Icon = Me.imgIcon(1).Picture
       
    Else
        Me.Icon = Me.imgIcon(0).Picture
    End If
    Exit Function
OpenRecSetError:
DoEvents
    GoTo again
    'MsgBox "Error openning Recordset!"
End Function
Чтобы понять свои ошибки их достаточно написать (c)
Интернет большой, ему видней
С наилучшими Пожеланиями и Всех Благ :D

vrodo
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 109
Зарегистрирован: 09.10.2003 (Чт) 18:45
Откуда: Дубна МО, Москва

Сообщение vrodo » 13.05.2004 (Чт) 8:26

вот собсно модуль класса который описывает переменную Sink
Dim Sink As New RsListCls

Код: Выделить всё
Option Explicit

Private WithEvents TDBL As TrueOLEDBList60.TDBList

Private RS As DAO.RecordSet
Private MaxCol As Integer
Private MaxRow As Long
Private Flds As DAO.Fields

Public Sub Attach(L As TrueOLEDBList60.TDBList)
    Set TDBL = L
End Sub

' Instantiate a working Recordset, MaxRow, MaxCol
Public Property Let RecordSet(RecSet As DAO.RecordSet)
    Set RS = RecSet
    Set Flds = RecSet.Fields
    If Not (RS.EOF And RS.BOF) Then RS.MoveLast
    MaxRow = RS.RecordCount
    MaxCol = Flds.Count
End Property

' Returns number of rows
Public Property Get RowCount() As Long
    RowCount = MaxRow
End Property

' Returns number of columns
Public Property Get ColCount() As Integer
    ColCount = MaxCol
End Property

' Fired when the list requests values OR a bookmark
Private Sub TDBL_UnboundReadDataEx(ByVal RowBuf As TrueOLEDBList60.RowBuffer, StartLocation As Variant, ByVal offset As Long, ApproximatePosition As Long)
    Dim ColIndex As Integer, Col As Integer
    Dim RowsFetched As Integer, Row As Long
    Dim StartRow As Variant
   
    Dim Cols As Long
    Dim Rows As Long
    Cols = RowBuf.ColumnCount - 1
    Rows = RowBuf.RowCount - 1
   
    RowsFetched = 0
   
    On Error GoTo NoRead
    If IsNull(StartLocation) Then
        If offset < 0 Then
            ' StartLocation refers to EOF
            RS.MoveLast
            RS.MoveNext
        Else
            ' StartLocation refers to BOF
            RS.MoveFirst
            RS.MovePrevious
        End If
        RS.Move offset
    Else
        RS.Move offset, StartLocation
    End If
       
    ' StartRow is the bookmark of the first requested row
    StartRow = RS.Bookmark
    Dim Pos As Long
    Pos = RS.AbsolutePosition
   
    For Row = 0 To Rows
        ' If out of bounce quit this loop
        If RS.BOF Or RS.EOF Then Exit For
       
        ' Retrieve values
        For Col = 0 To Cols
            ColIndex = RowBuf.ColumnIndex(Row, Col)
            RowBuf.Value(Row, Col) = Flds(ColIndex).Value
        Next Col
       
        ' Assign a bookmark for currently fetched row
        RowBuf.Bookmark(Row) = RS.Bookmark
       
        RowsFetched = RowsFetched + 1
        RS.MoveNext
    Next Row
   
    RowBuf.RowCount = RowsFetched
   
    ' Callibrate VScroll bar
    If Pos >= 0 Then ApproximatePosition = Pos
   
    Exit Sub
NoRead:
    RowBuf.RowCount = 0
    If Err.Number = 3021 Then
    Resume Next
    Else
        Exit Sub
    End If
End Sub
Чтобы понять свои ошибки их достаточно написать (c)
Интернет большой, ему видней
С наилучшими Пожеланиями и Всех Благ :D


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Yandex-бот и гости: 10

    TopList