Foros del Web » Programando para Internet » ASP Clásico »

Query Analizer con Asp?

Estas en el tema de Query Analizer con Asp? en el foro de ASP Clásico en Foros del Web. Hola, Me preguntaba si es posible crear un Ananlizador de Consultas con ASP Algo simplecito que permita ejecutar una consulta y que despleque los resultados. ...
  #1 (permalink)  
Antiguo 04/03/2008, 08:27
Avatar de pcarvajal  
Fecha de Ingreso: enero-2002
Mensajes: 701
Antigüedad: 22 años, 5 meses
Puntos: 8
Query Analizer con Asp?

Hola,
Me preguntaba si es posible crear un Ananlizador de Consultas con ASP
Algo simplecito que permita ejecutar una consulta y que despleque los resultados.
Vi algo parecido en http://www.sqlmax.com/centro/analizador.asp
Se puede?
  #2 (permalink)  
Antiguo 04/03/2008, 08:47
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 4 meses
Puntos: 146
Re: Query Analizer con Asp?

Una página, si el parámetro Query viene vacío pones un textarea llamado "query", en el botón submit llamas a esa misma página. Si no viene vacío el parámetro entonces defines un objeto RecordSet, y haces un open y atrapas el error si algo falla, si no falla entonces haces un ciclo con el recordset y si truena poner el contenido del objeto err.

Así sería para algo tan simple como el ejemplo que pusiste.

Saludos
  #3 (permalink)  
Antiguo 04/03/2008, 09:04
Avatar de pcarvajal  
Fecha de Ingreso: enero-2002
Mensajes: 701
Antigüedad: 22 años, 5 meses
Puntos: 8
Re: Query Analizer con Asp?

que tal Myakire, gracias por responder.
Solo me quedan dos dudas:
1. cual seria la forma mas optima de atrapar el error?
2. como desplego la cantidad de columnas de una tabla de manera dinamica? ME explico: Suponiendo que la tabla1 tiene 5 columnas y la tabla2 8
Si hago un Select * como tendria que hacerlo para desplegar las columnas?? (suponiendo que desconozco los nombres y además la cantidad de las mismas)

Cita:
<%
On error Resume Next


Sql = "SELECT * FROM Tabla1 (NOLOCK)"
Set Rs = con.Execute(Sql)
if not Rs.EOF then
while not Rs.EOF
'aqui desplegariamos el nombre de la columna y sus datos

rs.Movenext
wend
end if
Set Rs = nothing


if err.number <> 0 or err.number <> "" then
response.write err.description
end if
%>

Última edición por pcarvajal; 04/03/2008 a las 09:11
  #4 (permalink)  
Antiguo 04/03/2008, 09:29
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 4 meses
Puntos: 146
Re: Query Analizer con Asp?

Para lo de las columnas, sería con algo como esto (claro que hay que retocarlo):
Código:
<table border=1>
<%

while not rs.eof
  %><tr><%
	for i=0 to rs.fields.count-1
  %><td><%=rs(i)%><%
	next
  rs.movenext 
wend
%>
</table>
  #5 (permalink)  
Antiguo 04/03/2008, 09:36
Avatar de pcarvajal  
Fecha de Ingreso: enero-2002
Mensajes: 701
Antigüedad: 22 años, 5 meses
Puntos: 8
Re: Query Analizer con Asp?

ok, hasta aquí solo me quedan 2 observaciones:

Cita:
<%
On error Resume Next


Sql = "SELECT * FROM Tabla1 (NOLOCK)"
Set Rs = con.Execute(Sql)
if not Rs.EOF then
%>
<table border=1>
<%
while not Rs.EOF
%>
<tr>
<%
for i=0 to rs.fields.count-1
response.write "<td>" & rs(i) & "</td>"
next
%>
</tr>
<%

rs.Movenext
wend
%>
</table>
<%
end if
Set Rs = nothing


if err.number <> 0 or err.number <> "" then
response.write err.description
end if
%>
1. No se deslegan el nombre de las columnas
2. Si hay campos NULL tampoco los muestra
  #6 (permalink)  
Antiguo 04/03/2008, 09:37
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 4 meses
Puntos: 146
Re: Query Analizer con Asp?

