Autor
|
Tema: DISTINCT SQL (Leído 2,331 veces)
|
TheGhost(Z)
Desconectado
Mensajes: 230
|
''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...
|
|
|
En línea
|
|
|
|
Sancho.Mazorka
Desconectado
Mensajes: 480
Gamer & Programador
|
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)
|
|
« Última modificación: 14 Julio 2007, 20:41 pm por Sancho.Mazorka »
|
En línea
|
|
|
|
TheGhost(Z)
Desconectado
Mensajes: 230
|
Lo de telefono no lo borre..... fue un error al postearlo... si pongo: ME ARROJA LOS 30 REGISTROS... PERO SI PONGO: 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....
|
|
|
En línea
|
|
|
|
Sancho.Mazorka
Desconectado
Mensajes: 480
Gamer & Programador
|
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.
|
|
|
En línea
|
|
|
|
TheGhost(Z)
Desconectado
Mensajes: 230
|
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
|
|
|
En línea
|
|
|
|
Sancho.Mazorka
Desconectado
Mensajes: 480
Gamer & Programador
|
No lei un gracias jajaj todo bien, no hay problema! Sancho.Mazorka
|
|
|
En línea
|
|
|
|
|
|