Problema con mostrar una consulta en un grid

Catty
05 de Febrero del 2004
Hola a todos.... tengo un problema... x favro si alguien sabe cual puede ser el error q me lo diga... xq x mas q intento e intento no me sale... bueno les dire de q trata... tengo tres tablas relacionadas... una de ellas es vehiculo q esta realacionada con dgh y dgh esta reacionada con combustible... yo probe el sgte codigo: en el query analizer del sql y me realiza la consulta...

'select VEHICULO.NRO_PLACA, COMBUSTIBLE.COMB_CODIGO, NRO_PLACA2, VEH_TIPO, VEH_CAPACIDAD, NRO_DGH,
'FECHA_EMISION, FECHA_VENCIMIENTO, COMB_DESCRIPCION from VEHICULO
'inner join DGH on DGH.NRO_PLACA = VEHICULO.NRO_PLACA
'inner join COMBUSTIBLE on COMBUSTIBLE.COMB_CODIGO=DGH.COMB_CODIGO
'where VEH_ESTADO='A'

pero cuando lo coloco en el codigo del visual basic... q es el siguiente...

Public Sub mostrar_todos()
Set rstodos = New ADODB.Recordset
With rstodos
.ActiveConnection = cn
.Source = "select VEHICULO.NRO_PLACA, COMBUSTIBLE.COMB_CODIGO, NRO_PLACA2, VEH_TIPO, VEH_CAPACIDAD, NRO_DGH," & _
" FECHA_EMISION, FECHA_VENCIMIENTO from VEHICULO" & _
" inner join DGH on VEHICULO.NRO_PLACA=DGH.NRO_PLACA" & _
" inner join COMBUSTIBLE on COMBUSTIBLE.COMB_CODIGO=DGH.COMB_CODIGO" & _
" where VEH_ESTADO='A'"
.CursorLocation = adUseClient
.Open
End With
Set grdvehiculo.DataSource = rstodos
End Sub

me sale un error de sintaxis (falta operador)... por favor si alguien sabe como arreglarlo me lo diga... es de suma urgencia... ya no se q hacer...

se los agradezco anticipadamente

Saludos

Bartolom
05 de Febrero del 2004
Aunque se vea poco elegante, por qué no pruebas colocar la consulta completa en una sola línea? Yo siempre he tenido ese drama con la sintaxis &_ hasta que me aburrí y ahora hago las consultas en una sola línea, aunque tenga que despalzar el mouse 50 metros hacia el lado. Pero nunca más volví a tener problemas de sintaxis.

Es la única explicación que le veo, porque si la consulta estuviese mal hecha, el Query Analizer también te hubiese arrojado el error.

Saludos!
Bartolom
Chile

Charango
05 de Febrero del 2004
creo que el error es
al poner el where te falta nombrar la tabla al cual pertenece el dato VEH_ESTADO

WHERE tabla.veh_estado ='" & "A" & '"

espero que ese sea el error.



Orlando
05 de Febrero del 2004
No se si este es el juego de las 7 diferencias...ja,ja,ja

Si no mire mal, el 1º inner join en la 1º sentencia es:
'inner join DGH on DGH.NRO_PLACA = VEHICULO.NRO_PLACA

.... y en la segunda sentencia es :
" inner join DGH on VEHICULO.NRO_PLACA=DGH.NRO_PLACA" & _

se ven otras diferencias.. Quizas lo mejor es que compares las dos sentencias y optes por lo que te dijo Bartolom: pon todo en una misma linea.

Catty
05 de Febrero del 2004
Muchas gracias x su ayuda... he realizado las 3 sugerencias dada pero aun nada.... he vuelto a realizar la consulata en el query analizer y la he copiado tal cual en el recordset poniendolo todo en una sola linea... peor me sigue saliendo el mismo error... por favor alguna otra sugerencia se lo agradeceria muchisimo...

Bartolom
05 de Febrero del 2004
Prueba escribiendo la sentencia así:

Public Sub mostrar_todos()
Set rstodos = New Recordset
With rstodos
.Source = "select VEHICULO.NRO_PLACA, COMBUSTIBLE.COMB_CODIGO, NRO_PLACA2, VEH_TIPO, VEH_CAPACIDAD, NRO_DGH," & _
" FECHA_EMISION, FECHA_VENCIMIENTO from VEHICULO" & _
" inner join DGH on VEHICULO.NRO_PLACA=DGH.NRO_PLACA" & _
" inner join COMBUSTIBLE on COMBUSTIBLE.COMB_CODIGO=DGH.COMB_CODIGO" & _
" where VEH_ESTADO='A'"
.ActiveConnection = cn
.CursorType = adOpenStatic
.CursorLocation = adUseClient
.LockType = adLockOptimist
End With
rstodos.Open

Set grdvehiculo.DataSource = rstodos
End Sub

Saludos!
Bartolom
Chile

Catty
05 de Febrero del 2004
Gracias x la ayuda cabo de probar de la manera q me dijiste pero me sale el mismo error... es un error de sintaxis (falta operador) en la expresion de consulta 'VEHICULO.NRO_PLACA=DGH.NRO_PLACA join COMBUSTIBLE on DGH.COMB_CODIGO=COMBUSTIBLE.COMB_CODIGO'... por favor ya no se q mas poner... les agradeceria muchisimo cualquier otra sugerencia...

Saludos

Catty

Orlando
05 de Febrero del 2004
...Si no te funciona el código que puso Bartolom, prueba a dividir la instrucción "SELECT", es decir quitale, p.e. el último "inner join " y , si funcionase
sabes que el problema esta en esa parte. Asi con
el resto de la sentencia para ver que te falla y que no.

Catty
05 de Febrero del 2004
Los probe x separado tal como me sugeriste... x separado funcionan bien cada lado... una consulta mi BD esta en access... yo la pase al sql para poder utilizar el query analizer... es posible usar el inner join con ua BD en access???? cada vez q hago la sentencia de 3 tablas tengo problemas... y siempre en el ultimo inner join... por favor es urgente q termine esto... les agradezco muchisimo...

Saludos

Catty

JoeMori
05 de Febrero del 2004
Catty, hola la solucion a tu problema es muy facil, vete a access y crea una consulta por vista diseño.
1.- Agrega las bases de datos que utilizaras
2.- En el entorno que creastes conecta o relaciona las tres bases de datos según tu requerimiento
4.- Dale un nombre
5.- crea una pantalla donde insertaras un objeto data control y u dbgrid
6.- al dataSource del data control le pones la consulta que creastes desde access.
7.- al dbgrid en la proiedad RecordSource el nombre del control data (Data1 o un nombre que tu le pongas)
prueba sin utilizar crietrios de busqueda y luego te explico como utilizar una sentencia Sql para busquedas especificas.
José Morillo desde Venezuela

Catty
05 de Febrero del 2004
probare asi... espero q salga muchas gracias....

Bartolom
05 de Febrero del 2004
Me podrías mandar el archivo access a mi correo a ver si me resulta acá la consulta?

Saludos!
Bartolom
Chile

Catty
05 de Febrero del 2004
Cual es tu correo??? para poder enviartelo.... muchas gracias....

Baltasar
05 de Febrero del 2004
Yo siempre que uso más de un JOIN pongo paréntesis, y realmente no estoy seguro de si ese esrá el fallo (no tengo tus tablas para probar, así que te corresponde a tí comprobarlo:

.Source = "select VEHICULO.NRO_PLACA, COMBUSTIBLE.COMB_CODIGO, NRO_PLACA2, VEH_TIPO, VEH_CAPACIDAD, NRO_DGH, FECHA_EMISION, FECHA_VENCIMIENTO from (VEHICULO inner join DGH on VEHICULO.NRO_PLACA=DGH.NRO_PLACA) inner join COMBUSTIBLE on COMBUSTIBLE.COMB_CODIGO=DGH.COMB_CODIGO where VEH_ESTADO='A'"

Lo de ponerlo en una línea o varias no creo que importe, el visual se lo traga de la misma manera.

Saludos

Catty
05 de Febrero del 2004
Muchas gracias... probe con los parentesis y ya sale... creo q alli habia un problema... y en verdad tenia varias consultas q tenia 2 join y ahora me salen la mayoria... las otras las revisare... muchisimas gracias en verdad...

Saludos

Catty

Baltasar
05 de Febrero del 2004
Es que si no le pones los paréntesis no le veo lógica al join.

Me alegro de que te funcione, hasta pronto.