precisamente a eso me refería con "hay que retocarlo" , no creo que tengas problema con eso ¿o cuál es la pregunta específica?
  #7 (permalink)  
Antiguo 04/03/2008, 09:42
Avatar de pcarvajal  
Fecha de Ingreso: enero-2002
Mensajes: 701
Antigüedad: 22 años, 5 meses
Puntos: 8
Re: Query Analizer con Asp?

jaja ok,ok
mira, "retocado" me queda así:

Cita:
<%
On error Resume Next


Sql = "SELECT * FROM MiTabla (NOLOCK)"
Set Rs = con.Execute(Sql)
if not Rs.EOF then
%>
<table border=1>
<%
while not Rs.EOF
%>
<tr>
<%
for i=0 to rs.fields.count-1
if isnull(rs(i)) = false then
response.write "<td>" & rs(i) & "</td>"
else
response.write "<td>&nbsp;</td>"
end if
next
%>
</tr>
<%

rs.Movenext
wend
%>
</table>
<%
end if
Set Rs = nothing


if err.number <> 0 or err.number <> "" then
response.write err.description
end if
%>
ahora solo me falta agregarle el nombre de las columnas y estamos
como puedo hacer eso?
  #8 (permalink)  
Antiguo 04/03/2008, 09:56
Avatar de pcarvajal  
Fecha de Ingreso: enero-2002
Mensajes: 701
Antigüedad: 22 años, 5 meses
Puntos: 8
Re: Query Analizer con Asp?

listo! finalmente se me iluminó
asi quedó al final:

Cita:
<%
On error Resume Next

Sql = "SELECT * FROM MiTabla (NOLOCK)"
Set Rs = con.Execute(Sql)
if not Rs.EOF then
%>
<table border=1>
<tr>
<%
for i=0 to rs.fields.count-1
response.write "<td>" & rs(i).name & "</td>"
next
%>
</tr>
<%
while not Rs.EOF
%>
<tr>
<%

for i=0 to rs.fields.count-1
response.write "<td>"
if isnull(rs(i)) = false then
response.write rs(i)
else
response.write "&nbsp;"
end if
response.write "</td>"
next
%>
</tr>
<%

rs.Movenext
wend
%>
</table>
<%
end if
Set Rs = nothing


if err.number <> 0 or err.number <> "" then
response.write err.description
end if
%>
lo dejo aqui por si a alguien le sirve, y dicho sea de paso, si alguien quiere meterle mano y arreglarlo más, que lo haga y lo vuelva a postear

Gracias Myakire,
Saludos!
  #9 (permalink)  
Antiguo 04/03/2008, 09:57
 
Fecha de Ingreso: enero-2008
Mensajes: 614
Antigüedad: 16 años, 5 meses
Puntos: 57
Re: Query Analizer con Asp?

Tambien podrias puedes mostrar el nombre de cada columna

SQL server
Código:
adSchemaTables = 20
adSchemaColumns = 4
set rs = conexion.OpenSchema(adSchemaTables,Array(null,null,null,"TABLE"))
do while not rs.eof
    tabla = rs("table_name")
    response.write "tabla = " & tabla & "<br>"
    set campos = conexion.OpenSchema(adSchemaColumns,Array(null,null,tabla,null))
    do while not campos.eof
        response.write campos("column_name") & ","
        campos.movenext
    loop
    response.write "<br><br>"
    rs.movenext
loop
ORACLE

Código:
select * from dba_tab_columns where table_name = 'Nombre_de_la_tabla'
  #10 (permalink)  
Antiguo 04/03/2008, 14:18
Avatar de pcarvajal  
Fecha de Ingreso: enero-2002
Mensajes: 701
Antigüedad: 22 años, 5 meses
Puntos: 8
Re: Query Analizer con Asp?

me acaban de surgir un par de dudas..

1. como capturo los mensajes que no son de error? (me refiero a los mensajes del tipo (x row(s) affected))

2. como podria ejecutar dos sentencias a la vez, y a su vez captar ambos mensajes de filas afectadas?

algo asi como

select * from tabla1
select * from tabla2


(x row(s) affected))
(x row(s) affected))


3. (aunque creo que con esta pregunta desarmo todo lo hecho) como podria desplegar un sp_helptext (procedimiento) para poder editarlo???? (esta pregunta va porque lo que va hecho hasta el momento solo funciona para SELECTS,INSERTS; UPDATES y DELETES)

