Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Problemas con una consulta

Estas en el tema de Problemas con una consulta en el foro de Visual Basic clásico en Foros del Web. Que tal de nuevo aqui solicitando un poco de ayuda miren tengo q realizar una consulta pero el problema q tengo es q quiero q ...
  #1 (permalink)  
Antiguo 19/06/2008, 15:21
 
Fecha de Ingreso: abril-2008
Mensajes: 281
Antigüedad: 16 años, 1 mes
Puntos: 1
Sonrisa Problemas con una consulta

Que tal de nuevo aqui solicitando un poco de ayuda miren tengo q realizar una consulta pero el problema q tengo es q quiero q me jale la informacion en base a el id de otra, vean este codigo es el q llevo pero siente q me falta hacer la comparativa entre los ids

este es el codigo q estoy manejando para ese proceso

Código:
Private Sub cmddiagnostico_Click(Index As Integer)
Select Case Index
       Case 0
            RecBD.MoveFirst
       Case 1
            RecBD.MovePrevious
            If RecBD.BOF Then RecBD.MoveFirst
       Case 2
            RecBD.MoveNext
            If RecBD.EOF Then RecBD.MoveLast
       Case 3
            RecBD.MoveLast
End Select
Call DatosDiagnostico
End Sub

Private Sub DatosDiagnostico()
    Call VisualizarPacienteDiagnosticos
    Call VisualizarPacientes
    RecBD "SELECT * FROM diagnosticos WHERE id = " & idpaciente--------- Aqui me marca variable no definida
    text2(0) = RecBD!Id
    text1(2) = RecBD!idpaciente
    Combo2 = RecBD!diagnostico
    text1(3) = RecBD!fecha
    text1(4) = RecBD!hora
    text1(5) = RecBD!descripcion
End Sub
Bueno rapidamente les comento que en una tabla tengo un id automatico por ejemplo el "1" y cuando lo tengo seleccionado en mi formulario quisiera poder obtener toda la informacion que contenga mi otra tabla que seria idpaciente que contenga el numero "1" para hacer poder moverme entre ellos y visualizarlos

Saludos y gracias por la ayuda
  #2 (permalink)  
Antiguo 19/06/2008, 15:30
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Exclamación Respuesta: Problemas con una consulta

Debes especificar el Recordset que estás usando:
Código:
RecBD "SELECT * FROM diagnosticos WHERE id = " & Recordset!idpaciente
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.

Última edición por David; 19/06/2008 a las 15:40
  #3 (permalink)  
Antiguo 19/06/2008, 15:38
 
Fecha de Ingreso: abril-2008
Mensajes: 281
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Problemas con una consulta

Gracias por la respuesta David pero me si saliendo el mismo error y la verdad no se como deba de hacer esa parte del codigo por q ahi estoy llamando a una tabla pero en el caso que tengo a la que estoy llamando a es a la de diagnostico q es la q puede tener varios idpaciente igual y la otra es la del paciente uqe la relaciono ahora no se si este mal mi instruccion por q las dos llamadas q hago al principio

Código:
Call VisualizarPacienteDiagnosticos
    Call VisualizarPacientes
para llamar a las tablas con sus campos entonces no se si solo tenga que hacer un comparativo

gracias por la ayuda

Saludos
  #4 (permalink)  
Antiguo 19/06/2008, 15:41
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Exclamación Respuesta: Problemas con una consulta

Cita:
Iniciado por spiderman78 Ver Mensaje
Gracias por la respuesta David pero me si saliendo el mismo error y la verdad no se como deba de hacer esa parte del codigo por q ahi estoy llamando a una tabla pero en el caso que tengo a la que estoy llamando a es a la de diagnostico q es la q puede tener varios idpaciente igual y la otra es la del paciente uqe la relaciono ahora no se si este mal mi instruccion por q las dos llamadas q hago al principio

Código:
Call VisualizarPacienteDiagnosticos
    Call VisualizarPacientes
para llamar a las tablas con sus campos entonces no se si solo tenga que hacer un comparativo

gracias por la ayuda

Saludos
¿Cuál es el Recordset que estás utilizando para la tabla de pacientes relacionada?.
Insisto en que para que no te salga el error debes anteceder al nombre del campo el Recordset:
Código:
Nombre_Recordset!idpaciente
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #5 (permalink)  
Antiguo 19/06/2008, 15:58
 
Fecha de Ingreso: abril-2008
Mensajes: 281
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Problemas con una consulta

Mira ya lo acamode como me dices con el recorset

Cita:
Private Sub DatosDiagnostico()
Call VisualizarPacienteDiagnosticos
Call VisualizarPacientes
RECBDD "SELECT * FROM diagnostico WHERE idpaciente = " & RecBD.Id ------------------ aqui me marca el error
text2(0) = RECBDD!Id
text1(2) = RECBDD!idpaciente
Combo2 = RECBDD!diagnostico
text1(3) = RECBDD!fecha
text1(4) = RECBDD!hora
text1(5) = RECBDD!descripcion
End Sub
Y me marca un error que dice
"Method or data member not found"

