Ayuda con formulario en un datagrid enlazado en un adodc para realizar una función de búsqueda

Hola de nuevo disculpa mi lata pero es que estoy desarrollando un sistema en mi trabajo y me están presionando para entregarlo lo más pronto posible, ayudame de nuevo por favor, tengo un formulario con un datagrid que se encuentra en enlazado un adodc, resulta que tengo que realizar varias búsquedas en el, tengo varios controles optionbutton el usuario selecciona su búsqueda y en un Texbox escribe lo que va a buscar, pero me da un error es por esto que necesito de tus servicios a continuación parte del código:
Opcion as String
Private Sub OptEscuela_Clic()
If optEscuela.Value = True Then
TxtBuscar.Enabled = True
Opcion= ?Escuela?
TxtBuscar= ??
TxtBuscar=SetFocus
Private Sub TxtBuscar_Change()
Select Case Opcion
Case ?Escuela?
Adodc1.Recordset.FindFirst ?Nom_esc like ?*?& TxtBuscar.Text & ?*??
El error que me presenta es el siguiente: Error 91 Variable de tipo objeto o la variable de bloque with no esta establecida.
Y como le puede hacer cuando el usuario haga clic en la opción clave escolar el Textbox me acepte unicamente 10 caracteres Ejemplo:
Deseo buscar por medio de clave escolar una escuela:
Tecleo 07DPR1134U Esto es lo que deseo que unicamente el usuario pueda teclear por decir algo, y después cuando el usuario seleccione otro optionbutton que es por medio de Municipio o Nombre de la escuela se pueda escribir libremente en el TextBox lo que se desee. No se si se pueda hacer y como hacerlo.
Como puedo realizar una búsqueda como las de excel que te presiona las teclas control+B, aparece el control tecleas tu búsqueda te la localiza si no es el registro tiene un botón que dice Buscar Siguiente, se puede hacer dime como por favor.
Recuerda que no se mucho de este lenguaje si me envías ejemplos especifícame en que evento debo ponerlo ya que no se que realiza cada evento:
Load, Change, Activate Etc.
Gracias de antemano.

3 respuestas

Respuesta
1
Lo de la búsqueda no se porque te esta dando el error ya que como te comentaba antes no se NADA de DataGrids, y tampoco te los recomiendo.
Sobre lo segundo que me preguntas es muy fácil, ni bien presiona el option button, vos pones por ej.
Si quieres que permita 10 caracteres pones lo sig...
Text1.MaxLenght = 10
y si quieres 20 .MaxLenght=20
facil no?
Lo de la búsqueda puedo pasarte un código de ejemplo con el tipo de búsqueda binario, que es mucho mejor que la búsqueda de excel, pero realizame otra pregunta, porque serian varias. ¿Dale?
Saludos y no te olvides de valorizar esta pregunta.
Respuesta
1
En tu Formulario agrega otro control ADODC...
Lo puedes tener oculto
visible =False
Este código lo pones en el botón buscar...
Cuanto tu busques, ese parámetro lo mandas a una variable
'
Dim strSQL As String
Dim strClave As String
'
' Cree una selección por mostrar en la cuadrícula
If Variable = "" Then
strClave = empty
Else
strClave = Variableseleccionada
End If
'
strSQL = "SELECT campo1,campo2,campo3 FROM tabla WHERE Campo0 LIKE'%" & strClave & "%'"
Adodc2.RecordSource = strSQL ' Asigne el nuevo origen de registros
Adodc2.Refresh ' Actualice su información
Set DataGrid1.DataSource = Adodc2
DataGrid1.ReBind ' Actualice la cuadrícula
'
Con esto le dices que el segundo control ADO va a tener un nuevo origen de datos.. que va a ser la sentencia SQL... En esa sentencia, solo tienes que cambiar los nombres de los campos por los que tu tengas...
Para permitir solo 10 caracteres en un Textbox lo haces así:
Private Sub Text1_KeyPress(KeyAscii As Integer)
Dim strLen As Integer
strLen = Len(Text1.Text)
If KeyAscii > 26 Then 'si no es un control enter retroceso, etc
If strLen >= 10 Then
KeyAscii = 0
End If
End If
End Sub
En teoría al hacer este código, podrías hacer algo al oprimir Ctrl + b, pero no me sale... deja checo bien... y te digo...
Private Sub Form_KeyPress(KeyAscii As Integer)
If KeyAscii = vbKeyEscape Then 'Se ha pulsado ESC
'Descargamos el formulario
Unload Me
ElseIf KeyAscii = vbKeyControl + Asc(98) Then 'Se ha pulsado ctrl+ b
'evento...
End If
End Sub
Espero haberme explicado y que te sirva de algo
Un saludo...
PD. Deja busco un manual en donde te explique bien que es cada evento de los controles... bueno, los principales...
Respuesta
1
Para que cuando el tío haga click en el option te ponga el límite de caracteres pon en el evento click del option esto :
Private Sub Option1_Click()
txtDatoABuscar.MaxLength = 10
End Sub
Para buscar un siguiente, bueno... veamos, nunca he utilizado esos controles que usas. Yo cuando he hecho algo similar, ordenaba la búsqueda de lo que se pedía y hacia el recordset.movenext
De todos modos, sigo sin entender como seguís pegándoos con el datagrid y el control data con lo limitados que están. Todo el mundo pregunta sobre ellos.
No los uséis. Son BASURA.
Ah, y lo del control, deberías ver en que linea se produce el error. Supongo que en esta :
Adodc1.Recordset.FindFirst ?Nom_esc like ?*?& TxtBuscar.Text & ?*??
Eso significa que alguno de los objetos que utilizas no los has instanciado bien. Los objetos hay que declararlos primero :
Dim obj as LoQueSea
y luego asignarles memoria :
Set obj = new LoQueSea.
A veces el new lo hacen otros objetos automáticamente. Para saber que objeto es el que no está declarado, situate sobre el y pulsa shift F9 así podrás añadir un Watch, que te permite ver el contenido del objeto. Si el objeto es igual a nothing es que no lo tienes bien instanciado.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas