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

Consulta a mas de una tabla

Estas en el tema de Consulta a mas de una tabla en el foro de Visual Basic clásico en Foros del Web. VB6 con access en Hola tengo dos tablas cliente y cuenta donde cliente tiene idcte,nombre,appaterno,apmaterno y cuenta tiene idcta,idcte,saldo estan relacionadas por idcte ; solo ...
  #1 (permalink)  
Antiguo 19/07/2008, 10:45
 
Fecha de Ingreso: mayo-2008
Mensajes: 4
Antigüedad: 16 años
Puntos: 0
Pregunta Consulta a mas de una tabla

VB6 con access en
Hola tengo dos tablas cliente y cuenta donde cliente tiene idcte,nombre,appaterno,apmaterno y cuenta tiene idcta,idcte,saldo
estan relacionadas por idcte ; solo que tengo probelmas en una forma consulto un numero de cuenta y quiero que tome los datos del nombre y saldo ya intente varias cosas y me da un nombre para todas las cunentas y si me cambia el nombre el saldo no es el correcto
mi codigo es el siguiente donde viene ' son intentos que hice y tengo inhabilitados

Public Sub llenadatoscuenta()
On Error GoTo err
Dim clsop As New clsoperacion
Dim sql As String
Dim rs As Recordset
Call clsop.asigna_idcta(Me.idcta)

Call clsop.buscar("idcta ", clsop.trae_idcta, False)

noafectes = True
Me.txtcta.Text = clsop.trae_numero

sql = "selecct numcte,nombre,appaterno,apmaterno from cliente inner join cuenta on cuenta.idcte=cliente.idcte group by numcte,nombre,apaterno,apmaterno"
'sql = "select numcte,nombre,appaterno,apmaterno from cuenta inner join cliente on cliente.idcte = cuenta.idcte group by numcte,nombre,appaterno,apmaterno"
'sql = "select numcte,nombre,appaterno,apmaterno from cuenta inner join cliente on cliente.idcte = cuenta.idcte where cliente.idcte = " & Me.txtcta.Text & " group by numcte,nombre,appaterno,apmaterno"

Set rs = BD.OpenRecordset(sql)


nombre = VRS(rs("nombre"))
appaterno = VRS(rs("appaterno"))
apmaterno = VRS(rs("apmaterno"))
numcte = CLng(rs("numcte"))

es = " "
X = nombre & es & appaterno & es & apmaterno
Me.lblnombre.Caption = X
Me.txtidcte.Text = numcte

'INICIO sql = "select saldo from cliente inner join cuenta on cuenta.idcta = cliente.idcte"
'SEG INT sql = "select saldo from cuenta inner join cliente on cuenta.idcte =cliente.idcte"
sql = " select saldo from cuenta where idcta = idcta"

Set rs = BD.OpenRecordset(sql)

saldo = CLng(rs("saldo"))
Me.txtsaldoactual.Text = saldo

noafectes = False
Set clsop = Nothing

Exit Sub
err:
MsgBox err.Description
End Sub
  #2 (permalink)  
Antiguo 20/07/2008, 14:06
Avatar de Txoco  
Fecha de Ingreso: junio-2008
Ubicación: Perdido en tierras Quijotescas
Mensajes: 189
Antigüedad: 15 años, 10 meses
Puntos: 7
Respuesta: Consulta a mas de una tabla

Hola!

Aunque sólo he leído por encima el código, he visto que no parametrizas la creación del recordset de consulta:

Código:
sql = "select saldo from cuenta where idcta = idcta"
Ten en cuenta que con esa línea le estás pidiendo al motor sql que te devuelva todas las filas de la tabla [cuenta] en las que el valor en [idcta] sea igual al valor en [idcta], es decir, todas las filas, porque todas tienen el mismo valor en el único campo que le pides. La claúsula where en esa sentencia es redundante e innecesaria, y sólo ralentiza el acceso a datos.

Tienes que concatenarlo de esta manera para que la consulta dependa del resultado del recordset principal:
Código:
sql = "select saldo from cuenta where idcta = " & rs!idcta
o así, si el campo [idcta] no es de tipo numérico:
Código:
sql = "select saldo from cuenta where idcta = """ & rs!idcta & """"
Aparte, en la primera instrucción que defines la instrucción SQL principal, ya estás haciendo un cruce con la tabla [cuenta] (que no parece que utilices), por lo que podrías sacar el valor directamente de ahí, simplemente añadiendo el campo "saldo" a la lista de SELECT, con lo que ya no necesitarías abrir más recordsets.

Como deduzco que sólo tendrás un saldo por cliente, te recomiendo el segundo método, aunque depende, claro, de lo que necesites exactamente
__________________
wile sona li mute e sona
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 07:17.