Problemas con inner join

Hola amigo, tengo una página (borrar_empresa1.asp) que lo que tiene es un combo y un textfield, donde tengo que seleccionar la rama de la empresa -desde el combo- y luego introducir un criterio de búsqueda para buscar la empresa que quiero borrar, esta página lo que me genera es una lista de empresas, correspondiente a la rama seleccionada, que se ajusten al criterio de búsqueda, lo que pasa es que quiero pasar también el nombre de la rama -que esta es la tabla rama- por eso hago un inner join. Cbo_rama es el combo de rama y var_buscar es el field text donde pongo el criterio de búsqueda aquí esta la consulta:
consulta = "SELECT * FROM empresa INNER JOIN rama ON empresa.cod_rama = rama.cod_rama WHERE empresa.cod_rama = " & request.form("cbo_rama") & " and nomb_empresa LIKE'%" & var_buscar & "%'" & ";"
recset.Open consulta, conexionDB, adOpenKeyset, adLockPessimistic, adCmdText
Luego genero la lista con vínculos donde paso a la otra página (borrar_empresa2.asp) el código de empresa, código de la rama, el nombre de la empresa (también quisiera pasar el nombre de la rama, pero como me dio pro blemas no la puse):
<%Response.write "<a href =""borrar_empresa2.asp?empresa.cod_empresa="&recset("empresa.cod_empresa")&"&empresa.cod_rama="&recset("empresa.cod_rama")&"&empresa.nomb_empresa="&recset("empresa.nomb_empresa")& """>" &_
recset("empresa.nomb_empresa") & "</a>"
Lo que pasa es que al realizar la búsqueda en borrar_empresa1.asp, no me genera la lista de empresas porque me sale el siguiente error:
ADODB.Recordset error '800a0cc1'
Item cannot be found in the collection corresponding to the requested name or ordinal.
/swapp/Copy of administracion/borrar_empresa1.asp, line 93
Antes yo hacia esta misma consulta sin usar el inner join y me salia la lista de empresas, pero no podía pasar a borrar_empresa2.asp el parámetro de nombre de rama, por eso hice el inner join y de ahí todo me salio mal.
¿Me podes ayudar?
Muchas gracias.

3 respuestas

Respuesta
1
Prueba con esta Consulta
"SELECT EMP.*,RAM.* FROM empresa EMP INNER JOIN rama RAM.ON EMP.cod_rama = RAM.cod_rama WHERE EMP.cod_rama = " & request.form("cbo_rama") & " and nomb_empresa LIKE'%" & var_buscar & "%'" & ";"
Respuesta
1
No puedo ayudarte mucho porque no se como es la estructura de las tablas que estas usando. El error que te da es porque estas intentando tomar el valor de un campo que no existe en la tabla, no se en cual te estarás equivocando.
Si están todos los campos bien fíjate si no es que después del LIKE no tienes un espacio, tienes que poner un espacio entre el LIKE y la comilla simple.
Disculpame que no pueda ayudarte mejor, cualquier cosa enviame la estructura de las 2 tablas que usas.
Tabla empresa: cod_rama (LLP), cod_empresa (LLP), nomb_empresa, propietario,deireccion, correo , generalidades, proceso_prod, cod_municipio, cod_departamento
TABLA RAMA: cod_rama (LLP), nomb_rama
Esa es la estructura de las tablas, llp significa llave primaria.
Ayudame please
Tus tablas coinciden con los campos. Entonces decidí probarlo yo a ver que pasaba.
Vos estas usando la variable RECSET para llamar a los valores del recordset, y la usas de la forma
recset("empresa.cod_empresa")
Fijate sacarle el nombre de la tabla adentro de las comillas, usalo asi
recset("cod_empresa")
Porque el recordset devuelve una tabla sin nombre, que puede ser una combinación de varias tablas (como en este caso), entonces, al no tener nombre, no tienes que ponerle adentro de las comillas.
Y en el select pone asi
SELECT empresa.* FROM empresa INNER JOIN rama (etc.)
Para que sepa que tome los campos de la tabla empresa, si quieres agregarle campos de la tabla rama agregale
rama.nomb_rama
Ahora te debería andar, pero me dijiste que te da problemas al pasar como parámetro el nombre de la rama. Podes usarlo así
server. urlencode(recset("nomb_rama"))
Así te codifica el nombre de la rama para pasarla como parámetro de una página.
Acordate de este concepto: un recordset es una tabla sin nombre, cuyos campos pueden ser combinación de varias tablas. Si se repite el nombre de un campo adentro de un recordset te va a dar error y vas a tener que renombrar uno de los dos campos.
Espero que te sirva, y espero no confundirte, si seguís teniendo problemas avisame.
Primero que todo, gracias por tu paciencia, hice lo que me hiciste y en un principio me sirvio, pero
fijate que le hice algunos cambios a la consulta y me estaba funcionando, eso fue ayer, que no tenia la linea "&rama.nomb_rama="&recset("nomb_rama")& en la linea 93. O sea, si yo le quitaba eso pues me tiraba una lista de empresas, y cada una de ellas era un vinculo a otra pagina -borrar_empresa2.asp- en donde las podia borrar, pero hoy solo le puse la linea esa y me tira el siguiente error
ADODB.Recordset error '800a0cc1'
Item cannot be found in the collection corresponding to the requested name or ordinal.
/swapp/Copy of administracion/borrar_empresa1.asp, line 93
Creo que era el mismo que me tira siempre, a continuacion te pongo la consulta que hago:
consulta = "SELECT empresa.* FROM empresa INNER JOIN rama ON empresa.cod_rama = rama.cod_rama WHERE empresa.cod_rama = " & request.form("cbo_rama") & " and nomb_empresa LIKE '%" & var_buscar & "%'"
recset.Open consulta, conexionDB, adOpenKeyset, adLockPessimistic, adCmdText
Y luego te pongo la linea 93 que es donde manejo los vínculos y es la que me esta sacando canas verdes:
<%Response.write "<a href =""borrar_empresa2.asp?empresa.cod_empresa="&recset("cod_empresa")&"&empresa.cod_rama="&recset("cod_rama")&"&empresa.nomb_empresa="&recset("nomb_empresa")&"&rama.nomb_rama="&recset("nomb_rama")&""">" &_
recset("nomb_empresa") & "</a>"
%>
Lo que pasa es que estoy usando eso de nomb_rama de esa manera porque no te entendí lo de urlencode, perdón :(
¿Me podes ayudar?
Muchísimas gracias
Te falta poner en la consulta el campo del nombre de la rama
consulta = "SELECT empresa.*, rama.nomb_rama FROM empresa INNER JOIN rama ON empresa.cod_rama = rama.cod_rama WHERE empresa.cod_rama = " & request.form("cbo_rama") & " and nomb_empresa LIKE '%" & var_buscar & "%'"
No le des bolilla a todo lo que te dije antes, te confundí más. Hacelo así y te va a andar, que es lo importante y lo que estas buscando.
Una vez que te ande y lo probes varias veces ahí, si quieres, te explico bien para que sirve el urlencode.
Mi hermano, las miles de gracias que te doy se quedaron cortas, muchas gracias por tu tiempo y paciencia. Un saludo, muchsisisisisisisisimas gracias hermano.
Respuesta
1
Ese problema te lo está dando por que estas intentando acceder a un campo del recordser que no ha sido incluido en la consulta que has creado, no se si has incluido todo lo que querías, asegurate de que así es, por ejemplo crea esta misma consulta en access y comprueba que tienes acceso a empresa. Cod_empresa,... si es así asgurate de que los nombres sean correctos suele pasar cuando se hacen consultas que accedan a muchos campos.
No se si lo has hecho así pero prueba a crear la consulta con el asisitente de access y luego copiar la cadena SQL directamente(es muy cómodo de verdad).
Bueno espero haberte ayudado, si necesitas algo más no lo dudes, de todos modos ya te digo ese error se debe a un acceso inexistente de un campo del recordset, pues venga un saludo y suerte...
Hola amigo, soy yo de nuevo , en serio perdoná la preguntadera, fijate que le hice algunos cambios a la consulta y me estaba funcionando, eso fue ayer, que no tenia la linea "&rama.nomb_rama="&recset("nomb_rama")& en la linea 93. O sea, si yo le quitaba eso pues me tiraba una lista de empresas, y cada una de ellas era un vinculo a otra pagina -borrar_empresa2.asp- en donde las podia borrar, pero hoy solo le puse la linea esa y me tira el siguiente error
ADODB.Recordset error '800a0cc1'
Item cannot be found in the collection corresponding to the requested name or ordinal.
/swapp/Copy of administracion/borrar_empresa1.asp, line 93
Creo que era el mismo que me tira siempre, a continuacion te pongo la consulta que hago:
consulta = "SELECT empresa.* FROM empresa INNER JOIN rama ON empresa.cod_rama = rama.cod_rama WHERE empresa.cod_rama = " & request.form("cbo_rama") & " and nomb_empresa LIKE '%" & var_buscar & "%'"
recset.Open consulta, conexionDB, adOpenKeyset, adLockPessimistic, adCmdText
Y luego te pongo la linea 93 que es donde manejo los vínculos y es la que me esta sacando canas verdes:
<%Response.write "<a href =""borrar_empresa2.asp?empresa.cod_empresa="&recset("cod_empresa")&"&empresa.cod_rama="&recset("cod_rama")&"&empresa.nomb_empresa="&recset("nomb_empresa")&"&rama.nomb_rama="&recset("nomb_rama")&""">" &_
recset("nomb_empresa") & "</a>"
%>
¿Me podes ayudar?
Muchísimas gracias
Prueba a incluir en los recordset recset("empresa.cod_empresa"), para que se ajuste a como lo has llamado en la consulta.
Perdona no haberte podido responder antes pero he estado ocupado...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas