Validar algunos campos del DW

Experto tengo el siguiente problema al momento de ingresr un dato al registro la cual tiene el datawindows necesito validar los datos ya existentes. Los datos son enviado por un botón, la cual envía los datos al DW. La idea que me envíe un mensaje si se encuentran la misma linea de datos en el datawindows y cancelar el registro si es haci, bueno si tienes alguna idea como lo puedo hacerlo te lo agradecería.
Respuesta
1
Depende los datos los envías a un dw grid o dw freeform,
pero ya que los datos los envías de un botón lo que puedes hacer es una búsqueda antes de insertarlo, que quiere decir esto, mira te pongo un ejemplo,
tengo una lista de datos (dw grid) con varios campos, entonces yo voy a ingresr un dato más a la lista, pues antes de ingresar ese dato lo busco en la lista.
long w_find
// supongamos q vas a ingresar un codigo al dw y kieres validar q no exista
w_codigo = 'FACTURA01' //
w_find = dw_list.find("codigo='" + w_codigo + "'",1,dw_list.RowCount())
if w_find <> o  Then
Messgebox('Aviso','El codigo ya existe')
Return //esto hace q no haga nada mas porq ya existe
Else // no existe el registro, y lo insertas
dw_list.InsertROw(0)
dw_list.SetItem(1,"Codigo",w_codigo)
End If
Experto sea de tu ayuda, caso contrario me sigues escribiendo para seguir ayudándote
Bueno te explicare más o menos en que cosiste mi desarrollo.
Tengo 3 sle donde se van ingresando datos string la cual finaliza con un botón que me envía los datos de cada sle a sus respectivos campos en DW(Grid) que también ese boto agrega una fila generándome un correlativo al código para no caer en la redundancia.
Bueno en ese mismo momento del evento del botón necesito que me valide un solo campo, la cual me avise que el dato ya es existe en el campo y que no me anule por completo el precesedimiento... Bueno si no quedo algún punto claro por favor no dudes en preguntar para poder aclarártelo... de antemano muchas gracias y espero tu respuesta.
long w_find
w_find = dw_1.Find("campo1='"  + Sle_1.text +"'",1,dw_1.RowCount() )
if w_find >0 then
Messagebox('AViso','EL nombre ya fue ingresado')
Else
//Insertas tu linea, y los campos
End If

4 respuestas más de otros expertos

Respuesta
1
Luego de revisar tu requerimiento, es claro, existen varias formas de validar el registro contra, los registro que existen en tu DW,
Yo lo haría de la siguiente, para evitar lineas de código adicionales, primero
Como voy a ingresar un registro en mi DW, debo barrer los datos de mi DW para validar si existe, en mis registros, antes de traer lo datos adicionales para continuar con la captura del registro
Cuando menciono barrer el DW, me refiero a invocar un procedure, en donde este validara la información que deseo ingresar en mis DW.
Imagino que deseas ver algo de Código,
Enviame tu algoritmo y te preparare un ejemplo con las variables que estas usando..
Respuesta
1
No me explicas si el datawindow tiene los datos cargados cuando haces el envío del nuevo registro. De ser así, solo debes realizar un Find, si no, puedes hacer una de dos cosas: o esperas que se te devuelva el error de base de datos de registro repetido o lo consultas en base de datos cada vez que se haga la inserción.
Atentamente., Franktwen.
aver te explicare más o menos en que cosiste mi desarrollo.
Tengo 3 sle donde se van ingresando datos string la cual finaliza con un botón que me envía los datos de cada sle a sus respectivos campos en DW(Grid) que también ese boto agrega una fila generándome un correlativo al código para no caer en la redundancia.
Bueno en ese mismo momento del evento del botón necesito que me valide un solo campo, la cual me avise que el dato ya es existe en el campo y que no me anule por completo el precesedimiento... Bueno si no quedo algún punto claro por favor no dudes en preguntar para poder aclarártelo... de antemano muchas gracias y espero tu respuesta.
Veo que tienes muchas fallas. No entiendo porqué utilizas tres sle's, cuando puedas hacerlo todo con datawindow y trabajar tu evaluación con el dberror sin perder la información ingresada por el usuario. Dependiendo de tu servicio de base de datos, con solo un if sencillo puedes evaluar la existencia de registros repetidos.
Respuesta
1
Normalmente la validacionn es por uno de los campos, para el caso de que el campo sea id_articulo podrías usar este método
ll_rdf = dw_2.find( "id_articulo = '"+ls_idarticulo+"'", 1, dw_2.RowCount())
if ll_rdf > 0 then
MessageBox("Error","Ya Existe El Articulo "+ls_idarticulo+&
" en el registro "+string(ll_rdf),Information!,OK!,1)
Return
end if
Si deseas que valide campo por campo algo que te solucionaría, aunque no muy practico seria hacerlo campo por campo.
Respuesta
1
Antes de insertar la nueva linea deberás hacer una búsqueda en tu dw y si existe no permitir la inserción. Suponiendo que tu dw sea dw_datos y el campo a buscar sea por el código.
Primero debemos capturar el código del nuevo registro.
ls_codigo = sle_codigo.text
ahora buscamos ese codigo en el dw
ll_fila = dw_datos.Find("codigo = '"+ls_codigo+"'",1,dw_datos.RowCount())
if ll_fila > 0 then
//el dato existe no permitir el ingreso
else
// el dato no existe permitir el ingreso
end if
Hola experto... bueno primero que todo gracias por tu respuesta... pero te cuento que tengo un problema, por alguna razón no me esta validando pasando directamente al ELSE... te dejo el script:
long ll_fila
string ls_codigo
ls_codigo = sle_7.text
ll_fila = dw_2.Find("ri_codigo = '"+ls_codigo+"'",1,dw_2.RowCount())
if ll_fila > 0 then
MessageBox("Error","Ya Existe El Riesgo")
else
MessageBox("Error","ok")
end if
Se encuentra en un botón... evento clicked
bueno cualquier pregunta no dudes dármela a conocer... de antemano muchas gracias.
Nos vemos
Dime el campo ri_codigo de que tipo de dato es, es decir es numérico o string.
Porque el script funciona si es de tipo string caso contrario si es numérico deberás usarlo de esta manera.
Long ll_codigo
ll_codigo = long(sle_7.text)
ll_fila = dw_2.Find("ri_codigo = "+string(ll_codigo),1,dw_2.RowCount())
El resto es igual

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas