Оптимизация кода - формы основанные на Template - VB

Узнай цену своей работы

Формулировка задачи:

Вопрос ко всем профи! У меня есть много форм в программе, выпролняющие похожие функции (работа с БД). У всех есть тоже количество коммандных кнопок, объект ADODB.Recordset, и т.д. Количество же полей различно. Мне надоело делать copy-paste для всех форм, контролей и т.д. В С++ можно было бы создать базовый класс от которого все остальные наследовали бы одинаковые свойства и функции. Что можно сделать в VB чтобы получить подобный эффект ? Например для таких свойств и функций:
Спасибо всем, кто откликнится. (надеюсь мой вопрос будет инересен все кто пишет на VB)

Решение задачи: «Оптимизация кода - формы основанные на Template»

textual
Листинг программы
Private mConn As ADODB.Connection
Private mRst As ADODB.Recordset
' -------------------------------------------------------
Private m_FieldsNumber As Integer
Private m_ConnString As String
Private m_SqlString As String
 
Public Property Get FieldsNumber() As Integer
    FieldsNumber = m_FieldsNumber
End Property
 
Public Property Get ConnString() As String
    ConnString = m_ConnString
End Property
 
Public Property Let ConnString(ByVal NewData As String)
    m_ConnString = NewData
End Property
 
Public Property Get SqlString() As String
    SqlString = m_SqlString
End Property
 
Public Property Let SqlString(ByVal NewData As String)
    m_SqlString = NewData
End Property
 
Public Function Connect() As Boolean
    Set mConn = New ADODB.Connection
    On Error GoTo ErrorHandler
    mConn.Open m_ConnString
    Set mRst = New ADODB.Recordset
    With mRst
        .CacheSize = 50
        .CursorLocation = adUseClient
        .CursorType = adOpenStatic
        .LockType = adLockReadOnly
        .ActiveConnection = mConn
        .Open m_SqlString
    End With
    ' Если мы здесь - рекордсет удался!
    If Not CreateFields Then
        Connect = False
        Exit Function
    End If
    
    Connect = True
    Exit Function
    
ErrorHandler:
    Connect = False
End Function
 
Public Function Disconnect() As Boolean
    If mRst.State = adStateOpen Then mRst.Close
    Set mRst = Nothing
    If mConn.State = adStateOpen Then mConn.Close
    Set mConn = Nothing
End Function
 
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    Call Disconnect
End Sub
 
Private Function CreateFields() As Boolean
    ' определяет число полей в рекордсете и создаёт для них пары 'label <-> textbox'
    Dim fd As ADODB.Field
    
    On Error GoTo ErrorHandler
    
    labFieldName(0).Visible = False
    txtFieldValue(0).Visible = False
    
    m_FieldsNumber = 0
    For Each fd In mRst.Fields
        m_FieldsNumber = m_FieldsNumber + 1
        Load labFieldName(m_FieldsNumber)
        With labFieldName(m_FieldsNumber)
            .Caption = fd.Name
            .Visible = True
            .Top = 400 * (m_FieldsNumber - 1) + 100
        End With
        Load txtFieldValue(m_FieldsNumber)
        With txtFieldValue(m_FieldsNumber)
            .Text = fd.Value
            .Visible = True
            .Top = 400 * (m_FieldsNumber - 1) + 100
        End With
    Next fd
    
    Me.Height = m_FieldsNumber * 400 + 600
    Me.Caption = 'Пример ленточной формы'
    
    CreateFields = True
    Exit Function
    
ErrorHandler:
    CreateFields = False
End Function

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.2 из 5
Похожие ответы