''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...
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:
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:
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:
if StrComp(Cadena, Rs!Nombre, vbTextCompare) = 1 then goto Existe
Es mas conveniente usar VBCrLf
en vez de Chr(13)
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....
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 :¬¬
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
No lei un gracias :xD jajaj todo bien, no hay problema!
Sancho.Mazorka