Última edición por pcarvajal; 04/03/2008 a las 14:36
  #11 (permalink)  
Antiguo 04/03/2008, 15:33
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 4 meses
Puntos: 146
Re: Query Analizer con Asp?

Para los selects no ocupas nada ya que para saber el número de filas afectadas solo debes de saber cuántos registros tienes en cada recordset.

Y para las instrucciones que no te regresan un RecordSet basta que hagas un print de @@rowcount entre cada intrucción, y las ejecutes con un .Open de un RecordSet, el objeto RS resultante tendrá tantas filas como instrucciones print hayas puesto.

Seria cosa de probar, pero recuerdo que así funciona

Saludos
  #12 (permalink)  
Antiguo 05/03/2008, 06:48
Avatar de pcarvajal  
Fecha de Ingreso: enero-2002
Mensajes: 701
Antigüedad: 22 años, 5 meses
Puntos: 8
Re: Query Analizer con Asp?

lo del @@rowcount no me resultó (ni idea porqué) pero lo solucioné con una simple variable que utilizo como contador.
Lo que no me resulta es que me lea más de una linea instruccion sql, ahi se me queda pegado y se cae.
Las instrucciones sql las estoy pasando atraves de un textarea, no un input.
Por ejemplo, si intento dos selects seguidos (uno por linea) me toma el primero y el segundo lo ignora.
Ahora si creo un procedimiento:
create proc sp_prueba(
@var1 numeric(09)
)
as
begin
select * from mitabla where campo = @var1
end

lo que hace es tirarme un error en la segunda linea (me alega que hay algo mal escrito cerca del parentesis), asumo que no es error de programacion, sino que no es capaz de interpretar más de una linea de instrucciones.
  #13 (permalink)  
Antiguo 06/03/2008, 16:43
Avatar de pcarvajal  
Fecha de Ingreso: enero-2002
Mensajes: 701
Antigüedad: 22 años, 5 meses
Puntos: 8
Re: Query Analizer con Asp?

Bueno pues, aunque aún no puedo hacer que lea más de una línea, aquí les dejo el código que llevo

Cita:
<!-- #include file="includes/conexion.inc"-->
<%
On error Resume Next
Server.ScriptTimeout = 86400
%>
<script language="javascript">
function areaTexto(tipo){
if (tipo == "+"){
document.getElementById('Sql').rows += 5;
}
else{
if (document.getElementById('Sql').rows > 5){
document.getElementById('Sql').rows -= 5;
}
}
}

</script>
<form action="adm_sql.asp" method="post">
<input type="hidden" name="mode" value="query">
<table border="1">
<tr>
<td colspan="2"><textarea name="Sql" rows="5" cols="80"><%=rtrim(Request("Sql"))%></textarea></td>
</tr>
<tr>
<td><input type="submit" value="Ejecutar"></td>
<td align="right"><a href="#" onclick="areaTexto('+');">+</a>&nbsp;<a href="#" onclick="areaTexto('-');">-</a></td>
</tr>
</table>
</form>
<%
if (Request("mode")="query" and rtrim(Request("Sql"))<>"") then
Dim total_registros
total_registros = 0

Sql = Replace(lcase(Request("Sql")),"print","select")
Set Rs = con.Execute(Sql)

if err.number <> 0 then
response.write "<tt><b>Error:</b> " + err.description + "</tt>"
On Error GoTo 0
else
if not Rs.EOF then
response.Write "<table border=1>"
response.Write "<tr>"
for i=0 to rs.fields.count-1
response.write "<td>" & rs(i).name & "</td>"
next
response.write "</tr>"
while not Rs.EOF
response.write "</tr>"
for i=0 to rs.fields.count-1
response.write "<td>"
if (isnull(rs(i)) = false or rtrim(rs(i))="") then
response.write rs(i)
else
response.write "&nbsp;"
end if
response.write "</td>"
next
total_registros = total_registros + 1
response.Write "</tr>"
rs.Movenext
wend
response.write "</table>"
end if
Set Rs = nothing
response.write "(" & total_registros & " filas afectadas)"
end if
end if
%>
Saludos!
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

SíEste tema le ha gustado a 3 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 20:37.