Kan man på nått vis få ut tabell och kolumn -namn från en access-databas via asp? Inte den snyggaste koden men den fungerar för mig i alla fall... Jag lägger in här lite kod, som kommer ifrån vb 6. Koden lägger in en massa saker i en treewiw. Jag hoppas att du kan ha nytta av någonting. Tackar Pelle! fungerade perfekt! <code>Få ut tabell och kolumn-namn
Exempel:
Tabell1
-kolumn1
-kolumn2
-kolumn3
Tabell2
-kolumn1
-kolumn2
Jag får detta att fungera:
<code>
Set objTableRS = Conn.OpenSchema(adSchemaTables,Array(Empty, Empty, Empty, "TABLE"))
Const adSchemaTables = 20
Do While Not objTableRS.EOF
Response.Write objTableRS("Table_Name") & "<br>"
objTableRS.MoveNext
LOOP
objTableRS.Close
Set objTableRS = Nothing
</code>
Men då jag kör denna kod:
<code>
Set objTableRS = Conn.OpenSchema(adSchemaTables,Array(Empty, Empty, Empty, "TABLE"))
Const adSchemaTables = 20
Do While Not objTableRS.EOF
Response.Write objTableRS("Table_Name") & "<br>"
Set objColumnRS = Conn.OpenSchema(adSchemaColumns,Array(Empty, Empty, objTableRS("Table_Name")))
Do While Not objColumnRS.EOF
Response.Write " -" & objColumnRS("Column_Name") & "<br>"
objColumnRS.MoveNext
Loop
objTableRS.MoveNext
Set objColumnRS = Nothing
objTableRS.MoveNext
LOOP
objTableRS.Close
Set objTableRS = Nothing
</code>
Så får jag meddelandet:
ADODB.Connection fel '800a0cb3'
Objektet eller providern kan inte utföra den begärda åtgärden. Sv: Få ut tabell och kolumn-namn
Lycka till!
<%@ LANGUAGE="VBSCRIPT" %>
<% Option Explicit %>
<html>
<head>
<title>Lista tabeller och fält i en access databas</title>
</head>
<body>
<%
Dim DBnamn, objDb, objRs, objRs2, Antalfalt, i
DBnamn="svd2003.mdb"
Response.Write("<h3><u>Listning av tabeller och fält från access databas: " & DBnamn & "</u></h3>" & vbCrLf)
Set objDb = Server.CreateObject("ADODB.Connection")
objDb.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath(DBnamn))
Set objRs = objDb.OpenSchema(20)
Set objRs2 = Server.CreateObject("ADODB.Recordset")
Do While Not objRs.EOF
If objRs("table_type")="TABLE" Then
Response.Write("<ul>" & vbCrLf)
Response.Write(" <li>" & vbCrLf)
Response.Write(" <b><u>" & Server.HTMLEncode("" & objRs("table_name")) & "</u></b><br>" & vbCrLf)
ListaFalt(objRs("table_name"))
Response.Write(" </li>" & vbCrLf)
Response.Write("</ul>" & vbCrLf)
End If
objRs.MoveNext
Loop
objRs.Close
objDb.Close
Set objRs = Nothing
Set objDb = Nothing
%>
</body>
</html>
<%
Sub ListaFalt(Tabell)
objRs2.ActiveConnection=objDb
objRs2.CursorType=1
objRs2.CursorLocation=2
objRs2.LockType=3
objRs2.Open("SELECT * FROM [" & Tabell & "];")
Antalfalt = objRs2.Fields.Count
If Antalfalt > 0 Then
For i = 0 To Antalfalt - 1
Response.Write(" " & Server.HTMLEncode("" & objRs2.Fields(i).Name) & "<br>" & vbCrLf)
Next
End If
objRs2.Close
End Sub
%>Sv: Få ut tabell och kolumn-namn
<code>
Dim FieldNode As Node
Dim TableNode As Node
Dim strText As String
Set Rst = con.OpenSchema(adSchemaColumns)
sCurrentTable = ""
Set Nodes = TreeView1.Nodes
Do Until Rst.EOF
strText = Rst("DATA_TYPE") '*****************************
If sCurrentTable <> Rst("TABLE_NAME") Then
Do Until Rst.EOF
sCurrentTable = Rst("TABLE_NAME")
If Left$(sCurrentTable, 4) = "MSys" Or Left$(sCurrentTable, 4) = "sys" Then
Rst.MoveNext
Else
Set TableNode = Nodes.Add(, , , sCurrentTable)
Exit Do
End If
Loop
Else 'ConvType
Set FieldNode = Nodes.Add(TableNode.Index, tvwChild, , Rst("COLUMN_NAME")) ' & Chr(32) & Tecken(strText) & Chr(32) & Langd(Rst("CHARACTER_MAXIMUM_LENGTH")))
' Nodes.Add FieldNode.Index, tvwChild, , "Fält typ " & " " & Tecken(strText)
Nodes.Add FieldNode.Index, tvwChild, , "Fält typ " & " " & ConvType(Rst("DATA_TYPE"))
If Len(Rst("CHARACTER_MAXIMUM_LENGTH")) > 0 Then
Nodes.Add FieldNode.Index, tvwChild, , "Fält längd " & " " & Langd(Rst("CHARACTER_MAXIMUM_LENGTH"))
End If
Rst.MoveNext
End If
Loop
Rst.Close
</code>Sv: Få ut tabell och kolumn-namn
saw: tyvär fick jag inte din att fungera, samma fel som vid min kod och vid samma tillfälle:
<code>
OpenSchema(adSchemaColumns)
</code>Sv: Få ut tabell och kolumn-namn
Dim Conn
Dim rsTables
Dim rsColumns
Const adSchemaColumns = 4
Const adSchemaTables = 20
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Persist Security Info=False;" & _
"Data Source=c:\test.mdb"
Set rsTables = Conn.OpenSchema(adSchemaTables, Array(Empty, Empty, Empty, "TABLE"))
Set rsColumns = Conn.OpenSchema(adSchemaColumns)
Do Until rsTables.EOF
Response.Write rsTables("Table_Name") & "<br>" & vbCrLf
rsColumns.Filter = "Table_Name='" & Replace(rsTables("Table_Name"), "'", "''") & "'"
If rsColumns.BOF And rsColumns.EOF Then
'Inga kolumner
Else
rsColumns.MoveFirst
Do Until rsColumns.EOF
Response.Write " -" & rsColumns("Column_Name") & "<br>" & vbCrLf
rsColumns.MoveNext
Loop
rsTables.MoveNext
End If
Loop
rsTables.Close
Set rsTables = Nothing
Conn.Close
Set Conn = Nothing
</code>