INDEXAR POR NOMBRE...

86 views
Skip to first unread message

Abraham Montoya

unread,
Mar 2, 2013, 6:07:58 PM3/2/13
to mundovis...@googlegroups.com
Esta pregunta es de un Super novato...osea Yo...Un ejemplo en donde ustedes de buena voluntad me ayudaron me enseño como indexar una tabla por codigo es decir que si el codigo ya existia en el formulario me aparecia que ya existia....(me funciona de maravilla)

Ahora tengo un problemita...jejeje...hice el mismo codigo en otro formulario en mi boton pero resulta que cuando ingreso el mismo nombre...se repite el registro...Se supone que me tendria que aparecer "nombre ya existe"...si ingreso carlos 3 veces tres veces aparece en la tabla en vez de solo una...como puedo hacer este formulario? solo consta de un boton, un textbox y una tabla...me podrian ayudar con el codigo y la configuracion de la tabla...de antemano les pido perdon por la pregunta..GRACIAS

edgar suarez kummers

unread,
Mar 2, 2013, 6:24:37 PM3/2/13
to mundovis...@googlegroups.com
Estimado Abraham:

Tienes a tu disposición las claves al diseñar las tablas.

Si colocas PRINCIPAL en aquellos nombres que no quieres que se repitan, ya cuando trates de dictarle por segunda vez un nombre ya existente, te lo rechazará.

Si otros campos de la tabla tampoco deseas que se repitan entonces colocas CANDIDATO y el efecto es el mismo.

saludos y conste que es de un novato más viejo que tú de quien recibes consejo.

Please look my LINKS --- What I offer ---











edgar suarez kummers
cel Colombia: 3176992038
tel fijo Bogotá: 3126100





El 2 de marzo de 2013 18:07, Abraham Montoya <camon...@gmail.com> escribió:
Esta pregunta es de un Super novato...osea Yo...Un ejemplo en donde ustedes de buena voluntad me ayudaron me enseño como indexar una tabla por codigo es decir que si el codigo ya existia en el formulario me aparecia que ya existia....(me funciona de maravilla)

Ahora tengo un problemita...jejeje...hice el mismo codigo en otro formulario en mi boton pero resulta que cuando ingreso el mismo nombre...se repite el registro...Se supone que me tendria que aparecer "nombre ya existe"...si ingreso carlos 3 veces tres veces aparece en la tabla en vez de solo una...como puedo hacer este formulario? solo consta de un boton, un textbox y una tabla...me podrian ayudar con el codigo y la configuracion de la tabla...de antemano les pido perdon por la pregunta..GRACIAS

--
_______________________________________________________________
Has recibido este mensaje porque estás suscrito al Grupo "Mundo Visual
FoxPro" de Grupos de Google.
 
Para anular la suscripción a este grupo, envía un mensaje a:
mundovisualfox...@googlegroups.com
---
Has recibido este mensaje porque estás suscrito al grupo "Mundo Visual FoxPro" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a mundovisualfox...@googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.
 
 

Abraham Montoya

unread,
Mar 3, 2013, 6:05:01 PM3/3/13
to mundovis...@googlegroups.com

Abraham Montoya

unread,
Mar 3, 2013, 6:05:24 PM3/3/13
to mundovis...@googlegroups.com
Gracias por contestar...sin embargo creo que no me explique bien....resulta que tengo este codigo en mi boton guardar de mi formulario de agregar nombres:
USE marcas 
SET ORDER TO orden1

IF SEEK (thisform.nmodelo.value ) 
MESSAGEBOX("EL NOMBRE YA EXISTE", 0+16, ">>>>>>>ERROR")
RETURN 0
THISFORM.RELEASE
ELSE


THISFORM.COMMAND1.Enabled= .F.

ble1=thisform.nmodelo.value         


 USE "c:\documents and settings\abraham\mis documentos\visual foxpro projects\marcas.dbf"  ALIAS marcas


insert into marcas.dbf (mark) VALUES (ble1)   


wait wind  ">>>>>>>EL NOMBRE HA SIDO GUARDADO<<<<<<< "time 1
THISFORM.RELEASE

ENDIF

Mi problema es que al ingresar por ejemplo CARLOS y hago click en mi boton lo guarda....luego ingreso otravez CARLOS en vez de decir "EL NOMBRE YA EXISTE" me sigue agregando el mismo nombre...quiero que en mi tabla no se repitan los nombres que introduzco....alguien me dijo algo sobre INDEX ON pero no se como aplicar en mi formulario o en la ventana de comandos esta orden...en un ejemplo me funciona con numeros...por que no con nombres..???

Abraham Montoya

unread,
Mar 3, 2013, 6:49:40 PM3/3/13
to mundovis...@googlegroups.com


El sábado, 2 de marzo de 2013 17:07:58 UTC-6, Abraham Montoya escribió:

Abraham Montoya

unread,
Mar 3, 2013, 6:50:08 PM3/3/13
to mundovis...@googlegroups.com
Intente algo como esto:INDEX ON MARK TAG ORDEN1 CANDIDATE la verdad funciono sin embargo me da un error The uniqueness of primary or candidate key is violated. los nombres ya no se repiten...pero preferiria que me mostrara NOMBRE YA EXISTE...JEJEJE alguien me ayuda porfavor..????

Cesar Yamunaque Baca

unread,
Mar 3, 2013, 11:53:36 PM3/3/13
to mundovis...@googlegroups.com
En tu boton Guardar coloca lo siguiente

local lcNombre
lcNombre=RTRIM(ThisForm.nmodelo.value)

IF SEEK(lcNombre,"marcas","orden1")
    MESSAGEBOX("Nombre ya existe",0+16,"ERROR")
    RETURN 0
ENDIF

m.nombre=lcNombre       && m.nombre es tu campo nombre del archivo marcas
INSERT INTO ("marcas") FROM MEMVAR
ThisForm.Release

HernanCano

unread,
Mar 4, 2013, 12:48:14 AM3/4/13
to Mundo Visual FoxPro
Pregunta:
¿ORDEN1 corresponde a un ordenamiento por el campo MARK que
corresponde al NOMBRE de la persona?

Parece que tienes dos archivos de marcas diferentes: el primero que se
abre con "use MARCAS" al principio y el que tiene la ruta completa de
documents&settings........


Te recomiendo:

** se supone que ORDEN1 se generó así:
** use addbs(M.cPath)+"MARCAS.dbf" exclusive
** index on upper(MARK) tag ORDEN1

local M.cPath, M.cNom

M.cPath = ""c:\documents and settings\abraham\mis documentos\visual
foxpro projects\"
use addbs(M.cPath)+"MARCAS.dbf" shared order ORDEN1

M.cNom = upper(alltrim(ThisForm.nModelo.Value))
+space(len(MARCAS.MARK)),len(MARCAS.MARK))

if seek(M.cNom)
=MessageBox("EL NOMBRE YA EXISTE"+chr(13)+, 0+16, ">>>>>>>ERROR")
return 0
endif
ThisForm.Command1.Enabled = .f.
insert into MARCAS (mark) VALUES (M.cNom)
wait wind ">>>>>>>EL NOMBRE HA SIDO GUARDADO<<<<<<<" timeout 5 && 1
ThisForm.Release
Message has been deleted

Abraham Montoya

unread,
Mar 4, 2013, 11:35:58 AM3/4/13
to mundovis...@googlegroups.com
Cyborg....de todo corazon gracias...tu codigo me funciono....solo le cambie una variable y listo......solo una consulta? MEM VAR? me suena como variable de memoria....como funciona esto???? es una manera simplificada???? en otros codigos he visto esto pero ni idea como se hacia...GRACIAS.

Abraham Montoya

unread,
Mar 4, 2013, 11:36:27 AM3/4/13
to mundovis...@googlegroups.com


El sábado, 2 de marzo de 2013 17:07:58 UTC-6, Abraham Montoya escribió:

Cesar Yamunaque Baca

unread,
Mar 4, 2013, 12:06:41 PM3/4/13
to mundovis...@googlegroups.com
Para levantar a memoria usa
SELECT("archivo_a_usar")
SCATTER MEMVAR MEMO

aqui ya tienes todos los campos de tu archivo en memoria para hacer mencion a ellos coloca m.
para el caso de tu archivo marcas
m.nombre

Saludos

Analyzer

unread,
Mar 4, 2013, 12:08:14 PM3/4/13
to mundovis...@googlegroups.com
Abraham,

Para que no se te dupliquen los nombres debes verificar no el nombre sino que un dato de tipo único no exista ya.

Ejemplo:

Id_cliente, nombre_cliente, direccion_cliente

El dato que deberías confrontar en tu busqueda sería algo como el id_cliente ya que ese dato es único.

Pero no el nombre, ya que habrán muchos con el mismo nombre.

Sobre memvar, te recomiendo ver la ayuda en los temas gather, scatter con el parámetro memo.

Ya que empiezas con VFP, te recomiendo ampliamente esta documentación:

Reply all
Reply to author
Forward
0 new messages