Que podra ser ahora el error ahora

Gracias Saludos
  #6 (permalink)  
Antiguo 19/06/2008, 16:01
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Exclamación Respuesta: Problemas con una consulta

Debe ser:
Código HTML:
RecDB!id
Saludos
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #7 (permalink)  
Antiguo 19/06/2008, 16:26
 
Fecha de Ingreso: abril-2008
Mensajes: 281
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Problemas con una consulta

Que tal ya hice la prueba de ambas formas (utilizando de entrada ambas tablas) y ya modifique lo q me haz comentado y el codigo me queda de esta manera

Cita:
Private Sub DatosDiagnostico()
Call VisualizarPacienteDiagnosticos
Call VisualizarPacientes
RecBD "SELECT * FROM pacientes WHERE id = " & RECBDD!Idpaciente
text2(0) = RECBDD!Id
text1(2) = RECBDD!Idpaciente
Combo2 = RECBDD!diagnostico
text1(3) = RECBDD!fecha
text1(4) = RECBDD!hora
text1(5) = RECBDD!descripcion
End Sub
y me sigue marcando error pero ahora dice
"Compile error:"
Expected procedure, not variable

Saludos
  #8 (permalink)  
Antiguo 20/06/2008, 01:08
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Respuesta: Problemas con una consulta

Falta abrir el recordset:

RecBD.Open "SELECT * FROM diagnostico WHERE idPaciente = " & RECBDD!Id, TuConexion

RecBD es un recordset que devolverá todos los diagnósticos del paciente indicado en el recordset RECBDD


Última edición por Avellaneda; 20/06/2008 a las 03:01
  #9 (permalink)  
Antiguo 20/06/2008, 07:11
 
Fecha de Ingreso: abril-2008
Mensajes: 281
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Problemas con una consulta

Que tal mira ya modifique el codigo para que me quede de esta manera.

Código:
Private Sub DatosDiagnostico()
    Call VisualizarPacienteDiagnosticos
    Call VisualizarPacientes
    RECBDD.Open "SELECT * FROM diagnostico WHERE idPaciente = " & RecBD!Id, BD, adOpenStatic, adLockOptimistic
    text2(0) = RECBDD!Id
    Text1(2) = RECBDD!Idpaciente
    Combo2 = RECBDD!diagnostico
    Text1(3) = RECBDD!fecha
    Text1(4) = RECBDD!hora
    Text1(5) = RECBDD!descripcion
End Sub
Me marca

Error 3705
La operacion no esta permitida si el objeto esta abierto


Saludos
  #10 (permalink)  
Antiguo 20/06/2008, 07:39
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Respuesta: Problemas con una consulta

Pues solamente antes de abrir el recorset, le pones

If RECBDD.State = 1 Then RECBDD.Close

  #11 (permalink)  
Antiguo 20/06/2008, 08:19
 
Fecha de Ingreso: abril-2008
Mensajes: 281
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Problemas con una consulta

Que tal ya le agregue el if y me dice q el controlador ODBC no admite las propiedades solicitadas

Gracias por la ayuda
Saludos
  #12 (permalink)  
Antiguo 20/06/2008, 15:52
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Pregunta Respuesta: Problemas con una consulta

Cita:
Iniciado por spiderman78 Ver Mensaje
Que tal ya le agregue el if y me dice q el controlador ODBC no admite las propiedades solicitadas

Gracias por la ayuda
Saludos
¿En cuál linea te da el error?
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #13 (permalink)  
Antiguo 20/06/2008, 16:11
 
Fecha de Ingreso: abril-2008
Mensajes: 281
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Problemas con una consulta

Que tal david mira ya logre hacer el codigo para q me muestre la informacion solo q cuando ocupo mis controles command no mas solo me muestra el ultimo registro y para hacer la prueba agregue 3
mira todo el codigo q ya no me marca error es el siguiente

Cita:
Private Sub cmddiagnostico_Click(Index As Integer)
Select Case Index
Case 0
RecBD.MoveFirst
Case 1
RecBD.MovePrevious
If RecBD.BOF Then RecBD.MoveFirst
Case 2
RecBD.MoveNext
If RecBD.EOF Then RecBD.MoveLast
Case 3
RecBD.MoveLast
End Select
Call DatosDiagnostico
End Sub

Private Sub DatosDiagnostico()
Dim sql As String
Call VisualizarPacienteDiagnosticos
Call VisualizarPacientes
sql = "SELECT pacientes.id, pacientediagnostico.* FROM pacientes " & _
"INNER JOIN pacientediagnostico ON pacientes.id=pacientediagnostico.id WHERE pacientes.id = " & Text1(0)
text2(0) = RECBDD!Id
text2(2) = RECBDD!Idpaciente
Combo2 = RECBDD!diagnostico
text2(3) = RECBDD!fecha
text2(4) = RECBDD!hora
text2(5) = RECBDD!descripcion
End Sub
la verdad no se en cual de los dos proceso este mal pero algo debe de estar faltandome ya q me muestra la informacion pero solo del ultimo registro

