PDA

Visualizza versione completa : ASP e database sconosciuti


Gergio
16-09-2003, 13.11.53
Ciao, ho un quesito da sottoporvi: come è possibile con ASP (io uso javascript, ma non penso sia rilevante) trovare lo schema (tabelle + campi delle tabelle) di un database access di cui sappiamo solo il nome?

LoryOne
16-09-2003, 13.36.27
Bella domanda.
Sarà una limitazione del linguaggio alla quale Microsoft ha sopperito in qualche modo ?
Ho una guida completa sul linguaggio ma mi pare di non aver mai letto che vi sia la possibilità di fare accesso atabelle, campi ed eventualmente relazioni tra tabelle in un DB Access.
In fondo una pagina ASP si basa sulla struttura di un Database noto.

Interessa anche a me questo 3d. (Y)

quipo.it
16-09-2003, 15.13.59
Non conosco ancora ASP quindi non posso fornire una risposta precisa. In PHP ci sono funzioni per tutti i principali dbms (anche via ODBC) che si occupano di estrarre le informazioni che cerchi. Credo anche in ASP ci sia qualcosa di analogo.
In alternativa, puoi sempre ricavarti i dati con una query SQL al db:

SHOW DATABASES;
USE db_name;
SHOW TABLES;
DESCRIBE table_name;

credo che le funzioni qui sopra siano SQL'92 compliant, ma è tutto da dimostrare che Access (o "a cess", come lo chiama qualcuno) le riconosca...

Gergio
16-09-2003, 15.52.50
grazie, mo' provo a lavorarci sopra un po'.
Ci sentiamo più tardi...

Gergio
16-09-2003, 20.21.46
Ci sono qsi riuscito: mi visualizza correttamente tutte le tabelle del db, ma solo i campi della prima tabella. Se invece tolgo l'ultimo "if", mi visualizza anche tutti i campi, ma li mette sotto alla prima tabella. In realtà, con qsta opzione, visualizza anche i campi di una tabella di sistema.
Ecco a voi:

<%@ LANGUAGE = JScript %>
<html>
<head>
<title>contenuto di un database</title>
</head>
<body>
<font face="verdana" size="2">
Contenuto del database:<br>
<%
var database = "prova.mdb";
Conn = new ActiveXObject("ADODB.Connection");
strConn = "";
strConn += "driver={Microsoft Access Driver (*.mdb)};";
strConn += "dbq=" + Server.MapPath(database) + ";";
Conn.Open(strConn);
var tab = Conn.OpenSchema(20);
while (!tab.EOF)
{
temp = String(tab("TABLE_TYPE"));
if ((temp.indexOf("TABLE") > -1) && (temp.indexOf("SYSTEM TABLE") == -1))
{
tabella = tab("TABLE_NAME");
Response.write("<br><b>");
Response.write(tabella);
Response.write("<br></b>");
var col = Conn.OpenSchema(4, tabella);
while (!col.EOF)
{
temp2 = String(col("TABLE_NAME"));
if (temp2.indexOf(tabella) > -1)
{
Response.write("&nbsp;&nbsp;&nbsp;" + col("COLUMN_NAME"));
Response.write("<br>");
}
col.moveNext
}
col.Close;
delete col;
}
tab.MoveNext
}
tab.Close;
delete tab;
Conn.Close;
delete Conn;
%>
</font>
</body>
</html>

Gergio
16-09-2003, 20.22.54
avevo messo anche tutte le tabulazioni per indentare il codice, ma il copia incolla me le ha perse...

Ovviamente sono ben accetti consigli per migliorare (e far funzionare correttamente) il codice.

Ciao

LoryOne
16-09-2003, 20.33.30
Ci sei già arrivato. (Y)
Ho trovato quaesto link che offre un metodo alternativo ;)
http://textcontrol.com/tx/newsgroups/microsoft_public_vb_database/2002/05/04/0014.htm

Gergio
16-09-2003, 21.55.14
soluzione al mio problema:
var col = Conn.OpenSchema(4, tabella);

diventa

var col = Conn.OpenSchema(4);

E tutto funziona... :)