Comparar datos en una bd

Bien tengo una BD en access2000 en lazada a visual basic6 mediante un adodc1 en la base de datos tengo una tabla llamada principal la cual contiene un campo "vin" y en visual tengo un formulario con un texbox llamado "text1"lo que quiero que haga es que cuando el usuario escriba el dato en el text1 se verifique si el dato ya exist en la tabla principal, osea que verifiq si ya esta capturado est dato

1 respuesta

Respuesta
1
Con el siguiente código se verifica en el campo "Vin" de la tabla "Principal" si ya existe el dato escrito en el Text1, si es así se envía un mensaje al usuario que indica que el registro ya existe en la base de datos. [Todo esto se hace en el evento clic de un botón llamado "Command1"].
Private Sub Command1_Click()
    With Adodc1
        'consultar de una tabla
        .CommandType = adCmdTable
        'indicar la tabla a consultar
        .RecordSource = "Principal"
        'actualizar los datos del la instrucción _
        Que acabamos de enviar [consultar de Tabla : Principal]
        .Refresh
        'moverse al primer registro de la tabla
        .Recordset.MoveFirst
        'recorrer cada uno de los registros
        For i = 0 To .Recordset.RecordCount - 1
            'comparar el valor del registro actual _
            Con el valor escrito en el Text1
            If .Recordset("Vin").Value = Text1.Text Then
                'si son iguales se envía un mensaje
                MsgBox "El registro ya existe"
                'salimos del ciclo [si encontramos una _
                Coincidencia no es necesario continuar _
                Buscando :)]
                Exit For
            End If
            'moverse al siguiente registro
            .Recordset.MoveNext
        Next i
    End With
End Sub
Si hay alguna duda, consúltame para resolverla.
Saludos desde México. Juan Pablo E.P.
HOLa perdon x duplicar la pregunta fue un error no m di cuanta, muchas gracias x tu ayuda, mira el codigo q m das parec q si funciona pero siempre comprueba el mismo dato xjem yo puse en el text1 1234546 esos numeros para hacer la prueba y ahora cada vez q kiero hacer una prueba aparec ese numero en el text1 y siempre compara ese dato podrias decirm a q se deb. gracias
Supongo que estableciste ese dato en la propiedad "Text" del Text1 en tiempo de diseño y obviamente cada vez que ejecutas el formulario [F5] se muestra "123456" en el "Text1", si es así, sólo debes colocar "vacía" la propiedad "Text" del "Text1" en tiempo de diseño y la próxima vez que ejecutes el formulario el "Text1" se mostrará vacío y podrás escribir otro código para buscar.
Si hay alguna duda sobre tiempo de diseño y tiempo de ejecución... o alguna otra, consúltame para resolverla.
Saludos desde México. Juan Pablo E.P.
pues si podrias explicarm esa part xq no la entiendo, pero el textbox no tiene ningun dato guardado, d hecho se supone q debn d aparecer en blanco.
Tiempo de diseño: Se refiere al tiempo en que un programa se está ejecutando, en el caso de VB es cuando presionar F5 y observas el resultado de tus codificaicón.
Tiempo de diseño: Se refiere al tiempo en que estás "dibujando" todo el entorno de trabajo, en el caso de VB es cuando agregas un formulario, colocas controles, modificas sus propiedades, los "acomodas", etc.
Espero que haya quedado entendido :)
Con respecto a tu situación, me gustaría ver el código que utilizas, porque si no tienes ningún valor dado al Text1 en tiempo de diseño, tal vez el problema esté en la codificación.
Saludos desde México. Juan Pablo E.P.
Hola buen día gracias por tu dedicación hacia mi problema, t mando mi código ojala m pudieras ayudar
Private Sub Command2_Click() 'limpia pantalla para un nuevo dato
Text1.Text = ""
Text2.Text = ""
Text3.Text = ""
Text4.Text = ""
Text2.Visible = False
Text3.Visible = False
Text4.Visible = False
Label4.Visible = False
Label5.Visible = False
Label3.Visible = False
End Sub
Private Sub Command3_Click() 'regresa al menu principal
Form13.Show
Form10.Hide
End Sub
Private Sub Command4_Click() 'sale del programa
End
End Sub
Private Sub Form_Load()
Text6.Text = Date 'fecha actual
Text5.Text = Format(Date, sDateFormat) 'fecha
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer) 'text q voy a verificar si el dato se encuentra en la bd
If KeyAscii = 13 Then 'al presionar enter
SendKeys "{Tab}", True
With Adodc1
'consultar de una tabla
.CommandType = adCmdTable
'indicar la tabla a consultar
.RecordSource = "Principal"
'actualizar los datos de la instrucción _
que acabamos de enviar [consultar de Tabla : Principal]
.Refresh
'moverse al primer registro de la tabla
.Recordset.MoveFirst
'recorrer cada uno de los registros
For i = 0 To .Recordset.RecordCount - 1
'comparar el valor del registro actual _
con el valor escrito en el Text1
If .Recordset("VIN").Value = Text1.Text Then
'si son iguales se envía un mensaje
MsgBox "El registro ya existe"
'salimos del ciclo [si encontramos una _
coincidencia no es necesario continuar _
buscando :)]
Exit For
End If
'moverse al siguiente registro
.Recordset.MoveNext
Next i
End With
'separe los primeros 5 caracteres del dato
If Len(Trim(Text1.Text)) = 17 Then 'tomar los primeros 5 para clave
Text2.Visible = True
Text2.Text = Mid(Text1.Text, 1, 5) 'deposita los primeros 5 caracteres
Else
MsgBox "DEBEN DE SER 17 DIGITOS SOLAMENTE"
End If
Label3.Visible = True
Label4.Visible = True
Label5.Visible = True
Label3.Caption = "CLAVE"
Label4.Caption = "MARCA"
Label5.Caption = "MODELO"
Text2.Visible = True
Text3.Visible = True
Text4.Visible = True
'compare los 5 caracteres dl dato 1
If Text2.Text = "3VWCB" Then
Text3.Text = "VOLKSWAGEN"
Text4.Text = "NEW BEETLE"
Else
If Text2.Text = "3BNBB" Then
Text3.Text = "RENAULT"
Text4.Text = "CLIO NACIONA"
Else
If Text2.Text = "3VWME" Then
Text3.Text = "VOLKSWAGEN"
Text4.Text = "JETTA VARIANT"
Else
If Text2.Text = "3VWRE" Then
Text3.Text = "VOLKSWAGEN"
Text4.Text = "JETTA A5"
Else
If Text2.Text = "3VWSH" Then
Text3.Text = "VOLKSWAGEN"
Text4.Text = "JETTA GP"
Else
If Text2.Text = "3VWTG" Then
Text3.Text = "VOLKSWAGEN"
Text4.Text = "JETTA VARIANT"
Else
If Text2.Text = "3VWYW" Then
Text3.Text = "VOLKSWAGEN"
Text4.Text = "NEW BEETLE"
Else
If Text2.Text = "8A1FC" Then
Text3.Text = "RENAULT"
Text4.Text = "KANGOO"
Else
If Text2.Text = "8A1FC" Then
Text3.Text = "RENAULT"
Text4.Text = "KANGOO"
Else
If Text2.Text = "93YL6" Then
Text3.Text = "NISSAN"
Text4.Text = "APRIO"
Else
If Text2.Text = "9BWCC" Then
Text3.Text = "VOLKSWAGEN"
Text4.Text = "POINTER"
Else
If Text2.Text = "9BWKB" Then
Text3.Text = "VOLKSWAGEN"
Text4.Text = "LUPO"
Else
If Text2.Text = "9BWLB" Then
Text3.Text = "VOLKSWAGEN"
Text4.Text = "CROSSFOX"
Else
If Text2.Text = "JN1AE" Then
Text3.Text = "NISSAN"
Text4.Text = "URVAN"
Else
If Text2.Text = "JN8AT" Then
Text3.Text = "NISSAN"
Text4.Text = "XTRAIL"
Else
If Text2.Text = "VF1BG" Then
Text3.Text = "RENAULT"
Text4.Text = "LAGUNA"
Else
If Text2.Text = "VF1BM" Then
Text3.Text = "RENAULT"
Text4.Text = "MEGANE HB 5P"
Else
If Text2.Text = "VF1CB" Then
Text3.Text = "RENAULT"
Text4.Text = "CLIO TEAM"
Else
If Text2.Text = "VF1CM" Then
Text3.Text = "RENAULT"
Text4.Text = "HB 3P"
Else
If Text2.Text = "VF1CM" Then
Text3.Text = "RENAULT"
Text4.Text = "MEGANE HB 3P"
Else
If Text2.Text = "VF1EM" Then
Text3.Text = "RENAULT"
Text4.Text = "MEGANE CC"
Else
If Text2.Text = "VF1FL" Then
Text3.Text = "RENAULT"
Text4.Text = "TRAFFIC"
Else
If Text2.Text = "VF1JL" Then
Text3.Text = "RENAULT"
Text4.Text = "TRAFFIC 0VF1FL"
Else
If Text2.Text = "VF1JM" Then
Text3.Text = "RENAULT"
Text4.Text = "SCENIC II"
Else
If Text2.Text = "VF1ML" Then
Text3.Text = "RENAULT"
Text4.Text = "MEGANE SEDAN"
Else
If Text2.Text = "VSSBB" Then
Text3.Text = "SEAT"
Text4.Text = "LEON"
Else
If Text2.Text = "VSSCE" Then
Text3.Text = "SEAT"
Text4.Text = "LEON"
Else
If Text2.Text = "VSSEM" Then
Text3.Text = "SEAT"
Text4.Text = "IBIZA"
Else
If Text2.Text = "VSSMY" Then
Text3.Text = "SEAT"
Text4.Text = "IBIZA"
Else
If Text2.Text = "VSSPK" Then
Text3.Text = "SEAT"
Text4.Text = "IBIZA"
Else
If Text2.Text = "VSSRK" Then
Text3.Text = "SEAT"
Text4.Text = "CORDOBA"
Else
If Text2.Text = "VSSSK" Then
Text3.Text = "SEAT"
Text4.Text = "IBIZA"
Else
If Text2.Text = "VWASH" Then
Text3.Text = "NISSAN"
Text4.Text = "CABSTAR"
Else
If Text2.Text = "WV1ED" Then
Text3.Text = "VOLKSWAGEN"
Text4.Text = "EUROVAN"
Else
If Text2.Text = "WV1ED" Then
Text3.Text = "VOLKSWAGEN"
Text4.Text = "CRAFTER"
Else
If Text2.Text = "WV1JG" Then
Text3.Text = "VOLKSWAGEN"
Text4.Text = "CRAFTER"
Else
If Text2.Text = "WVWRU" Then
Text3.Text = "VOLKSWAGEN"
Text4.Text = "JETTA"
Else
If Text2.Text = "WVWSU" Then
Text3.Text = "VOLKSWAGEN"
Text4.Text = "JETTA"
Else
If Text2.Text = "WVWZZ" Then
Text3.Text = "VOLKSWAGEN"
Text4.Text = "JETTA"
Else
If Text2.Text = "XW8ZZ" Then
Text3.Text = "VOLKSWAGEN"
Text4.Text = "BEETLE"
Else
MsgBox "Error de Vin, favor de verificarlo"
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End Sub
Te lo agradeceré infinitament, gracias.
Wow! Creo que no le caería nada mal una "indentada" a tu código, y también podrías usar la sentencia SELECT en vez de IF, pero bueno, ese es otro tema; con respecto a la situación que nos interesa veo que estás realizando la búsqueda del valor en el evento KeyPress del Text1 [Private Sub Text1_KeyPress(KeyAscii As Integer)] y eso provoca que se realice la comparación cada vez que el usuario presiona una tecla [nada recomendado, ya que serían muchas consultas provocando ralentización del sistema, aunque... tampoco ese es el problema] te recomiendo que uses un botón para hacer la consulta [escribir en el Text1 el valor a buscar y entpnces presionar el botón que realizará la búsqueda].
Pero aún así, debería funcionar correctamente [casi, por lo que te comenté del evento KeyPress], primero realiza mi recomendación y si "persisten las molestias" envíame el proyecto VB y la BD a [email protected] para verificar el problema a fondo y darte una solución.
Saludos desde México. Juan Pablo E.P.
Hola que tal ya hic lo que tu m digist pero no funciono la verdad ya noc ni que hacer, t mand mi proyecto a tu correo ojala pudieras ayudarme muchas gracias.
Acabo de ver tu sistema y parece que está un poquito desordenado, pero no te preocupes, la práctica hace al maestro, poco a poco irás puliendo tu estilo hasta lograr algo mejor.
Con respecto al conflicto que aún tienes, lo que yo hice para que funcionara la búsqueda del VIN repetido es lo siguiente:
1.- Quité el enlace que tenía Text1 con el ADODC1. [Supongo que lo necesitas pero sabrás solucionarlo :)]
2.- Quité la conexión en tiempo de diseño del ADODC1 y la establecí en tiempo de ejecución utilizando App.Path [Devuelve o establece la
<object id="alink_4" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11" type="application/x-oleobject">
<param name="Width" value="0" />
<param name="Height" value="0" />
<param name="Command" value="ALink" />
<param name="Item1" />
<param name="Item2" value="defpath" />
</object>
Ruta de acceso actual (es decir, obtiene la ubicación donde está guardado el proyecto, evitando tener que cambiarla cada vez que cambias de PC). No está disponible
en
<object id="alink_5" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11" type="application/x-oleobject">
<param name="Width" value="0" />
<param name="Height" value="0" />
<param name="Command" value="ALink" />
<param name="Item1" />
<param name="Item2" value="defdesigntime" />
</object>
tiempo de diseño y es de sólo lectura en
<object id="alink_6" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11" type="application/x-oleobject">
<param name="Width" value="0" />
<param name="Height" value="0" />
<param name="Command" value="ALink" />
<param name="Item1" />
<param name="Item2" value="defruntime" />
</object>
tiempo de ejecución].
El código quedó así:
Private Sub Command5_Click()
    With Adodc1
        'establecer la conexion a la BD
        .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\DATABASE\Base_ver.mdb"
        'consultar de una tabla
        .CommandType = adCmdTable
        'indicar la tabla a consultar
        .RecordSource = "Principal"
        'actualizar los datos del la instrucción _
        Que acabamos de enviar [consultar de Tabla : Principal]
        .Refresh
        'moverse al primer registro de la tabla
        .Recordset.MoveFirst
        'recorrer cada uno de los registros
        For i = 0 To .Recordset.RecordCount - 1
            'comparar el valor del registro actual _
            Con el valor escrito en el Text1
            If .Recordset("VIN").Value = Text1.Text Then
                'si son iguales se envía un mensaje
                MsgBox "El registro ya existe"
                'salimos del ciclo [si encontramos una _
                Coincidencia no es necesario continuar _
                Buscando :)]
                Exit For
            End If
            'moverse al siguiente registro
            .Recordset.MoveNext
        Next i
    End With
End Sub
Si tienes alguna otra duda consúltame y la solucionaremos.
NOTA: El control ADODC es muy útil para conexiones rápidas y proyectos simples, pero cuando necesitas algo más que eso yo te recomiendo realizar la conexión por medio de una variable de tipo ADODB. Connection y utilizar sentencias SQL para manipular tu BD, te enviaré algún ejemplo sencillo de la utilización de estos elementos a la dirección de correo con la que me enviaste tu sistema.
Saludos desde México. Juan Pablo E.P.
hOLA Gracias x tu atencion conmigo, esta vez si funciono el codigo ahora solo tengo 3 problemitas mas bueno para ti xq para mi son problemotas mira uno es como hago para q m guard un registro en la bd en un tabla y en otra borre ese registro, otro problema es como le hago para q cadavez q el usuario introduzca un dato se muestre en el datagrid y despues poder imprimir ese datagrid(xfavor al facil d entender) y el ultimo es tengo un textbox con estos datos "12345" como lehago para q guard solo un numero por cada registro gracias por tu ayuda
Problemita 1. Pues bien, supongo que ya sabes almacenar un registro, lo único que te falta es que ese mismo registro se elimine de otra tabla, si es así, lo único que debes hacer es "buscar" ese registro en esa otra tabla... ¿cómo? Simplemente con un ciclo similar al que usamos para comparar si el VIN ya existía.
With Adodc1
        'establecer la conexion a la BD
        .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\DATABASE\Base_ver.mdb"
        'consultar de una tabla
        .CommandType = adCmdTable
        'indicar la tabla a consultar
        .RecordSource = "Otra_tabla"
        'actualizar los datos del la instrucción _
        Que acabamos de enviar [consultar de Tabla : Otra_tabla]
        .Refresh
        'moverse al primer registro de la tabla
        .Recordset.MoveFirst
        'recorrer cada uno de los registros
        For i = 0 To .Recordset.RecordCount - 1
            'comparar el valor del registro actual _
            Con el valor escrito en el Text1
            If .Recordset("Un_campo").Value = Text1.Text Then
                'si son iguales eliminar el registro
                Adodc1.Delete
                'salimos del ciclo [si encontramos una _
                Coincidencia no es necesario continuar _
                Buscando :)]
                Exit For
            End If
            'moverse al siguiente registro
            .Recordset.MoveNext
        Next i
    End With
Problemita 2 (a). Tengo entendido que cada vez que realizas un cambio en la BD éste se refleja en el Datagrid, en caso de que no sea así, puedes intentar "actualizar" los datos del Datagrid [por ejemplo: Set DataGrid1. DataSource = Adodc1]
Problemita 2 (b). El siguiente enlace muestra el código necesario para poder imprimir un Datagrid, hay 2 opciones, elije la que más te sea útil.
http://www.recursosvisualbasic.com.ar/htm/trucos-codigofuente-visual-basic/360-imprimir-datagrid.htm
Problemita 3. No comprendo tu última petición, ¿lo qué alcanzo a entender es que si tienes el valor "12345" en un TextBox deseas que se guarden 5 registros en vez de uno? Es decir, en vez de guardar un solo registro con el valor "12345" quieres que se guarde un registro con "1", un registro con "2", un registro con "3", ¿un registro con "4" y un registro con "5"?
Saludos desde México. Juan Pablo E.P.
Hola que tal, mira tus respuesta m han sido de mucha utilidad gracias, por tu esfuerzo y dedicación, en cuanto al problema 3 exactamente deseo saber como guardo los registros en la forma que tu lo entiendes esa es la forma correcta, bueno gracias y espero que una vez más m puedas ayudar.
El siguiente código guarda un registro por cada uno de los números de un TextBox [es decir, los separa y los almacena individualmente].
Private Sub Command1_Click()
    Dim i As Integer
    'recorrer el contenido del TextBox
    For i = 0 To Len(Text1.Text) - 1
        'posicionar el cursor
        Text1.SelStart = i
        'seleccionar un solo caracter
        Text1.SelLength = 1
        'insertar en la BD
        '[suponiendo que usas SQL, la cadena de texo sería así:]
        sql = "INSERT INTO Tabla VALUES (" & Text1.SelText & ")"
        'SelText: devuelve o establece una cadena con el texto _
        Seleccionado actualmente o es una cadena de longitud cero ("") _
        Si no hay caracteres seleccionados.
        'creo que tendrás que adaptarlo a tu ADODC _
        [creO que es el método AddNew] o si gustas _
        Lo puedo investigar [yo no uso ese control]
    Next i
End Sub
Si hay más dudas, puedes consultarme, así empezamos todos. :)
Saludos desde México. Juan Pablo E.P.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas