Verificar dos campos de una tabla

Hola te agradezco por tu ayuda. Ya que dedicas tiempo a esta lectura, mira tengo una tabla con varios campos,
pero dos de ellos son las llaves, el campo grupo sería llave
regular ya que este se repite, y el campo código también sería llave regular ya que se puede repetir el código en la tabla, pero no del mismo grupo, al crear un registro tengo que asignarle a que grupo pertenece A, B o cualquier otro, supongamos que A, y luego selecciono el código, sería 10, por ejemplo. Pero al hacer otro registro vuelvo a seleccionar el grupo A y tal vez la persona se equivoque y vuelve a digitar el código 10, el código tendrá que buscar en la tabla y verificar que en el grupo A no exista el código 10, en este caso si existe, entonces, tendrá que decir que el grupo A ya tiene el código 10. Pero si creo el grupo B y le asigno el código 10 a ese grupo. El programa no tendría que decir nada, ya que el grupo B no tendría el código 10

Respuesta
1

Crea un indice en tu tabla como principal o candidato

USE mitabla

INDEX ON grupo+código TAG grupocodigo UNIQUE

*** en tu form

lcGrupo=Thisform.txtGrupo

lcCodigo=Thisform.txtCodigo

lcFind=SEEK(lcGrupo+lcCodigo,"mitabla","grupocodigo")

IF lcFind

=MESSAGEBOX("Código ya existe en este grupo",64,"Error"

RETURN

Endif

USE mitabla
INDEX ON grupo+código TAG grupocodigo UNIQUE

donde la escribo?

mira.. para que entendamos bien. no voy a poner el ejemplo con analogía. sino que te voy a contar. exactamente lo que es.

es un sistema de cheques, el cual cual el grupo del que te hablo representa al número de cuenta. dicho número de cuenta. pude tener el cheque número 10, pero cuando seleccionen ese número de cuenta y pongan por error el número de cheque 10, este tendrá que evaluar que ya existe, pero si seleccionan otro número de cuenta y el número de cheque que sigue en ese número de cuenta es el cheque número 10, esto no tendría que ser problema.

muchas gracias...

El INDEX lo puedes hacer desde la ventana de comandos o en diseñador de tablas y utiliza el comando SEEK para hacer tus búsquedas.

en lugar de ponerlo en la ventana de comando puse el código en init del formulario de la siguiente manera


SELECT cheques
INDEX on id_cuenta + id_cheque TAG veri unique


primero al ejecutar el formulario me dice que Tag name is too long.
entonces. le cambie el tag a uno mas corto le puse veri, pero me sañala que

Operator/operand type mismatch.
tengo que contarte que el tipo de dato en cuenta es carácter.

¿como soluciono es parte?


lo otro lo puse en un botón.
para que este capture del formulario los datos que necesito. la cuenta y el numero de cheque
que el usuario digitó


LOCAL cuenta, n_cheque, lcfind
cuenta = thisform.ctnchequera.txtnumero_cuenta.Value
n_cheque = thisform.ctnchequera.txtid_cheque.Value
lcfind = SEEK(cuenta + n_cheque, "cheques","veri")
IF lcfind
=MESSAGEBOX("ya se ingrese ese numero de cheque en la cuenta",0+64,"Cheque ya ingresado")
RETURN
ENDIF


al ignorar el error que tira en el init, y darle click al botón
que contiene el código de búsqueda
me sale también error en el Operator/operand type mismatch.
y me señala lcfind = SEEK(cuenta + n_cheque, "cheques","veri")

Para concatenar 2 campos de diferente tipo usa STR, por ejemplo si la cuenta es carácter y el cheque es numérico:

INDEX ON id_cuenta+STR(id_cheque) TAG cntachq UNIQUE

y el Seek.

lcfind = SEEK(cuenta + STR(n_cheque), "cheques","veri")

Perfecto.. ahora.. si ya sale si existe o no.. muchas... gracias.. pero...!!! mira como yo puse este código en init del formulario

SELECT cheques
INDEX on id_cuenta + STR(id_cheque) TAG veri unique

ahora cuando ejecuto el formulario me sale el siguiente cuadro de dialogo

veri alredy exists, overwrite it?

si presiono que si lo quiero sobrescribir o no .. siempre funciona..!!

pero como hago para que no aparezca. será que ese tramo de código lo tengo que poner en otro lugar.. o debería ser de otra manera

Gracias...

Set Safety Off

Añade tu respuesta

Haz clic para o