Я не могу сохранить данные из ComboBox vb6 - PullRequest
0 голосов
/ 17 января 2020

My UserControl:

enter image description here

Весь код от UserControl:

Option Explicit
Dim cnn As Connection
Dim indice As Integer

Public Property Get AddTypeID() As Integer
   AddTypeID = cmbAddExample(indice).ItemData(cmbAddExample(indice).ListIndex)
End Property

Public Property Let AddTypeID(ByVal Value As Integer)
   cmbAddExample(indice).ItemData(cmbAddExample(indice).ListIndex) = Value
End Property

Public Property Get AddType() As String
   AddType = cmbAddExample(indice).Text
End Property

Public Property Let AddType(ByVal Value As String)
   cmbAddExample(indice).Text = Value
End Property

Public Property Get AddNumber() As String
   AddNumber = Text1(indice).Text
End Property

Public Property Let AddNumber(ByVal Value As String)
   Text1(indice).Text = Value
End Property

Public Sub CargarComboUno(ByVal Data As ADODB.Recordset)
   cmbAddExample(indice).Clear

   Data.Open "SELECT idTipo, tipo FROM tipo_Numero", cnn, adOpenDynamic, adLockOptimistic
   Do While Not Data.EOF
       cmbAddExample(indice).AddItem Data!tipo
       cmbAddExample(indice).ItemData(cmbAddExample(indice).NewIndex) = Data!idTipo
       Data.MoveNext
   Loop
End Sub

Private Sub IniciarConexion()
    Set cnn = New ADODB.Connection
    With cnn
        .CursorLocation = adUseClient
        .Open "PROVIDER=MSDASQL;driver={SQL Server};server=database;uid=database;pwd=database;database=database;"
    End With
End Sub

Private Sub UserControl_Initialize()
    Call IniciarConexion
End Sub

Мой интерфейс (форма) :

enter image description here

Añadir Button или Добавить Button служит для копирования UserControl данных в PictureBox, оставляю описательный GIF:

enter image description here

Код для Añadir Button или Добавить Button:

Private Sub btnAñadir_Click()
   Set rs = New Recordset
   rs.CursorLocation = adUseServer

   indice = indice + 1

   Load uc1(indice)
   Set uc1(indice).Container = Picture1
   uc1(indice).Visible = True
   uc1(indice).Top = IIf(indice = 1, 0, uc1(indice - 1).Top + uc1(indice - 1).Height + 20)

   uc1(indice).CargarComboUno rs

   uc1(indice).AddNumber = uc1(0).AddNumber
   uc1(0).AddNumber = ""

   uc1(indice).AddType = uc1(0).AddType
   uc1(0).AddType = ""

   Picture1.Visible = True

   If indice = 3 Then
   Me.btnAñadir.Enabled = False
   End If
End Sub

Проблема в том, что Я не могу сохранить значения, потому что появляется следующая ошибка: R un-time error'381 ': invalid property array index, когда я нажимаю Guardar Button или Сохранить Button.

enter image description here

В этой строке:

enter image description here

AddTypeID = cmbAddExample(indice).ItemData(cmbAddExample(indice).ListIndex)

Код на Гвардара Button или Сохранить Button:

Private Sub btnGuardar_Click()
Dim i As Integer
Dim id As String
Dim sel As Integer

Call IniciarConexion

Dim CM As ADODB.Command

For i = 0 To indice
    id = uc1(i).AddTypeID
    sel = uc1(i).AddNumber

Set CM = New ADODB.Command
Set CM.ActiveConnection = cnn
    CM.CommandType = adCmdText
    CM.CommandText = "INSERT INTO ejemplodOS(combo,nombre) VALUES (?,?)"
    CM.Parameters.Append CM.CreateParameter("@cmb", adInteger, , , id)
    CM.Parameters.Append CM.CreateParameter("@txt", adInteger, , , sel)
    CM.Execute , , adExecuteNoRecords
Next
End Sub

Итак, какое-либо суждение? Может кто-нибудь помочь мне решить эту проблему?

enter image description here enter image description here

Это с линией AddTypeID = 1

1 Ответ

1 голос
/ 17 января 2020

Вы разрабатываете, кодируете и отлаживаете API для UserControl. Этот API дает вам доступ ко всему, что содержит UserControl, будь то содержимое элемента управления, вычисления или что-то еще. Весь ваш код должен включать обработку ошибок и другие методы защитного кодирования. Сделайте так, чтобы ваш код не работал.

При извлечении идентификатора вам нужно добавить защитный код:

Public Property Get AddTypeID() As Integer
   If cmbAddType.ListIndex >= 0 Then
      AddTypeID = cmbAddType.ItemData(cmbAddType.ListIndex)
   Else
      AddTypeID = -1
   End If
End Property

Теперь код не потерпит неудачу. Но как насчет интерфейсной логики c? Что должно произойти, когда идентификатор равен -1? Опять же, это зависит от вас, как от дизайнера. Но, возможно, что-то вроде этого:

Private Sub btnGuardar_Click()
   Dim i As Integer
   Dim id As Integer
   Dim sel As String
   Dim CM As ADODB.Command

   For i = 0 To indice
      id = uc1(i).AddTypeID
      sel = uc1(i).AddType

      If id > 0 Then
         Set CM = New ADODB.Command
         Set CM.ActiveConnection = cnn
         CM.CommandType = adCmdText
         CM.CommandText = "INSERT INTO ejemplodOS(combo,nombre) VALUES (?,?)"
         CM.Parameters.Append CM.CreateParameter("@cmb", adInteger, , , id)
         CM.Parameters.Append CM.CreateParameter("@txt", adInteger, , , sel)
         CM.Execute , , adExecuteNoRecords
      Else
         MsgBox "Respond as you want for an invalid id"
      End If
   Next
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...