Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: TheGhost(Z) en 14 Julio 2007, 18:41 pm



Título: DISTINCT SQL
Publicado por: TheGhost(Z) en 14 Julio 2007, 18:41 pm
''Tengo la tabla CLIENTES con los campos:
''NOMBRE
''APELLIDOS
''CIUDAD


Código:
Dim Rs As New Recordset
Rs.Open "Select DISTINCT (NOMBRE)  From CLIENTES ", DBConex, adOpenStatic, adLockOptimistic
If Rs.RecordCount > 0 Then
    Dim Cadena As String
    For i = 1 To Rs.RecordCount
        Cadena = Cadena & Rs!Ciudad & " " & Rs!Telefono & Chr(13)
        Rs.movenext
    Next i
MsgBox Cadena
End If

Hay 30 Registros.. al cargar a la cadena me dice que no encuentra los campos Rs!Ciudad y Rs!Telefono.

Luego modifique a:
Código:
Cadena = Cadena & Rs!Nombre & Chr(13)
Ahora si me funciona. cargo 15 registros, pero no me sirve obtener solo los nombres, sino que tambien los apellidos y ciudad aunque se repitan..

¿como puedo hacer para que me muestre todos los campos y que no se repitan los valores del campo Nombre.?

Tambien intente com:
Código:
Rs.Open "Select DISTINCT (NOMBRE), Apellidos, Ciudad  From CLIENTES ", DBConex, adOpenStatic, adLockOptimistic

Cargo los 30 registros sin validar nada... es decir con repeticiones en el campo nombres...


Título: Re: DISTINCT SQL
Publicado por: Sancho.Mazorka en 14 Julio 2007, 20:33 pm
Primero de todo, nunca te va a encontrar el campo Telefono si nunca fue creado en la base de datos.

Como no se usar bien SQL en VB6 te escribo el codigo a medio pseudocodigo:

Código
  1. Dim Rs As New Recordset
  2. Dim Cadena As String
  3.  
  4. Rs.Open "Select DISTINCT (NOMBRE), Apellidos, Ciudad  From CLIENTES ", DBConex, adOpenStatic, adLockOptimistic
  5.  
  6. If Rs.RecordCount > 0 Then
  7.  
  8.   For i = 1 To Rs.RecordCount
  9.      if StrComp(Cadena, Rs!Nombre, vbTextCompare) = 1 then goto Existe
  10.      Cadena = Cadena & Rs!Nombre & " " & Rs!Ciudad & " " & Rs!Telefono & Chr(13)
  11.      Existe:
  12.      Rs.movenext
  13.   Next i
  14.  
  15.   MsgBox Cadena
  16.  
  17. End If

Como veras tu estas leyendo desde CLIENTES, los campos NOMBRE, APELLIDOS, CIUDAD, obvio que te va a dar error al intentar leer TELEFONO, sino me equivoco la solucion para leer todos los campos es:

Código
  1. Rs.Open "Select DISTINCT (*)  From CLIENTES ", DBConex, adOpenStatic, adLockOptimistic

Ahi coloque una linea que devuelve 1 si el NOMBRE ya estaba en CADENA y salta a Existe, de esa forma obviamos donde agregamos el nuevo registro:

Código
  1. if StrComp(Cadena, Rs!Nombre, vbTextCompare) = 1 then goto Existe

Es mas conveniente usar
Código
  1. VBCrLf
en vez de
Código
  1. Chr(13)


Título: Re: DISTINCT SQL
Publicado por: TheGhost(Z) en 15 Julio 2007, 06:52 am
Lo de telefono no lo borre..... fue un error al postearlo...
si pongo:

Código:
DISTINCT (*)

ME ARROJA LOS 30 REGISTROS...
PERO SI PONGO:

Código:
DISTINCT  NOMBRES
ME ARROJA 15 REGISTROS, PORQUE LOS OTROS 15 SON DUPLICADOS..
LO MALO ES QUE AL PONER SOLO NOMBRES LA TABLA SELECIONA SOLO EL CAMPO NOMBRES Y LOS CAMPOS APELLIDOS Y CIUDAD NO FIGURAN EN LA TABLA. ES POR ESO QUE AL LEERLO ME DA ERROR DE QUE NO ENCUENTRA LOS CAMPOS APELLIDOS Y CIUDAD.

PARA QUE TAMBIEN MUESTRE LOS CAMPOS APELLIDOS CIUDAD TENRIA QUE PONER ASI..

"
Código:
DISTINCT NOMBRES, APELLIDOS, TELEFONOS FROM CLIENTES"
PERO CON ESTA INSTRUCCION ME ARROJA LOS 30 REGISTROS....


Título: Re: DISTINCT SQL
Publicado por: Sancho.Mazorka en 15 Julio 2007, 06:55 am
Código
  1. Dim Rs As New Recordset
  2. Dim Cadena As String
  3.  
  4. Rs.Open "Select DISTINCT NOMBRES, APELLIDOS, TELEFONOS, CIUDAD FROM CLIENTES", DBConex, adOpenStatic, adLockOptimistic
  5.  
  6. If Rs.RecordCount > 0 Then
  7.  
  8.   For i = 1 To Rs.RecordCount
  9.      if StrComp(Cadena, Rs!Nombre, vbTextCompare) = 1 then goto Existe
  10.      Cadena = Cadena & Rs!Nombre & " " & Rs!Ciudad & " " & Rs!Telefono & Chr(13)
  11.      Existe:
  12.      Rs.movenext
  13.   Next i
  14.  
  15.   MsgBox Cadena
  16.  
  17. End If

Proba con eso, debe de andar, pero antes de probarlo como no se el nombre exacto de tus campos en la DB, revisalos.


Sancho.Mazorka    :¬¬


Título: Re: DISTINCT SQL
Publicado por: TheGhost(Z) en 15 Julio 2007, 08:43 am
Si voy a utilizar este codigo:
Código:
if StrComp(Cadena, Rs!Nombre, vbTextCompare) = 1 then goto Existe

Entonces ya no necesito poner
Código:
Select DISTINCT Nombre From CLientes

Sino direfctamente
Código:
Select * From Clientes


Título: Re: DISTINCT SQL
Publicado por: Sancho.Mazorka en 16 Julio 2007, 02:52 am
No lei un gracias  :xD  jajaj todo bien, no hay problema!


Código
  1. Sancho.Mazorka