Avatar billede hekla Nybegynder
20. januar 2004 - 18:49 Der er 14 kommentarer og
2 løsninger

OpenDatabase-fejl

Jeg prøver med følgende funktioner at opdatere min backend DB, men i min OpenDatabase-linie får jeg en Type-mismatch fejl. Hvis man laver en Debug.Print fGetLinkPath("t_adgang") returnerer den sti og filnavn på Backend databasen. Er der nogen, der kan se, hvad der er galt?

_______________________________________________
Function UpdateTableFieldDefns() As Boolean

Dim dbsUpdate As database, wrkDefault As Workspace
Dim tdfUpdate As TableDef, tdfField As Field
Dim strMsg As String, intResponse As Integer, strSQL As String
Dim idxUpdate As Index, idxField As Field
Dim prpNew As Property, relNew As Relation
Dim tdfTable1 As TableDef, tdfTable2 As TableDef
Dim StrBackend As String

UpdateTableFieldDefns = False
Set wrkDefault = DBEngine.Workspaces(0)

' Add new fields and tables to backend
    CurrentDb.TableDefs.Refresh
    StrBackend = fGetLinkPath("t_adgang")
   
    Set dbsUpdate = wrkDefault.OpenDatabase(fGetLinkPath("t_adgang"), True)
Debug.Print dbsUpdate
'......
UpdateTableFieldDefns = True
End Function
____________________________________________________________

Public Function fGetLinkPath(StrTable As String) As String
Dim dbs As database, stPath As String
    Set dbs = CurrentDb()
'    Set StrTable = t_adgang
    On Error Resume Next
    stPath = dbs.TableDefs(StrTable).Connect
    If stPath = "" Then
        fGetLinkPath = vbNullString
        'can change this to currentdb.name
    Else
        fGetLinkPath = Right(stPath, Len(stPath) - (InStr(1, stPath, "DATABASE=") + 8))
    End If
    Set dbs = Nothing
End Function
Avatar billede terry Ekspert
20. januar 2004 - 20:18 #1
Try changing this line so that you use the correct path+filename justtomake sure that it is not fgetlinkpath which is giving the problem. If it works then you know where to look for the error!

Set dbsUpdate = wrkDefault.OpenDatabase("C:\Yourdb.mdb", True)
Avatar billede hekla Nybegynder
20. januar 2004 - 20:49 #2
Set dbsUpdate = wrkDefault.OpenDatabase("C:\Yourdb.mdb", True)

virker fint, men det er en database, der er distribueret, og jeg ved ikke hvor brugerne har gemt deres backend. Det er derfor at jeg skal bruge fGetLinkPath-funktionen.

Som jeg skrev i spørgsmålet: Hvis man laver en Debug.Print fGetLinkPath("t_adgang") i immediate-winduet returnerer den sti og filnavn på Backend databasen.

Kan det være anførselstegnene uden om databasenavnet i OpenDatabase-kommandoen, den er gal med?
Avatar billede terry Ekspert
20. januar 2004 - 21:03 #3
The path+filename is a string so it MUST be in ""

Try and debug what fGetLinkPath returns!

Debug.Print fGetLinkPath("t_adgang")

and make sure there are no spaces by using Trim()
Avatar billede terry Ekspert
20. januar 2004 - 21:10 #4
It must be (for example)
wrkDefault.OpenDatabase("C:\Yourdb.mdb", True)

NOT
wrkDefault.OpenDatabase(""C:\Yourdb.mdb"", True)

but I cant see what it is returning!
Avatar billede terry Ekspert
20. januar 2004 - 21:26 #5
I'm off now, will take a look tomorrow!
Avatar billede hekla Nybegynder
20. januar 2004 - 23:48 #6
Debug.Print fGetLinkPath("t_adgang") returns C:\mypath\MyDb.mdb, but how do I make it return "C:\mypath\MyDb.mdb"?
Avatar billede hekla Nybegynder
21. januar 2004 - 00:14 #7
Hmmm...
Jeg kan få sat anførselstegnene sat ind ved at ændre:

fGetLinkPath = Right(stPath, Len(stPath) - (InStr(1, stPath, "DATABASE=") + 8))

i fGetLinkPath-funktionen til

fGetLinkPath = Chr$(34) & Right(stPath, Len(stPath) - (InStr(1, stPath, "DATABASE=") + 8)) & Chr$(34)

Debug.Print fGetLinkPath("t_adgang") returnerer herefter "C:\mypath\MyDb.mdb",
men så kommer "Call UpdateTableFieldDefns()" med fejlmeddelelsen: "Filnavnet er ugyldigt".


Fortsætter i morgen.
Avatar billede terry Ekspert
21. januar 2004 - 09:33 #8
Hekla>I thing your misundstanding something!

when Debug.Print fGetLinkPath("t_adgang") returns C:\mypath\MyDb.mdb then this IS a string (you just dont see the "")

Try writing this in the debug window (CTRL+G)



?debug.print "eksperten"


You will see it only displays eksperten (without "")



IF fgetLinkPath returns C:\mypath\MyDb.mdb (without "") then try this



Dim dbPath as string


dbPath = Trim(fGetLinkPath("t_adgang"))
Set dbsUpdate = wrkDefault.OpenDatabase(dbPath, True)
Avatar billede terry Ekspert
22. januar 2004 - 19:57 #9
.
Avatar billede hekla Nybegynder
22. januar 2004 - 22:32 #10
Jeg har prøvet de forskellige forslag, men har stadig ikke fået det til at virke, men det kan godt være at det er længere nede i koden, at problemet er. Når jeg debugger, kommer fejlen (Type mismatch) først ved 'Debug.Print dbsUpdate', og hvis jeg kommenterer den ud, kommer den i min createfield. Det undrer mig forresten at den skriver 'database' med lille begyndelsesbogstav i 'Dim dbsUpdate As database'.
Her er hele koden, som er samlet sammen fra http://www.granite.ab.ca/access/backendupdate.htm og http://www.mvps.org/access/tables/tbl0007.htm. Jeg ved godt at jeg ikke har fjernet alle unødvendige definitioner endnu.

______________________________________________________________
Function UpdateTableFieldDefns() As Boolean

Dim dbsUpdate As database, wrkDefault As Workspace
Dim tdfUpdate As TableDef, tdfField As Field
Dim strMsg As String, intResponse As Integer, strSQL As String
Dim idxUpdate As Index, idxField As Field
Dim prpNew As Property, relNew As Relation
Dim tdfTable1 As TableDef, tdfTable2 As TableDef
Dim StrBackend As String

On Error GoTo tagError

UpdateTableFieldDefns = False
Set wrkDefault = DBEngine.Workspaces(0)

' Add new fields and tables to backend
    CurrentDb.TableDefs.Refresh
    StrBackend = Trim(fGetLinkPath("t_adgang"))
   
    Set dbsUpdate = wrkDefault.OpenDatabase(StrBackend, True)

'Debug.print dbsUpdate

' Update the T_barn2 table
    Set tdfUpdate = dbsUpdate.TableDefs("T_barn2")

    With tdfUpdate
        Set tdfField = .CreateField("BarnMobil", dbText, 100)
        .Fields.Append tdfField
    End With

UpdateTableFieldDefns = True
Exit Function

tagError:
Select Case Err.Number
    Case 3262 ' Couldn't lock table '...'; currently in use by user '...' on machine '...'
        strMsg = "As the table or MDB is in use the new tables/fields can't be added." & vbCrLf & vbCrLf & _
        Err.Description & vbCrLf & vbCrLf & _
        "Click OK to try again or Cancel to exit the program."
        intResponse = MsgBox(strMsg, vbExclamation + vbOKCancel + vbDefaultButton2)
        If intResponse = vbOK Then
            Resume
        Else
            Exit Function
        End If
    Case 3191 ' Can't define field more than once.
        Resume Next
    Case 3219 ' Invalid operation. Happens when adding captions
        Resume Next
    Case 3284 ' Index already exists.
        Resume Next
    Case 3012 ' Object '...' already exists. Happens when adding indexes
        Resume Next
    Case Else
        MsgBox Err.Description
End Select

Exit Function
Resume

End Function
Avatar billede hekla Nybegynder
22. januar 2004 - 22:33 #11
Kan man i øvrigt ikke øge point-givningen mere?
Avatar billede terry Ekspert
23. januar 2004 - 18:01 #12
If you can send me the dB (and backend of course) then maybe it will be easier to see where the problem is
NOSPAMeksperten@santhell.dkNOSPAM

you need to remove NOSPAM

If you send it I will try and get time to look at it over the weekend
Avatar billede terry Ekspert
24. januar 2004 - 17:42 #13
Here is the problem

With tdfUpdate
        'Set tdfField = .CreateField("BarnMobil", dbText, 100)
        '.Fields.Append tdfField
'This is how to do it       
        .Fields.Append .CreateField("BarnMobil", dbText, 100)
Avatar billede hekla Nybegynder
24. januar 2004 - 17:43 #14
hmm... mit indlæg forsvandt, så her er det igen.

Det virker efter at jeg ændrede

    With tdfUpdate
        Set tdfField = .CreateField("BarnMobil", dbText, 100)
        .Fields.Append tdfField
    End With

til

    With tdfUpdate
        .Fields.Append .CreateField("BarnMobil", dbText, 100)
    End With

men det undrer mig, at man ikke kan bruge '.CreateField("BarnMobil", dbText, 100)' som feltdefinition???
Avatar billede hekla Nybegynder
24. januar 2004 - 17:44 #15
:o)
Du var 5 sek. hurtigere end mig, men jeg havde faktisk haft indlægget ude en gang før, hvor det forsvandt.
Avatar billede terry Ekspert
24. januar 2004 - 17:56 #16
whats important is that we got there in the end :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester