PDA

Ver la Versión Completa : Consulta doble


NickName
26-11-2003, 20:11:32
Hola.

Tengo una consulta que me regresa los datos que quiero pero doble o 2 veces la misma cosa y no entiendo por que, si alguien me puede decir que estoy haciendo mal.......

select IDENCABEZADONOTA, VENDEDOR, TOTAL, RESTO, CLIENTE, FECHAVENTA
from ENCABEZADONOTA,CLIENTES
Where EncabezadoNota.Resto <> 0 And EncabezadoNota.Cliente = :NombreCliente
And CLientes.Debe = 'SI'


Gracias...


Saludos.

roman
26-11-2003, 20:38:43
Estás tomando datos de dos tablas. Debe haber alguna condición que relacione ambas.

// Saludos

NickName
28-11-2003, 18:38:46
Hola.

Mi tabal EncabezadoFac en su propiedad DataSource es igual a DatasourceClientes......

Donde podria poner o como pondria la condición que dices????

si me pueden ayudar se los agradeceria mucho...

Saludos.:confused:

delphi.com.ar
28-11-2003, 19:32:32
Ejemplo:

SELECT ...
FROM ENCABEZADONOTA, CLIENTES
WHERE ENCABEZADONOTA.CLIENTE = CLIENTES.ID

NickName
28-11-2003, 20:31:43
Hola.

he cambiado el codigo de la consulta como muestro a continuación:


select IDENCABEZADONOTA, VENDEDOR, TOTAL, RESTO, CLIENTE, FECHAVENTA
from ENCABEZADONOTA,CLIENTES
Where EncabezadoNota.Cliente = Clientes.NombreCliente And Clientes.Debe = 'SI' And EncabezadoNota.Resto > 0


Con este codigo me muestra las notas que debe el cliente seleccionado y tambien las que no le pertenecen...

La consulta busca en la tabla de notas las notas que adeuda un cliente que pueden ser una o mas de una y solo las notas que haun no se an terminado de pagar..

saludos..

NickName
28-11-2003, 20:54:54
Hola.

Con este codigo me muestra nadamas las notas que le pertenecen al cliente seleccionado pero las muestra 2 veces, no entiendo que pasa.... No se porque me muestra el mismo registro dos veces.



select IDENCABEZADONOTA, VENDEDOR, TOTAL, RESTO, CLIENTE, FECHAVENTA
from ENCABEZADONOTA,CLIENTES
Where EncabezadoNota.Cliente = :NombreCliente
And CLientes.Debe = 'SI' And EncabezadoNota.Resto > 0



y el codigo que puse en el Post anterior me muestra todas las notas que no se han pagado hasta las que no le pertenecen al cliente seleccionado.

Saludos..

delphi.com.ar
28-11-2003, 21:28:32
Si no relacionas las tablas, el resultado será un registro por cada registro de cada tabla nombrada en el FROM, con lo que obtendrás el producto cartesiano de las cantidades de registros.
Por otro lado, no es recomendable en un esquema entidad-relación relacionar tablas por datos descriptivos, sino que es conveniente tener un campo identificador de registro.

Saludos!

NickName
29-11-2003, 03:20:30
Hola.



Si no relacionas las tablas, el resultado será un registro por cada registro de cada tabla nombrada en el FROM


Las tablas si estan relacionadas y la verdad no logro entender el porque me manda 2 veces el mismo registro....

Saludos.

NickName
29-11-2003, 04:06:09
Hola.

Problema Solucionado:

La verdad nunca me habia susedido esto pero en fin tratare de explicar la solución.

Mi tabla o consulta que tenia el siguiente codigo Sql


select IDENCABEZADONOTA, VENDEDOR, TOTAL, RESTO, CLIENTE, FECHAVENTA
from ENCABEZADONOTA,CLIENTES
Where EncabezadoNota.Cliente = :NombreCliente And EncabezadoNota.Resto > 0 And Clientes.Debe = 'SI'



en su propiedad DataSource le Asignaba el DataSource de la tabla de clientes para comparar asi el cliente seleccionado con la tabla de las notas en:


Where EncabezadoNota.Cliente = :NombreCliente


Despues se comparava lo que faltaba de pagarse con la nota y si el cliente adeuda..... bueno el codigo anterior me mostraba las notas que adeudaba el cliente seleccionado pero 2 veces el mismo registro.... y esto se soluciono asi:


select IDENCABEZADONOTA, VENDEDOR, TOTAL, RESTO, CLIENTE, FECHAVENTA
from ENCABEZADONOTA,CLIENTES
Where EncabezadoNota.Cliente = :NombreCliente And EncabezadoNota.Resto > 0 And Clientes.Debe = 'SI' And


EncabezadoNota.Cliente = Clientes.NombreCliente



Agregando la ultima linea muestra las notas pero como debe de ser, sigo sin entender por que me mostraba 2 veces el mismo registro y la verdad el codigo de la consulta no se ve bien y ciento que no es lo correcto pero funciona.....espero y aya explicado bien la solución......

Gracias por la ayuda recibida...... GRACIAS.

Saludos...

Héctor

delphi.com.ar
01-12-2003, 15:28:20
NickName comentó:
Las tablas si estan relacionadas y la verdad no logro entender el porque me manda 2 veces el mismo registro....
Tienes que relacionarlas en la consulta... No tomes a mal lo que te digo, pero te recomiendo buscar un poco de información sobre SQL, pues esto es un concepto más que básico...

Saludos!

NickName
01-12-2003, 18:38:58
Hola.


delphi.com.ar Comento:

No tomes a mal lo que te digo, pero te recomiendo buscar un poco de información sobre SQL.



No te preocupes, no me molesta ninguna recomendación de ese tipo, al contrario te agradesco que lo hagas por que para mi es una forma de saber que me falta mucho por aprender......


Por otro lado, cuando encontre un libro sobre Sql en la libreria se agotaron solo pude ver como otra persona tomaba el ultimo que quedaba...... si me puedes recomendar algun sitio donde encontrar algo te lo agradeceria mucho.......

Saludos..

Héctor.

NickName
01-12-2003, 18:56:47
Hola.


Comento delphi.com.ar:


Tienes que relacionarlas en la consulta...




segun yo en esta parte de la consulta relaciono las tablas

Where EncabezadoNota.Cliente = Clientes.NombreCliente


La relación la hago es atravez del nombre del cliente que existe en la nota y pues tambien en la tabla de Clientes.

Crees que este bien... o es correcto...????

Saludos...

delphi.com.ar
01-12-2003, 19:47:10
NickName comentó:
La relación la hago es atravez del nombre del cliente que existe en la nota y pues tambien en la tabla de Clientes.

Crees que este bien... o es correcto...????
La respuesta está en esto que te escribí anteriormente:
Delphi.com.ar comentó:
...no es recomendable en un esquema entidad-relación relacionar tablas por datos descriptivos, sino que es conveniente tener un campo identificador de registro.

Saludos!

roman
01-12-2003, 20:10:35
delphi.com.ar meta comentó:
...no es recomendable en un esquema entidad-relación relacionar tablas por datos descriptivos, sino que es conveniente tener un campo identificador de registro.


Traducción (creo): Conviene usar como llaves de tablas campos que no signifiquen nada en la vida real ya que cualquier dato de esta naturaleza es susceptible de cambiar lo que implicaría cambios en todas las tablas que usen dichos campos para relacionarse.

No necesariamente esto significa que una persona va a cambiar de nombre pero si se introduce un nombre de manera equivocada pues ya tienes que arreglar muchos puntos de tu base.

Además de esto, yo añadiría que de preferencia no se usen campos de texto para formar relaciones ya que se hacen muy lentos los sistemas, sobre todo con un campo como el nombre de una persona. Toma en cuenta que cada vez que requieras una relación, el manejador de bases de datos tiene que comparar cadenas de caracteres que pueden girar alrededor de 50 caracteres. Esta es una comparación muy costosa en tiempo.

Lo ideal es proveer una llave "artificial" como un campo autoincremental. Dicho campo sería conocido sólo por el manejador de bases de datos dejando el resto de campos en libertad de ser editados sin preocupaciones.

// Saludos