DISTINCT SQL

Iniciado por TheGhost(Z), 14 Julio 2007, 18:41 PM

0 Miembros y 1 Visitante están viendo este tema.

TheGhost(Z)

''Tengo la tabla CLIENTES con los campos:
''NOMBRE
''APELLIDOS
''CIUDAD


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:
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:
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...

Sancho.Mazorka

#1
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 (vb) [Seleccionar]
Dim Rs As New Recordset
Dim Cadena As String

Rs.Open "Select DISTINCT (NOMBRE), Apellidos, Ciudad  From CLIENTES ", DBConex, adOpenStatic, adLockOptimistic

If Rs.RecordCount > 0 Then

   For i = 1 To Rs.RecordCount
      if StrComp(Cadena, Rs!Nombre, vbTextCompare) = 1 then goto Existe
      Cadena = Cadena & Rs!Nombre & " " & Rs!Ciudad & " " & Rs!Telefono & Chr(13)
      Existe:
      Rs.movenext
   Next i
   
   MsgBox Cadena

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 (vb) [Seleccionar]
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 (vb) [Seleccionar]
if StrComp(Cadena, Rs!Nombre, vbTextCompare) = 1 then goto Existe

Es mas conveniente usar
Código (vb) [Seleccionar]
VBCrLf en vez de
Código (vb) [Seleccionar]
Chr(13)
Ganador Xeon Web Server ! ! !    Sancho.Mazorka :D
http://foro.elhacker.net/index.php/topic,171903.75.html



TheGhost(Z)

Lo de telefono no lo borre..... fue un error al postearlo...
si pongo:

DISTINCT (*)

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

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..

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

Sancho.Mazorka

Código (vb) [Seleccionar]
Dim Rs As New Recordset
Dim Cadena As String

Rs.Open "Select DISTINCT NOMBRES, APELLIDOS, TELEFONOS, CIUDAD FROM CLIENTES", DBConex, adOpenStatic, adLockOptimistic

If Rs.RecordCount > 0 Then

   For i = 1 To Rs.RecordCount
      if StrComp(Cadena, Rs!Nombre, vbTextCompare) = 1 then goto Existe
      Cadena = Cadena & Rs!Nombre & " " & Rs!Ciudad & " " & Rs!Telefono & Chr(13)
      Existe:
      Rs.movenext
   Next i

   MsgBox Cadena

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    :¬¬
Ganador Xeon Web Server ! ! !    Sancho.Mazorka :D
http://foro.elhacker.net/index.php/topic,171903.75.html



TheGhost(Z)

Si voy a utilizar este codigo:
if StrComp(Cadena, Rs!Nombre, vbTextCompare) = 1 then goto Existe

Entonces ya no necesito poner
Select DISTINCT Nombre From CLientes

Sino direfctamente
Select * From Clientes

Sancho.Mazorka

No lei un gracias  :xD  jajaj todo bien, no hay problema!


Código (vb) [Seleccionar]
Sancho.Mazorka   
Ganador Xeon Web Server ! ! !    Sancho.Mazorka :D
http://foro.elhacker.net/index.php/topic,171903.75.html