Visual basic 6.0

Estoy haciendo un programa en visual y tengo las BD hechas en sql, estoy realizando unas consultas mediante el objeto combo, como hago para que no se me repitan los datos, por ejemplo si tengo en el campo apellido, PEREZ como hago para que en la combo me aparezca 1 solo perez y no 10, cuando yo clickee perez aparecerán todos los perez en una grilla.
Se puede hacer con una vista en sql, ¿cómo se hace?
Gracias
Respuesta
1
La forma para que solo te aparezca un dato es utilizar la sentencia SELECT DISTINCT.
Crea una vista de la forma:
CREATE VIEW NombreVista AS
SELECT DISTINCT apellido FROM Tabla.
Ok, yo creo la vista, y después la paso en un comando de la dataenvarioment, lo tengo que agregar en el código de visual, ¿o con el store que hice alcanza?
No se si se entiende
Bye y gracias
No entiendo muy bien lo que quieres preguntarme, pero pienso que los tiros van de como realizar la consulta.
Tienes dos opciones para realizar una consulta de este tipo.
1.- Creas la vista en la base de datos y después realizas la consulta desde visual basic como cualquier otra consulta, teniendo en cuenta que la vista (
NombreVista) a casi todos los efectos es como una tabla.
2.- Directamente realizas la consulta con el distinct sin crear la vista en la base de datos. Al fin y al cabo una consulta simple de este tipo tampoco come tantos recursos de base de datos como para apoyarse en una vista.
Espero que resuelva tus dudas, si no es así, amplíame la pregunta ya que no se exactamente lo que quieres realizar.
Lo que pasa es que cuando hago la consulta en visual me dice "numero de agumentos erróneo o asignación de la propiedad no valida" eso cuando hago la consulta con la vista, pero no si lo hago con la consulta del procedimiento almacenado, no se porque no me deja.
Bye y gracias por todo.
Para saber el porque no te deja tendría que echar un vistazo al código, ya que por la pinta que tiene parece como si le faltara algo.
Pero si con el procedimiento almacenado te funciona ¿Por qué no dejarlo?
¡Si algo funciona, no lo toques!
Este es el código:
Private Sub cmbBuscar_Click()
If Codigo = True Then
If dtaGEDU.rsdbo_Consulta_Carreras_X_Codigo.State = adStateOpen Then
dtaGEDU.rsdbo_Consulta_Carreras_X_Codigo.Close
End If
dtaGEDU.dbo_Consulta_Carreras_X_Codigo cmbBuscar.Text
dtaConsCarreras.DataMember = "dbo_Consulta_Carreras_X_Codigo"
dtaConsCarreras.Refresh
ElseIf Descripcion = True Then
If dtaGEDU.rsdbo_Consulta_Carreras_X_Descripcion.State = adStateOpen Then
dtaGEDU.rsdbo_Consulta_Carreras_X_Descripcion.Close
End If
dtaGEDU.dbo_Consulta_Carreras_X_Descripcion cmbBuscar.Text
dtaConsCarreras.DataMember = "dbo_Consulta_Carreras_X_Descripcion"
dtaConsCarreras.Refresh
ElseIf Area = True Then
If dtaGEDU.rsdbo_Consulta_Carreras_X_Area.State = adStateOpen Then
dtaGEDU.rsdbo_Consulta_Carreras_X_Area.Close
End If
dtaGEDU.dbo_Consulta_Carreras_X_Area cmbBuscar.Text
dtaConsCarreras.DataMember = "dbo_Consulta_Carreras_X_Area"
dtaConsCarreras.Refresh
End If
End Sub
Es una consulta que depende el campo de la tabla que elija te llena esta combo.
se entiende,
te mando la o otra combo
Private Sub cmbSeleccion_Click()
If cmbSeleccion.Text = "Codigo" Then
If dtaGEDU.rsCons_Tabla_Carreras.State = adStateOpen Then
dtaGEDU.rsCons_Tabla_Carreras.Close
End If
dtaGEDU.Cons_Tabla_Carreras
cmbBuscar.Clear
Do While Not dtaGEDU.rsCons_Tabla_Carreras.EOF
cmbBuscar.AddItem dtaGEDU.rsCons_Tabla_Carreras!Codigo
dtaGEDU.rsCons_Tabla_Carreras.MoveNext
Loop
Codigo = True
Descripcion = False
Area = False
ElseIf cmbSeleccion.Text = "Descripcion" Then
If dtaGEDU.rsCons_Tabla_Carreras.State = adStateOpen Then
dtaGEDU.rsCons_Tabla_Carreras.Close
End If
dtaGEDU.Cons_Tabla_Carreras
cmbBuscar.Clear
Do While Not dtaGEDU.rsCons_Tabla_Carreras.EOF
cmbBuscar.AddItem dtaGEDU.rsCons_Tabla_Carreras!Denominacion
dtaGEDU.rsCons_Tabla_Carreras.MoveNext
Loop
Codigo = False
Descripcion = True
Area = False
ElseIf cmbSeleccion.Text = "Area" Then
If dtaGEDU.rsCons_Tabla_Carreras.State = adStateOpen Then
dtaGEDU.rsCons_Tabla_Carreras.Close
End If
dtaGEDU.Cons_Tabla_Carreras
cmbBuscar.Clear
Do While Not dtaGEDU.rsCons_Tabla_Carreras.EOF
cmbBuscar.AddItem dtaGEDU.rsCons_Tabla_Carreras!Area
dtaGEDU.rsCons_Tabla_Carreras.MoveNext
Loop
Codigo = False
Descripcion = False
Area = True
End If
Por si no se entiende:
cmbseleccion, carga en la combo todos los campos de la tabla.
cmbbuscar carga la combo con los registros del campo que yo seleccione en la combo anterior, o sea si yo selecciono por código en la combo me van a aparecer todos los códigos, si lo hago por descripción me va a aparecer todas las descrip, y lo mismo si hago por área, ahora si yo tengo 6 áreas iguales como hago para que la combo aparezca una sola que represente a las 6, se entiende.
Bye y gracias
La forma en que realizas las consultas me parecen correctas (aunque yo abriría, consultaría y cerraría en vez de Cerrar si esta abierto, abrir y consultar)
Es posible que te de error al utilizar vistas y no procedimientos por el tipo de consulta que realizas.
Al usar un tipo Dynaset (tipo por defecto) los registros se pueden modificar, cosa que en una vista normalmente no se puede.
Te recomiendo que uses el tipo Snapshot.
Es la única pista que te puedo dar para solventar el error ya que no veo ningún otro problema en el código.
Espero que con esto se solucione, porque, por más que miro el código no veo nada.
Si lo logras comunícamelo, ya que siento verdadera curiosidad.
Gracias por toda tu ayuda pero lo que hice fue poner el select distict en el procedimiento en vez a la vista y me da resultado.
Gracias por todo, bye

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas