alberto-moyano   19-05-2024, 19:49
#1
Hola gente, tengo la siguiente situación y me supera en conocimientos.

En un formulario tengo 109 textbox en diferentes pestañas de un tabpanel, todos están vinculados, quiero decir son los diferentes datos de --en este caso-- referencias bibliográficas, no se usan todos sino que se llenan según el tipo de referencia.

El tema es que al crear una nueva entrada se hace necesario borrar la info contenida en los textbox (repito la info se corresponde con el tipo de entrada bibliográfica), los procesos de guardar, modificar y borrar (el registro) son muy rápidos, pero generar una nueva entrada es una tortura el tiempo que hay que esperar, entiendo que esto se debe a que la función recorre uno a uno los textbox para dejarlo vacio, ¿existe método de acelerar esto?

Coloco una parte del código que limpia los textbox, es de manual

Código:
Public Function LimpiarCamposBIB()

' Limpiamos los campos
  txtID.Text = ""
  txtETIQ.Text = ""
  txtKEYWORDS.Text = ""
  txtCROSSREF.Text = ""
  txtCLAVEbib.Text = ""
  txtTITLE.Text = ""
  txtRELATED.Text = ""
' y sigue la lista

Esta es la función que llamo para hacer una nueva entrada

Código:
Public Sub BtnNuevoBib_Click()

  BtnNuevoBib.Visible = False
  BtnEliminarBib.Visible = False
  BtnRefrescarBib.Visible = False
  btnGuardar.Visible = True
  btnGuardarCambios.visible = False
  btnAgregarCitationKey.Enabled = True
  ToolPanel1.Index = 0

  Dim Idn As Integer

  LimpiarCamposBIB() ' Limpiamos los campos

  txtTMPbiblio.Clear 'limpiamos en textarea temporal
  txtTMPbiblio.SetFocus() 'hacemos foco en el textarea para pegar el texto de la referencia a construir

  ' Obtenemos el último ID y sumamos +1 para el nuevo registro
  Contenido = Conn.Exec("SELECT MAX(id) FROM bibtex LIMIT 1")

  ' Si no hay ninguna entrada entonces arrancamos desde 0
  If Contenido["MAX(id)"] = Null Then
    Idn = 0
  Else
    Idn = CInt(Contenido["MAX(id)"]) + 1
  Endif
  txtID.Text = Idn
  txtCLAVEbib.Text = "@" & Idn & "-" 'colocamos el prefijo de la clave bib
  txtKEYWORDS.Text = "," & BaseName & "," 'colocamos el key con el nombre del archivo
  Mostrar_ListaBIB()

End

Saludos y gracias de antemano

Alberto

Me respondo a mi mismo y para no cambiar el contenido de la pregunta original, hice otras pruebas y puedo confirmar que el problema está en la consulta a la base de datos, si bien el id tiene índice, sospecho que la base está mal diseñada.

Esto me pasa porque el programa se pensó con una idea y fue creciendo (y la base también) y ahora debo parar la pelota y hacer un rediseño completo.

Saludos

PD: como dice Shordi en uno de sus últimos videos «quiere a tu base de datos, mimala si es necesario».
Última modificación: 19-05-2024, 20:29 por alberto-moyano.
vuott   19-05-2024, 20:38
#2
Quizas...

Código:
  Dim ob As Object

  For Each ob In Me.Controls
  
    If Object.Type(ob) = "TextBox" Then ob.Text = Null
  
  Next

« Los horizontes perdidos nunca regresan. » (F. Battiato, 1983)

« Las ondas nunca regresan. » (Genesis: Ripples, 1976)

« Vita non suavis esse potest, nec Mors amara. »  (...vuott)
tincho   19-05-2024, 21:20
#3
Propongo esto también para casos en que solo se quiera "limpiar" a los textbox que estén anidados dentro de un contenedor en particular y no todo el formulario.
Código:
'' Cleaning boxes

Public Sub Cleaning(obj As Object, bMode As Boolean)

  Dim ch As Object
  Dim myClass As Class
  Dim chClass As Class

  myClass = Object.Class(obj)

  If myclass.Symbols.Exist("Children") Then
    For Each ch In obj.Children
      chClass = Object.Class(ch)
      If chclass.Name = "TextBox" Then
        If bMode Then
          ch.Text = ""
        Else
          ch.Text = "Texto"
        Endif

      Else
        Cleaning(ch, bMode)
      Endif
    Next
  Endif

End

1 Saludo.
cogier   20-05-2024, 16:29
#4
Propongo utilizar el comando "Action". Prueba con este código.

Código:
HBox1 As HBox
hTextBox As Textbox
ButtonClear As Button
Spring1 As Spring

Public Sub Form_Show()
  
  BuildForm
  
End

Public Sub ButtonClear_Click()
  
  Action["ClearAll"].Text = ""
  
End

Public Sub BuildForm()
  
  Dim iRow, iCol, iCount As Integer
  
  With Me
    .Arrangement = Arrange.Vertical
    .W = 1000
    .H = 400
    .Padding = 5
    .Center()
  End With
  
  For iRow = 0 To 10
    With HBox1 = New HBox(Me)
      .H = 28
    End With
    
    For iCol = 0 To 9
      With hTextBox = New TextBox(HBox1) As "AllTextBoxes"
        .H = 28
        .Expand = True
        Inc iCount
        .Text = "TextBox " & Str(iCount)
        .Alignment = Align.Center
        .Font.Bold = True
        .Action = "ClearAll"
      End With
    Next
  Next
  
  Spring1 = New Spring(Me)
  With HBox1 = New HBox(Me)
    .H = 28
    .Invert = True
  End With
  
  With ButtonClear = New Button(HBox1) As "ButtonClear"
    .Text = "&Clear all"
    .Picture = Picture["icon:/medium/clear"]
    .H = 28
    .W = 100
  End With
  
End
  
Usuarios navegando en este tema: 4 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.