Saludos y Gracias
  #14 (permalink)  
Antiguo 21/06/2008, 14:06
Avatar de Txoco  
Fecha de Ingreso: junio-2008
Ubicación: Perdido en tierras Quijotescas
Mensajes: 189
Antigüedad: 15 años, 11 meses
Puntos: 7
Respuesta: Problemas con una consulta

Hola!

Revisa si en las funciones VisualizarPacienteDiagnosticos o VisualizarPacientes mueves o haces alguna operación con el recordset, porque probablemente ahí esté el fallo
  #15 (permalink)  
Antiguo 22/06/2008, 08:24
 
Fecha de Ingreso: abril-2008
Mensajes: 281
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Problemas con una consulta

Que tal Txoco pues mira en esas dos opciones lo unico q hago es llamar a mi tabla y a mis campos de esta manera no se si haya problema.

Este es el codigo de ambas

Cita:
Public Sub VisualizarPacientes()
Set recbd = New ADODB.Recordset
recbd.Open "select * from pacientes", BD, adOpenStatic, adLockOptimistic
End Sub
Cita:
Public Sub VisualizarPacienteDiagnosticos()
Set RECBDD = New ADODB.Recordset
RECBDD.Open "select * from pacientediagnostico", BD, adOpenStatic, adLockOptimistic
End Sub
  #16 (permalink)  
Antiguo 23/06/2008, 01:06
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Respuesta: Problemas con una consulta

Hola,

no tiene ningún sentido llamar a esas dos funciones en este contexto.
¿Y qué haces con la consulta SQL? no se le aplica a ningún recordset.
¿Porqué un ComboBox para mostrar el diagnóstico? si solamente cargará uno, a no ser que recorras el recordset de principio a fin.

Bueno, lo que yo haría sería mostrar los datos de la tabla "pacientediagnostico" en un control DataGrid y en los TextBox los datos del paciente (id, nombre, ....) p.e.

En el evento Click de los botones y antes de llamar al procedimiento DatosDiagnostico:
...
End Select
Text1(0).Text = RecBD!id
Text1(1).Text = RecBD!Nombre
....
Call DatosDiagnostico
End Sub


y el procedimiento DatosDiagnostico lo dejaría así:

Código:
Private Sub DatosDiagnostico()
Dim sql As String
sql = "SELECT *  FROM pacientediagnostico WHERE IdPaciente = " & Text1(0)
Set RECBDD = New ADODB.Recordset
RECBDD.Open sql, BD, adOpenStatic, adLockOptimistic
Set GridDiagnostico.DataSource = RECBDD
End Sub
Donde:
IdPaciente es un campo de la tabla pacientediagnostico que apunta al campo id de la tabla pacientes.
GridDiagnostico es un control DataGrid donde se mostrarán todos los datos de la tabla pacientesdiagnostico que coincidan con el paciente.

  #17 (permalink)  
Antiguo 23/06/2008, 02:51
Avatar de Txoco  
Fecha de Ingreso: junio-2008
Ubicación: Perdido en tierras Quijotescas
Mensajes: 189
Antigüedad: 15 años, 11 meses
Puntos: 7
Respuesta: Problemas con una consulta

Fíjate que tanto en VisualizarPacienteDiagnosticos como en VisualizarPacientes estás volviendo a abrir el recordset. Cada vez que haces un "Set recbd = New ADODB.Recordset" estás creando uno nuevo y asignándolo a la variable "recbd", machacando cualquier dato que tuviera antes. Por tanto cuando después de esas dos funciones vuelves a DatosDiagnostico el "recbd" que usas ya no tiene nada que ver con el que has usado en cmddiagnostico_Click, y por eso los botones no te funcionan.

Es lo que tienen las variables globales

Lo suyo es que uses un recordset para los pacientes y otro distinto para los diagnósticos. Requiere más memoria, pero es así como se debe programar, ya que se nota en la velocidad de ejecución, simplificas el programa, y le das un uso específico a cada variable.

Y además, le haría caso a Avellaneda, lo de la combo tampoco termino de entenderlo.
  #18 (permalink)  
Antiguo 23/06/2008, 06:17
 
Fecha de Ingreso: abril-2008
Mensajes: 281
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Problemas con una consulta

Que tal muchas gracias por sus respuestas y sobre lo del grid pues se q podria ser menos complicado a lo mejor q de la forma q lo estoy haciendo pero desfortunadamente no quieren ningun grid asi por eso busco esta otra manera y bueno creo q lo q tendre q checar es la forma q me dices Txoco creo q mi error esta siendo q cada ves q llamo a mi proceso hago un nuevo recordset y por lo tanto me muestra solo un registro, por eso ya no me marca ningun tipo de error.....

Pero bueno la verdad no se como abrir la tabla sin hacer un nuevo recorset....

Saludos y gracias por la ayuda

Última edición por spiderman78; 23/06/2008 a las 06:56
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:03.