Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Comparar dos vectores (https://www.clubdelphi.com/foros/showthread.php?t=59758)

Almd 08-09-2008 08:13:57

Comparar dos vectores
 
Buenas.
¿Como comparo dos vectores? Es decir, si un dato está repetido, evitar que haga un Insert y no repita dicho dato. Si necesitais algo mas específico decidme. Gracias!

tcp_ip_es 08-09-2008 09:40:56

Cuando te refieres a vectores, supongo que quieres decir registro de una BD no?. Si es asi para que no se repitan datos se suele poner un campo clave.
Es decir si tienes estos campos:

IdEmpleado Nombre Apellidos Edad

IdEmpleado sería el campo clave y no podrían existir dos registros con el mismo campo clave IdEmpleado, asi te evitarías/controlarías la duplicidad.

Si lo que quieres, siguiendo el ejemplo, que no tenga el mismo Nombre Apellidos y Edad, lo que tendrías que hacer antes de insertar es realizar una consulta para ver si existe esa conjuncion de datos sino existe lo insertas y si existe das error.

[sql]
q1.parameters[0].asstring:='pepito';
q1.parameters[1].asstring:='palotes';
q1.parameters[2].asinteger:='30';
q1.sql.add(select * from empleados where (nombre=:wNombre) and (Apellidos=:wApellidos) and (Edad=:wEdad))
q1.open;
if q1.isempty then
//insertas registro nuevo
else
showmessage('ya existe registro');

Almd 08-09-2008 12:23:24

Creo que no me expliqué bien, lo siento.
Cuando hablaba de vector me refiero a un TStrings que guarda todos los registros de una tabla. En mi caso tengo dos TStrings en los cuales en cada uno guarda los datos de tablas diferentes. Lo que quiere es, por ejemplo, si tengo estos datos en la tabla A:

pepito
manolito
pipiolito

Quiero que no me los incluya en la tabla B cada vez que le dé a mostrar los datos.

Por lo que he podido ver mas tarde, es que no me graba los registros que ya añadió la anterior vez que di a mostrar datos, por eso los inserta cada vez que le doy a mostrar datos.

tcp_ip_es 08-09-2008 12:37:48

uhmmm te sigo sin entender...
Cita:

Quiero que no me los incluya en la tabla B cada vez que le dé a mostrar los datos.
Cuando dices que que le dás a mostrar datos a que le das??? a un botón? a un menu, a que?? si tienes código es mejor que lo pongas. Cuando tu insertas en una tabla por defecto no te inserta en otra... por eso no te entiendo.

Caro 08-09-2008 13:22:33

Hola almd, yo tampoco te entiendo mezclas conceptos. Para ver si existe un dato en tu lista ya que no es un vector sino una lista de cadenas, puedes utilizar la función IndexOf que te devuelve el indice donde lo ha encontrado sino existe te devuelve -1

Código Delphi [-]
 if sl.IndexOf('pepito')=-1 then
  showmessage('no existe')

Saluditos

Neftali [Germán.Estévez] 08-09-2008 15:14:51

En lugar de IndexOf, yo ordenaría los TStrings y utilizaría Find (si es posible) ya que es infinitamente más rápido (utilizarás búsqueda dicotómica en lugar de secuencial).


La franja horaria es GMT +2. Ahora son las 11:15:04.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi