IF functie op basis van aan/afwezige tabellen?

Status
Niet open voor verdere reacties.

petervanN

Gebruiker
Lid geworden
3 mrt 2008
Berichten
23
Hallo allemaal,

Ik gebruik een stukje code om tabellen te linken onder een knop als deze:

Code:
DoCmd.DeleteObject acTable, tblName
DoCmd.TransferDatabase acLink, "Microsoft Access", tblLink, acTable, tblName, tblNewName, False


Het probleem met deze code is dat als het een keer mis gaat, hij wel de tabel delete maar niet de nieuwe automatisch linkt omdat daar een fout in zit. Kan ik ook een IF functie hierin maken zodat als de tabel (tblName) er is dat hij hem dan delete en als hij er niet is dat hij dan dat overslaat?

Bij voorbaat dank,

Met vriendelijke groet,

Peter
 
Laatst bewerkt:
Transacties

Je kan transacties gebruiken:
Code:
public sub blabla()

    dim ws as workspace
    dim db as database
    set ws = dbengine(0)
    set db = ws(0)

'Start transactie
    ws.begintrans

    db.execute "drop table tabelnaam"
'
' nog een hoop code hier
'

    ws.committrans
    set db = nothing
    set ws = nothing
Exit_blabla:
    exit sub
Err_blabla:
    ws.rollback
    resume Exit_blabla
end sub
(typed not tested)
Als je code ergens fout gaat dan wordt alle database commando's tussen de begintrans en de rollback ongedaan gemaakt.

Maar waarom gooi je de tabel weg en maak je hem daarna weer aan? Je kan hem ook leegmaken!

Enjoy!
 
Wat bedoel je precies met leegmaken? Ik link een nieuwe database eigenlijk onder de oude naam. We krijgen hier geregeld updates van verkoopdatabases en prijsdatabases van enkele honderden MB's groot. Dat leegmaak idee kan ik volgen tot het punt waar ik de tabel leeggemaakt heb. Bedoel je dat ik daarna de hele nieuwe database in mn oude tabel append? Of?
 
Als de gekoppelde tabelnaam en de database naam van die gekoppelde tabel evenals de locatie van die database waarin die gekoppelde tabel zit, hetzelfde blijven dan hoef je eigenlijk niets te doen, Ik zou wel even een refreshlink doen.

Als de tabel qua structuur en naam niet veranderd en de database naam (of pad) is wel veranderd, ook dan kan je volstaan met het opnieuw connecten van je tabellen.

Kijk voor code even in een recente post van mij.

HTH:D
 
Hmm ja maar het probleem is dat ze hier nog wel eens de namen van de tabellen en databases veranderen met bijvoorbeeld een maand erachter. En probeer marketing maar eens uit te leggen hoe ze een tabelnaam wijzigen... Dan maar gewoon zeggen dat als ze er een rommeltje van maken het ding maar opnieuw moeten kopieren EN ik ga natuurlijk ff auwehoeren met die transacties. In ieder geval bedankt! :thumb:
 
Laatst bewerkt:
Hallo PeterVanN ,


Om te kijken of een tabel bestaat zet je onderstaande Funktie in een module.

Code:
Function TableExists(TableName As String) As Boolean
'=================================================  ============================
' hlfUtils.TableExists
'-----------------------------------------------------------------------------
' Copyright by Heather L. Floyd - Floyd Innovations - www.floydinnovations.com
' Created 08-01-2005
'-----------------------------------------------------------------------------
' Purpose:  Checks to see whether the named table exists in the database
'-----------------------------------------------------------------------------
' Parameters:
' ARGUEMENT             :   DESCRIPTION
'-----------------------------------------------------------------------------
' TableName (String)    :   Name of table to check for
'-----------------------------------------------------------------------------
' Returns:  True, if table found in current db, False if not found.
'=================================================  ============================

Dim strTableNameCheck
On Error GoTo ErrorCode

'try to assign tablename value
strTableNameCheck = CurrentDb.TableDefs(TableName)

'If no error and we get to this line, true
TableExists = True

ExitCode:
    On Error Resume Next
    Exit Function

ErrorCode:
    Select Case Err.Number
        Case 3265  'Item not found in this collection
            TableExists = False
            Resume ExitCode
        Case Else
            MsgBox "Error " & Err.Number & ": " & Err.Description, vbCritical, "hlfUtils.TableExists"
            'Debug.Print "Error " & Err.number & ": " & Err.Description & "hlfUtils.TableExists"
            Resume ExitCode
    End Select

End Function


Dan vervolgens kan je volgende code gebruiken om te controleren of je tabel bestaat


Code:
If TableExists("TBlUwTabel") Then
   DoCmd.RunSQL "Drop Table TBlUwTabel;"
  'hier uw code om te linken 
End If


Groetjes
dolfke
 
Hehehe jullie heersen! Dat laatste werkt perfect! Thanks man! Het wordt maar eens tijd om dankbaarheidsgeld over te maken denk ik :love:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan