FoxPro/Visual FoxPro - busqueda con seek

   
Vista:

busqueda con seek

Publicado por Sebastian (253 intervenciones) el 31/03/2008 22:09:56
Hola Sres. programadores requiero de su ayuda, he creado un indice con mis campos sede+dtoc(fecha de ingreso)+cod_cli, el primero y el segundo son de tipo char, entonces cuando presiono guardar quiero que busque en la tabla si los registros son iguales y que el campo fecha de alta esta vacio NO me permita guardar ,,,,,,,,, actualmente tengo estas lineas pero no funciona espero se me halla entendido gracias por la ayuda

selec tabla1
public cod
set order to seh
cod=alltrim(thisform.sede.value)+dtoc(thisform.fechaingresotext6.value)+alltrim(thisform.codcliente.value)
seek cod
if found()then
if cod=alltrim(sede)+dtoc(fecha de ingreso)+alltrim(cod_cli)
messagebox("El cliente ya existe y NO fue registrado como alta","Mensaje del sistema")
thisform.text1.value=""
thisform.text1.setfocus
endif
endif
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:busqueda con seek

Publicado por enrique (1041 intervenciones) el 31/03/2008 22:24:34
recuerda que la longitud de los datos que ingresas debe ser igual a la de los campos, por ej.
tu haces un alltrim(thisform.sede.value) y si ingresaste "1" y en tu campo tienes " 1" no lo va a encontrar, aqui te recomiendo usar padl().
Otra cosa, para los indices de fecha te aconsejo usar DTOS()
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:busqueda con seek

Publicado por Plinio (7771 intervenciones) el 31/03/2008 22:25:47
El campo indice debe de estar creado asi
ALLTRIM(sede)+dtoc(fecha de ingreso)+ALLTRIM(cod_cli)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:busqueda con seek

Publicado por kong (681 intervenciones) el 01/04/2008 07:12:26
Que tal....
Yo sugiero que en el indice compuesto pongas primero el cod_cli, luego buscas solo por cod_cli. Una vez encontrado verificas que el resto de datos concuerda, y procedes al resto de acciones.

ALLTRIM(cod_cli)+ALLTRIM(sede)+dtoc(fecha de ingreso)

Porque el codigo es mas exacto que el nombre de la sede.

Por ejemplo: un cod_cli puede ser "liga045", entonces pones despues del seek lo que corresponde a algun cod_cli ("liga045"). Utilizando siempre alltrim.

No es necesario incluir toda la cadena de los tres campos juntos. Seek te busca el primer campo indexado.

Me estoy siendo claro?.....Me avisas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:busqueda con seek

Publicado por Luighi (105 intervenciones) el 01/04/2008 03:10:38
el primero y el segundo son del tipo char?
hasta donde yo veo fecha de ingreso es el segundo campo y si lo encierras dentro de la funcion dtoc() entonces no puede ser del tipo char
en fin allí creo que hay un simple error y que bueno, se entiende

sea la tabla tabla1
cuyos campos son:
sede, del tipo carácter y con 10 de longitud
fecha_ing, del tipo fecha
cod_clie, del tipo carácter y con 6 de longitud

creamos el índice:
inde on sede+dtos(fecha_ing)+cod_clie tag seh

luego en el formulario al menos las cosas deberían estar así:
txtSede con longitud máxima de 10
txtFechaIng con valor inicial {}
y txtCodClie con longitud máxima 6
todo éllo se hace interactivamente al diseñar el formulario
pero por si las moscas quizás te esté mareando entonces sólo has lo siguiente:

activa el formulario
nombra los cuadros de texto que necesitamos como:
txtSede, txtFechaIng y txtCodClie

en el evento init del formulario, ingresa al menos:
thisform.txtSede.maxlength=10
thisform.txtFechaIng.value={}
thisform.txtCodClie.maxlength=6

establecido así entonces el código sería como sigue:

fFechaIng=thisform.txtFechaIng.value
if !empt(fFechaIng)
cSede=padr(allt(thisform.txtSede.value),len(thisform.txtSede.value))
cCodClie=padr(allt(thisform.txtCodClie.value),len(thisform.txtCodClie.value))
sele tabla1
set orde to seh && sede+dtos(fecha_ing)+cod_clie
if !seek(cSede+dtos(fFechaIng)+cCodClie)
*guardar el cliente
else
messagebox("El cliente ya existe")
endif
else
messagebox("Ingrese la fecha")
endif

más simple imposible
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar