Ayuda con VB6

Cerrado
gjsm85 - 7 ago 2009 a las 00:26
 Elinv - 11 ago 2009 a las 01:30
Hola,
Actualmente estoy haciendo un programa sencillo con VB6 que tiene una base de datos de access 2003, bien es un formulario con varios textbox, ahora mi consulta es la siguiente ya el programa esta casi listo pero tengo un campo llamado "Nº Operacion:" en dicho campo necesito introducir numeros pero que no se repetian (no puede ser el AUTONUMERICO de access ya que el numero es tomado de otra fuente), imagino que tengo que meter algun codigo que antes de guardar en la base verifique si el numero fue ingresado anteriormente en la base de datos, trate de asignar dentro de la misma base de datos en el campo donde se almacena dicho valor y el VB me da un error a la hora de ejecucion (cuando meto un valor repetido que se encuentra en la base de datos me da error y se cierra el programa, lo ideal fuera que arroje algun mensaje de advertencia) alguna idea o sugerencia? Por favor si no entienden avisarme para explicarme mejor!

1 respuesta

Hola gjsm85:
--------------------------------------------------------
Mirá esto:

'rstenfermedades es el recordset actual, es decir las selección de datos de la base que has cargado para utilizar.
'Te vas al principio del recordset, es decir al primer registro.
rstenfermedades.MoveFirst

'Utilizas la rutina While para recorrer todos los registros hasta el final.

Do While Not rstenfermedades.EOF

'ultimocodigoingresado inicialmente es de un valor "0".
'Evalúas en cada registro si es mayor al valor del campo donde tienes el numérico (que no es autonumérico y no quieres que sea repetido)


If ultimocodigoingresado > Val(rstenfermedades!id) Then

'Si es mayor lo dejas como está (esta linea esta demas, pero es para un mayor entendimiento de tu parte.

ultimocodigoingresado = ultimocodigoingresado

'caso contrario, es decir si es menor, le asignas a la variable "ultimocodigoingresado " el valor de ese campo y de ese registro

Else
ultimocodigoingresado = Val(rstenfermedades!id)
End If

'asi avanzas hasta el final.

rstenfermedades.MoveNext
Loop

'al final de este recorrido tendrás el valor mas alto ingresado hasta el actual.
'y podras asesorar al operador, sobre cual es el último registro ingresado con el valor mas alto, lo que te permitiría continuar de alli en adelante.


-------------------------------------------------------

'Ahora si lo que quieres es saber si ese número está en la base de datos, mirá este código:

'bueno simple: vamos al principio del recordset

rstenfermedades.MoveFirst

'Con el InputBox pedidomos que ingrese el nuevo valor

codigoenfermedadnueva = Val(InputBox("Ingrese código nueva enfermedad a la base de Datos", "Historial clínico"))

'Evaluamos el valor de la varia "codigoenfermedadnueva ", si es igual a 0, le informamos que no ha ingresado ninguna información, o a presionado cancelar y lo sacamos al operador del proceso, es decir no le dejamos terminar la rutina por insuficiencia de información ---observe --Exit Sub--.

If codigoenfermedadnueva = 0 Then
MsgBox "No ha ingresado el código de enfermedad a registrar !, Ingréselo por favor.", vbCritical, "Historial Clínico"
Exit Sub
End If

'Si ingreso información con "Find" buscamos si está en la base de datos.

rstenfermedades.Find "Id= " & codigoenfermedadnueva, , , 1

'Si encuentra información igual a la ingresada por el operador, se lo informamos, le asesoramos cual es el último registro ingresado como el mas alto, para que tenga una noción de donde esta parado, y lo sacamos del procedimiento, impidiendole que termine y que le mande un error por que faltan datos.

If rstenfermedades.AbsolutePosition > 0 Then
MsgBox "El código de enfermedad a registrar, existe!, cambie por otro.", vbCritical, "Historial Clínico"
rstenfermedades.MoveLast
MsgBox "El código del último registro ingresado, corresponde al número: " & ultimocodigoingresado, vbInformation, "Historial Clínico"
Exit Sub
End If

'caso contrario si el numero no se encuentra, proseguimos con la inserción del nuevo registro en la base de datos.

