webForumDet fria alternativet

Finns tabellen? (...mot Access)

ASP

10 svar · 327 visningar · startad av Dee

Medlem sedan okt. 2001110 inlägg
Frågan#1

Är det någon som har nått förslag på hur man kan gå till väga för att kolla om en viss tabell finns i databasen?

If tabell med namn '123' finns i db.mdb
   '
   'Gör detta...
   '
Else
   '
   'Gör detta...
   '
End If
Medlem sedan nov. 20017 144 inlägg
#2

Något sånt här kanske:

Sub dooTables(strTable) 

Dim db as Database, tdf as TableDef 
Dim sSQL as String 

For Each tdf in db.TableDefs 
    If tdf.Name = strTable Then
        
'Gör något 
   
    else

'Gör ngt annat
    
    end if
Next tdf 
End Sub

dooTables("123")

(Totalt otestat)
Titta på dessa länkar:
http://www.webforum.nu/showthread.php?s=&threadid=66097&highlight=tabellnamn
http://www.webforum.nu/showthread.php?s=&postid=60883#post60883

Medlem sedan dec. 200012 464 inlägg
#3

Varför vill du göra en sån sak i din appplikation? Att bygga in sådana beroenden i applikationen är oftast fel väg att gå.

Medlem sedan dec. 20003 887 inlägg
#4

Så här kan du göra i Access:

Function fnExistTable(strTableName As String) As Boolean
  Dim db As Database
  Dim i As Integer

  Set db = DBEngine(0)(0)

  fnExistTable = False
  db.TableDefs.Refresh

  For i = 0 To db.TableDefs.Count - 1
    If strTableName = db.TableDefs(i).Name Then
      fnExistTable = True
      Exit For
    End If
  Next i

  Set db = Nothing
End Function

If fnExistTable("123") Then
  [blue]'Tabellen finns[/blue]
Else
  [blue]'Tabellen finns inte[/blue]
End If

Hur du får det här att fungera i ASP har jag ingen aning om ;)

Medlem sedan mars 20002 836 inlägg
#5

Denna funkar i ASP:

<%
Dim objConn
Dim rstTables
Dim strTableName

strTableName = "TBL_MEMBERS"

Set objConn = Server.CreateObject("ADODB.Connection")
	objConn.Open "MyConnString"

	Set rstTables = objConn.OpenSchema(20)

		If Not rstTables.EOF Then
			Do Until rstTables.EOF
				If LCase(rstTables("TABLE_NAME")) = LCase(strTableName) Then
					'## -- tabellen fanns --
					Response.Write "Tabellen " & strTableName & " finns i databasen."
					Exit Do
				End If
				rstTables.MoveNext
			Loop
		End If

	Set rstTables = Nothing
Set objConn = NOthing
%>

cya,
PatrikB

Medlem sedan dec. 19998 577 inlägg
#6

Eller så gör man en funktion av det. :)

Public Function TableExists( strTableName, strDBPath )
	Dim oCon
	Dim oRs
	Dim intExists
	
	Set oCon = Server.CreateObject("ADODB.Connection")
	oCon.open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & strDBPath & ";"

	Set oRs = oCon.OpenSchema(20)

	intExists = false

	Do while Not oRs.EOF 
		If Left(oRs.Fields("TABLE_NAME"),4) <> "MSys" Then
			If strTableName = oRs.Fields("TABLE_NAME") Then
				intExists = true
				Exit Do
			End If
		End If
		oRs.MoveNext
	Loop
	
	Set oRs = Nothing
	oCon.close
	Set oCon = Nothing
		
	If intExists Then
		TableExists = True
	Else
		TableExists = False
	End If
End Function
Medlem sedan feb. 200112 078 inlägg
#7

Många förslag här nu. ;)

Medlem sedan mars 20002 836 inlägg
#8

ok, ett tips som funktion:

Function TableExists(ByVal sTableName, ByRef cnn) ' As Boolean
	Dim rstTables ' As Recordset

	Set rstTables = cnn.OpenSchema(20)

		If Not rstTables.EOF Then
			Do Until rstTables.EOF
				If LCase(rstTables("TABLE_NAME")) = LCase(sTableName) Then
					'## -- tabellen fanns --
					TableExists = True
					Set rstTables = Nothing
					Exit Function
				End If
				rstTables.MoveNext
			Loop
		End If

	Set rstTables = Nothing

End Function

bättre att passa in connection-objectet som en byref argument istället för att öppna en ny connection endast för att kika på om tabellen finns eller inte.

cya,
PatrikB

Medlem sedan dec. 20003 887 inlägg
#9

Låter klokt :)

If Not rstTables.EOF Then ... End If

är väl helt onödig?

Medlem sedan mars 20002 836 inlägg
#10

jo, den följer med av gammal vana .... men, den behövs inte i detta fallet :e

cya,
PatrikB

Medlem sedan okt. 2001110 inlägg
#11

Tack för alla svar. :)
Nu har jag lärt mig nått nytt idag också.

OveRRidE skrev:

Många förslag här nu. ;)

Det underbara med wF... :h

251 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
123 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)