¿Por qué se duplican los registros?

Hola que tal, tengo un problema, tengo dos tablas en donde una la utilizo para consulta de registros y la 2da se relación con la 1ra, en el formulario aplico un seek en el textbox para buscar registro en la tabla "capevento" pueden ser varios registros duplicados pero hay un campo (eir) que no se duplica entonces en un combobox me muestran esta información, este campo (eir) esta relacionado con la tabla "captura" despliego la lista doy un click para que me aparezca los registros de la tabla "captura" en un grid y cada que recorro la lista y doy click me cambia la información en el grid, el problema es que hay registros que aparecen bien pero algunos me aparecen duplicados, porque?

En el método valid del texbox de consulta puse estas instrucciones:

Select capevento
Set Order To contenedor
Go Top
Seek m.contenedor
If Eof()
Messagebox('Contenedor no Existe')
Scatter Memvar Blank
Thisform.btnagregar.Enabled = .T.
Thisform.btncambiar.Enabled = .F.
Thisform.btnborrar.Enabled = .F.
Thisform.btnactualizar.Enabled = .F.
Thisform.btndeshacer.Enabled= .T.
Thisform.btnimprimir.Enabled = .F.
Thisform.btngrabar.Enabled = .F.
Thisform.btneliminar.Enabled = .F.
ELSE
Set Filter To contenedor = m.contenedor
mlinea=linea
Scatter Memvar Memo
Thisform.btnagregar.Enabled = .T.
Thisform.btncambiar.Enabled = .T.
Thisform.btnborrar.Enabled = .T.
Thisform.btnactualizar.Enabled = .T.
Thisform.btndeshacer.Enabled= .T.
Thisform.btnimprimir.Enabled = .T.
Thisform.btngrabar.Enabled = .T.
Thisform.btneliminar.Enabled = .T.
Endif
Thisform.Refresh

en el método valid del combobox puse esta serie de instrucciones:

Local nconsulta
nconsulta = ''
Select código,Descrip,dano,cantidad,horas,costohoras,costomater From captura INNER Join CAPEVENTO On CAPEVENTO.eir = M.eir And captura.eir = M.eir ;
WHERE captura.contenedor = m.contenedor Into Cursor nconsulta
Thisform.grdcaptura.RecordSource = 'nconsulta'
SELECT captura
Scatter Memvar Memo && alimenta textbox de consulta en el recorrido
SELECT capevento
Scatter Memvar Memo && alimenta textbox de consulta en el recorrido
Thisform.Refresh

Haber si es posible me puedas ayudar, de antemano muchas gracias.

Sds

Arturo Real

Veracruz, Ver.

1 respuesta

Respuesta
1

¿Cuándo se te duplican los registros? ¿Son todos a la vez? ¿O algunos cuantos?

hola que tal, en el momento en que selecciono el registro en el combobox que es donde tengo el select en el método valid, eso es lo raro, con el select condiciono la cantidad de registros pero no se en que parte se duplican, si encuentra un registro me enseña dos, si encuentra cuatro me enseña ocho, pero de repente encuentra uno y me enseña uno, osea me tiene loco... espero me haya explicado bien...

Arturo Real

Veracruz, Ver.

Yap! ¿La estructura de las dos tablas capevento y captura es la misma? Veo que quieres mandar la consulta en base a la union de las dos tablas a través de "eir" con la condición de filtro .contenedor = m.contenedor! ¿Cuál es la estructura de las tablas? ¿Oo? Antes yo tuve ese problema... pero sin usar el INNER JOIN. A veces se da por la estructura de las tablas similares y cuyos campos de "union" tienen registros similares en desigualdad de cantidad. Por ejemplo... intentas hacer la union por medio de un campo común entre dos tablas. Imagina que tenes la tabla1 y tabla2 y un campo de union "campo1" en ambas tablas. Pero en la tabla1 tenes 5 registros:

Dato1

Dato2

Dato3

Dato4

Dato5

Y en la tabla2 tenes por cada registro de la tabla1 10 registros similares, es decir, dato1 lo tenes 10 veces, dato2 lo tenes 10 veces... y así, por un total de 50 registros. Entonces cuando haces la union a través del select no te saldrán 5 registros... te saldrán 10 registros duplicados! Ves! Esa podría ser una de las causas! Te lo digo porque a mi me ha pasado e igual que a ti, me saco canas verdes! Je je! Enviame la estructura de las tablas y que campos necesitas presentar en la consulta y te ayudare a armarla bien! :)

ok, si tiene algunos campos repetidos, mira lo que esta en negrita:

Structure for table: C:\VISUALSYSCONT\BASE DE DATOS\CAPEVENTO.DBF
Number of data records: 56654
Date of last update: 28/06/2012
Memo file block size: 64
Code Page: 1252
Field Field Name Type Width Dec Index Collate Nulls Next Step
1 CONTENEDOR Character 11 Desc Machine No && este campo es de consulta y union con la tabla captura (textbox)
2 FECHAEVENT Date 8 Desc Machine No && este campo es de consulta (textbox)
3 EIR Numeric 9 Asc Machine No && este campo es de union con la tabla captura (combobox)
4 LINEA Character 3 Asc Machine No && este campo es de consulta (textbox)
5 EVENTO Character 3 No && este campo es de consulta (textbox)
6 BASE Character 8 No
7 BOOKING Character 8 No
8 BUQUE Character 20 No
9 VIAJE Character 6 No
10 INSPECTOR Character 20 No
11 LINEAMAN Character 3 No
12 USUARIO Character 22 No
13 FOLIO Character 10 No
14 TIPO Character 4 No && este campo es de consulta (textbox)
15 FECHA_MAN Date 8 No && este campo es de consulta(textbox)
16 UNICOM Character 11 No
17 TRASLADO Logical 1 No
18 MANIOBRA Logical 1 No
19 HORA Character 5 No
20 ACT__EVENT Date 8 No
21 AGENTE_ADU Character 20 No
22 STATUS_COM Memo 4 No
23 CALIDAD Character 3 No
24 FECACONDI Date 8 No
25 TRANSPORTE Character 20 No
26 PLACAS Character 7 No
27 OPERADOR Character 20 No
28 COMBUSTIBL Numeric 4 2 No
29 FECHAFACT Date 8 No
** Total ** 264

Structure for table: C:\VISUALSYSCONT\BASE DE DATOS\CAPTURA.DBF

Number of data records: 9741
Date of last update: 28/06/2012
Code Page: 1252
Field Field Name Type Width Dec Index Collate Nulls Next Step
1 CONTENEDOR Character 11 Desc Machine No o && este campo es de consulta y union con la tabla capevento (textbox)

2 FECING Date 8 No && este campo es de captura (textbox)
3 FECOTIZA Date 8 No && este campo es de captura (textbox)
4 FECOTER Date 8 No && este campo es de captura (textbox)
5 STATUS Character 7 No
6 ESTIM Character 7 No && este campo es de captura (textbox)
7 AUTOR2 Character 8 No && este campo es de captura (textbox)
8 LINEA Character 6 Asc Machine No
9 EIR Numeric 9 Asc Machine No o && este campo es de consulta y union con la tabla capevento (combobox)
10 RFC Character 7 No
11 CANTIDAD Numeric 9 2 No && este campo es de captura o consulta(grid)
12 CÓDIGO Character 10 No && este campo es de captura o consulta(grid)
13 DESCRIP Character 47 No && este campo es de captura o consulta(grid)
14 DANO Character 6 No && este campo es de captura o consulta(grid)
15 HORAS Numeric 7 2 No && este campo es de captura o consulta(grid)
16 COSTOHORAS Numeric 13 3 No && este campo es de captura o consulta(grid)
17 COSTOMATER Numeric 12 3 No && este campo es de captura o consulta(grid)
18 CONCEP_DY Numeric 11 3 No && este campo es de consulta(textbox)
19 CONCEP_OT Numeric 11 3 No && este campo es de consulta(textbox)
20 CONCEP_WT Numeric 12 3 No && este campo es de consulta(textbox)
21 SUBTOTAL Numeric 10 3 No && este campo es de consulta(textbox)
22 IVA Numeric 8 3 No && este campo es de consulta(textbox)
23 TOTALUSD Numeric 10 3 No && este campo es de consulta(textbox)
24 TOTALMN Numeric 9 3 No && este campo es de consulta(textbox)
25 EST Character 4 No
26 TCAMBIO Numeric 8 3 No && este campo es de consulta(textbox)
27 BUQUEVIAJE Character 29 No
28 UBICACIÓN Character 10 No && este campo es de consulta(textbox)
29 EVENTO Character 8 No
30 MECÁNICO Character 25 No && este campo es de consulta(textbox)
** Total ** 339

El campo contenedor y el campo eir son con los uno las dos tablas, el combobox (m.eir) es con el visualizo los registros de captura en el grid, si encuentro 5 registros en esta tabla en los texbox me mostrara el 1er registro pero en el grid me mostrara los cinco, y cada que despliego el combobox y la recorro toda la información cambia, espero me halla explicado bien, por cualquier duda estaré pendiente.

De antemano muchas gracias y sds.

Arturo Real

Veracruz, Ver.

Hmmm pues mira... leyendo detenidamente tu caso... si encontrás 5 registros en una tabla y es en el campo de union con la otra tabla... en el grid te va a mostrar los 5 registros... porque la union es precisamente para eso. NO te va a mostrar solo uno. Si tenes 3 registros en la tabla 1 y 5 en la tabla 2... te va a mostrar los registros duplicados por el numero mayor... puesto que estableces una relación entre las tablas por medio de tu campo... y el tanto de una se muestra en el tanto de la otra. Por ejemplo.. yo tengo la tabla factura... y facturadet. Unidas por el campo común numerofactura. Factura me captura el dato de encabezado... solo hay 1 registro por cada factura, no hay duplicados. En facturadet capturo cada producto que se vende por cada factura. Si se genera la factura 400 en la tabla 1... y vendí 5 productos en esa factura... en la tabla 2 detalle me mostrarara 5 registros con el numero de factura 400... y al hacer referencia a una union entre las tablas... me va a mostrar los 5 registros. Ves! :O :O :O

Añade tu respuesta

Haz clic para o