enfermedadnueva = InputBox("Ingrese nueva enfermedad a la base de Datos", "Historial clínico")
If codigoenfermedadnueva = 0 Then
codigoenfermedadnueva = List2.ListCount + 1
End If

Bueno un abrazo y cualquier cosa no dudes en consultar.



Luis
www.bragadomas.com.ar
www.bragadomas.com
info@bragadomas.com
luis_pedro_mendez@yahoo.com.ar
http://www.foroswebgratis.com/foro-foro_de_programacion_en_general-152776.htm
http://www1.bragadomas.com/?tm=1&kw=music&KW1=Searchable%20MP3%20Database%20Software&KW2=Music%20Streaming%20Dedicated%20Server&KW3=Ringtone%20Database%20Management%20Software&searchbox=0&domainname=0&backfill=0
0
Vale gracias por responder, estare probando y aviso!
0
Hola que tal estuve analizando tu codigo y de verdad me ayudo pero pero genero nuevas dudas, de hecho me funciona en cierta parte pero quisiera consultarte un poco mas o a ver si me aclaras, en esto:

If ultimocodigoingresado > Val(rstenfermedades!id) Then

La parte de "Val(rstenfermedades!id)" entiendo:

VAL(VALUE)
rst(Recordset)
enfermedades(es el nombre de la tabla o el campo? aqui es una duda)
!id(esta parte no la entiendo me esta buscando en mi campo "ID"? seria otra duda)

Bien estamos casi cerca, necesito es que antes de guardar los datos introducidos en el programa revise el campo en la base de datos(access) que te mencione antes en la base de datos recibe el nombre de "NOPER1" y en caso de que se repite este me notifique y me de el ID(numero de registro de la base de datos). Eso seria todo disculpa sime sobrepase explicando pero entre mas claro mejor gracias por tu tiempo de antemano. Saludos!
0
Elinv > gjsm85
11 ago 2009 a las 01:30
hola gjsm85:

Primero, saludos desde la Argentina.

Ahora...cuando vos pones en tu mensaje: "rst(Recordset)" esta bien, pero... el recordset es "rstenfermedades", le puse un nombre largo así, para cuando tenes en una base de datos, varias tablas dentro, poder dejar entonces cargados todos los recordset creados, y tenes una debida referencia por su nombre.

En este caso el recordset "rstenfermedades" se refiere explicitamente a la tabla enfermedades.

Lo explico un poco mejor, "rstenfermedades" no es el nombre de la tabla enfermedades que existe en la base de datos, sino es el nombre del recordset donde se cargarán los resultados de la consulta a la tabla enfermedades.

En cuanto al campo "!id" efectivamente te buscará en dicho campo, que en este caso no es "autonumérico", es solamente numérico, puede ser alfanumérico, etc...

Pero si fuera méramente numérico como en este caso, podrías entonces usar del algoritmo primero que figura en el post anterior, para sacar el número mas alto ingresado hasta el momento de este nuevo registro que se intenta crear.

Cabe aclarar que si el campo "id" es autonumérico toda esta problemática no tiene sentido, dado que en el nuevo registro creado, dicho campo tomará un valor nuevo y único que será el mayor hasta esa instancia.

En cuanto al nombre de la base de datos "NOPER1", se utiliza para abrir la misma.

Para buscar en la tabla es necesario que pongas en el select el nombre de la misma.

Gracias por tu explicación, y es cierto lo que dices, que entre mas claro mejor, y es un verdadero placer poder estar.

Saludos!

Te dejo unas direcciones por si necesitas algo, o quieres enviarme el código para que lo miré mas in situ y te lo devuelvo con algunas ideas. Un abrazo.


Luis
----------------------------
Webs
----------------------------
www.bragadomas.com.ar
www.bragadomas.com
https://bragadohoy.blogspot.com/
----------------------------
Mail
----------------------------
info@bragadomas.com
----------------------------
Foros:
----------------------------
http://www.foroswebgratis.com/foro-foro_de_programacion_en_general-152776.htm
http://www1.bragadomas.com/?tm=1&kw=music&KW1=Searchable%20MP3%20Database%20Software&KW2=Music%20Streaming%20Dedicated%20Server&KW3=Ringtone%20Database%20Management%20Software&searchbox=0&domainname=0&backfill=0
----------------------------
0