繁体   English   中英

在 SQL 中保存 VB6 值

[英]Save VB6 values ​in SQL

我有这个界面:

在此处输入图片说明

当按下添加按钮时,将添加具有相同字段的 UserControl:

在此处输入图片说明

那么,问题是:如何保存主值和已添加的值? 也就是说,如果用户按下添加按钮,我该如何保存这些值?

目前,这是整个界面代码:

Option Explicit
Private oldPos As Integer

Dim indice As Integer
Dim indicee As Integer

Dim cnn As Connection
Dim rs As Recordset
Dim sCon As String
Dim sql As Command

Private Sub btnAñadir_Click()
   indice = indice + 1
   indicee = indicee + 0

   Picture1.Visible = True

   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)


   Set lblTipo(indice).Container = uc1(indice)
   lblTipo(indice).Visible = True
   lblTipo(indice).Top = lblTipo(indice - 1).Top

   Load cmbAddTipo(indice)
   Set cmbAddTipo(indice).Container = uc1(indice)
   cmbAddTipo(indice).Visible = True
   cmbAddTipo(indice).Top = cmbAddTipo(indice - 1).Top
   CargarTablaEnCombo "SELECT [tipo] FROM dbo.[tipo_Numero]", Me.cmbAddTipo(indice), "tipo"


   Load lblAddPrefijo(indice)
   Set lblAddPrefijo(indice).Container = uc1(indice)
   lblAddPrefijo(indice).Visible = True
   lblAddPrefijo(indice).Top = lblAddPrefijo(indice - 1).Top

   Load txtAddPrefijo(indice)
   Set txtAddPrefijo(indice).Container = uc1(indice)
   txtAddPrefijo(indice).Visible = True
   txtAddPrefijo(indice).Top = txtAddPrefijo(indice - 1).Top


   Load lblAddNum(indice)
   Set lblAddNum(indice).Container = uc1(indice)
   lblAddNum(indice).Visible = True
   lblAddNum(indice).Top = lblAddNum(indice - 1).Top

   Load txtAddNumero(indice)
   Set txtAddNumero(indice).Container = uc1(indice)
   txtAddNumero(indice).Visible = True
   txtAddNumero(indice).Top = txtAddNumero(indice - 1).Top


   Load chkAddPrincipal(indice)
   Set chkAddPrincipal(indice).Container = uc1(indice)
   chkAddPrincipal(indice).Visible = True
   chkAddPrincipal(indice).Top = chkAddPrincipal(indice - 1).Top


   Load chkAddActual(indice)
   Set chkAddActual(indice).Container = uc1(indice)
   chkAddActual(indice).Visible = True
   chkAddActual(indice).Top = chkAddActual(indice - 1).Top


   Load lblAddVin(indice)
   Set lblAddVin(indice).Container = uc1(indice)
   lblAddVin(indice).Visible = True
   lblAddVin(indice).Top = lblAddVin(indice - 1).Top

   Load cmbAddVinculo(indice)
   Set cmbAddVinculo(indice).Container = uc1(indice)
   cmbAddVinculo(indice).Visible = True
   cmbAddVinculo(indice).Top = cmbAddVinculo(indice - 1).Top
   CargarTablaEnCombo "SELECT [tipoVinculo] FROM dbo.[tipo_Vinculo]", Me.cmbAddVinculo(1), "tipoVinculo"

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

End Sub

Private Sub btnGuardar_Click()
    Dim sql As String
    sql = "INSERT INTO ejemplo(nombre) VALUES("
    sql = sql & "'" & cmbAddTipo.Count & "',"
    sql = sql & "'" & txtAddPrefijo.Text & "',"
    sql = sql & "'" & txtAddNumero.Text & "',"
    sql = sql & "'" & chkAddPrincipal.Value & "',"
    sql = sql & "'" & chkAddActual.Value & "',"
    sql = sql & "'" & cmbAddVinculo.Count & "',"
    sql = sql & "'" & txtTimer.Text & "')"
    cnn.Execute sql
End Sub

Private Sub Form_Load()

   Dim theDate As Date
   theDate = Format(Now(), "short date")
   TextBox1.Text = theDate

   scrollAdd.Min = 0
   scrollAdd.Max = 3000
   scrollAdd.SmallChange = Screen.TwipsPerPixelX * 10
   scrollAdd.LargeChange = scrollAdd.SmallChange

   Call IniciarConexion
   CargarTablaEnCombo "SELECT [tipo] FROM dbo.[tipo_Numero]", Me.cmbAddTipo(0), "tipo"
   CargarTablaEnCombo "SELECT [tipoVinculo] FROM dbo.[tipo_Vinculo]", Me.cmbAddVinculo(0), "tipoVinculo"

End Sub

Sub CargarTablaEnCombo(ByVal sql As String, comboBox As Object, ByVal Campo As String)
    Set rs = New ADODB.Recordset
    rs.Open sql, cnn, adOpenDynamic, adLockOptimistic
    While Not rs.EOF
        If Not IsNull(rs.Fields(Campo)) Then
            comboBox.AddItem rs.Fields(Campo)
        End If
    rs.MoveNext
    Wend
End Sub

Function cerrarRecordset(R As Recordset)
    On Error Resume Next
    If Not R Is Nothing Then
        If R.State = adStateOpen Then
            R.Close
            Set R = Nothing
        Else
            Set R = Nothing
        End If
    End If
    Err.Clear
    On Error GoTo 0
End Function

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

Private Sub Form_Unload(Cancel As Integer)
On Local Error Resume Next
cnn.Close
Set cnn = Nothing
End Sub

Private Sub scrollAdd_Change()
   ScrollControls
End Sub

Private Sub scrollAdd_Scroll()
   ScrollControls
End Sub

Private Sub ScrollControls()
   Dim c As Control

   For Each c In Me.Controls
      If c.Container.Name = "Picture1" And Not TypeOf c Is VScrollBar Then
         c.Top = c.Top + (oldPos - scrollAdd.Value)
      End If
   Next

   oldPos = scrollAdd.Value
End Sub

您的应用程序允许创建任意数量的 UserControl。 在某些时候,您将需要保存所有这些数据。 一种方法是遍历那些 UserControl 并构建一个 Insert 语句。 正如评论中提到的,清理输入和使用参数是明智的。 像这样的东西:

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

   For i = 0 To NumberOfUserControls - 1
      Set CM = New ADODB.Command
      Set CM.ActiveConnection = cnn
      CM.CommandType = adCmdText
      CM.CommandText = "INSERT INTO ejemplo (nombre) VALUES (?)"
      CM.Parameters.Append CM.CreateParameter("@nombre", adInteger, , , uc1(i).Nombre)
      CM.Execute , , adExecuteNoRecords
   Next
End Sub

为简单起见,此代码假定您知道 UserControl 的数量。 它还建立在我在这个答案中提出的想法之上。 您将需要清理数据并根据需要添加其他参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM