Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-11-2003
Avatar de NickName
NickName NickName is offline
Miembro
 
Registrado: may 2003
Ubicación: Guerrero, México
Posts: 96
Poder: 22
NickName Va por buen camino
Question Consulta doble

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.......
Código:
select  IDENCABEZADONOTA, VENDEDOR, TOTAL, RESTO, CLIENTE, FECHAVENTA
from     ENCABEZADONOTA,CLIENTES
Where EncabezadoNota.Resto <> 0 And EncabezadoNota.Cliente = :NombreCliente
             And  CLientes.Debe = 'SI'
Gracias...


Saludos.
Responder Con Cita
  #2  
Antiguo 26-11-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Estás tomando datos de dos tablas. Debe haber alguna condición que relacione ambas.

// Saludos
Responder Con Cita
  #3  
Antiguo 28-11-2003
Avatar de NickName
NickName NickName is offline
Miembro
 
Registrado: may 2003
Ubicación: Guerrero, México
Posts: 96
Poder: 22
NickName Va por buen camino
Question

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.
Responder Con Cita
  #4  
Antiguo 28-11-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Ejemplo:

Código:
SELECT  ...
FROM ENCABEZADONOTA, CLIENTES
WHERE ENCABEZADONOTA.CLIENTE = CLIENTES.ID
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #5  
Antiguo 28-11-2003
Avatar de NickName
NickName NickName is offline
Miembro
 
Registrado: may 2003
Ubicación: Guerrero, México
Posts: 96
Poder: 22
NickName Va por buen camino
Hola.

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

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..
Responder Con Cita
  #6  
Antiguo 28-11-2003
Avatar de NickName
NickName NickName is offline
Miembro
 
Registrado: may 2003
Ubicación: Guerrero, México
Posts: 96
Poder: 22
NickName Va por buen camino
Red face

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.

Código:

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..
Responder Con Cita
  #7  
Antiguo 28-11-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
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!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #8  
Antiguo 29-11-2003
Avatar de NickName
NickName NickName is offline
Miembro
 
Registrado: may 2003
Ubicación: Guerrero, México
Posts: 96
Poder: 22
NickName Va por buen camino
Hola.


Cita:

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.
Responder Con Cita
  #9  
Antiguo 29-11-2003
Avatar de NickName
NickName NickName is offline
Miembro
 
Registrado: may 2003
Ubicación: Guerrero, México
Posts: 96
Poder: 22
NickName Va por buen camino
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
Código:

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:
Código:

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:
Código:

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
Responder Con Cita
  #10  
Antiguo 01-12-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
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!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #11  
Antiguo 01-12-2003
Avatar de NickName
NickName NickName is offline
Miembro
 
Registrado: may 2003
Ubicación: Guerrero, México
Posts: 96
Poder: 22
NickName Va por buen camino
Hola.

Cita:
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.
Responder Con Cita
  #12  
Antiguo 01-12-2003
Avatar de NickName
NickName NickName is offline
Miembro
 
Registrado: may 2003
Ubicación: Guerrero, México
Posts: 96
Poder: 22
NickName Va por buen camino
Hola.

Cita:
Comento delphi.com.ar:


Tienes que relacionarlas en la consulta...

segun yo en esta parte de la consulta relaciono las tablas
Código:
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...
Responder Con Cita
  #13  
Antiguo 01-12-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
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:
Cita:
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!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #14  
Antiguo 01-12-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 09:45:17.


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