Avatar billede nillebis Nybegynder
09. september 2004 - 12:22 Der er 12 kommentarer og
1 løsning

Front/Backend - Og SQL

Jeg har faktisk to spøgsmål.

1. Når jeg sender et system til en kunde så vil jeg gerne have mulighed for at systemet automatisk kobler en backend til en frontend lige meget hvor han placere den og selvom systemet skal køre som en klient løsning hvor backenden ligger på serveren. Er der gode muligheder for at lave noget her.

2. kan man lave en Access applikation hvor kunden selv når man åbner systemet bestemmer og det skal være en standard access løsning med en MDB. base eller og det skal være en My sql ellerMs sql løsning. Med andre ord at kunden skal bestemmer hvilke database backenden skal køre på! JEg synes jeg har set et eksempel herpå i en DB, men jeg kan ikke huske hvor.. Så håber på hjælp herfra!
Avatar billede arne_v Ekspert
09. september 2004 - 12:35 #1
re 2)

Ikke sådan per magi.

Men det kan godt lade sig gøre at lave noget kode der gør det.

re 1)

Det vil være svært at lave uden bruger interaktion. Og med bruger interaktion
er det vel #2 !?
Avatar billede nillebis Nybegynder
09. september 2004 - 12:56 #2
Okay - Det er jeg ikke med på - Dine svar er ikke speciel detaljeret
Avatar billede overchord Nybegynder
09. september 2004 - 13:38 #3
1) Stort set. Jeg antager at du kender netvarkets struktur. Saa link alle tabeller med UNC-sti og dermed bliver den uafhaengig af brugerens egen placering og du faar ikke problemer med forskellige drev-bogstaver etc.

2) Det bliver svaert at lave uden en ordentlig bunke kode. Faktsik kan du meget nemt faa en raekke problemer idet du ikke muddelbart "bare" forbinder til f.eks en mysql. Der skal du bruge en ny driver til ODBC som skal installeres foerst.
Avatar billede nillebis Nybegynder
09. september 2004 - 14:03 #4
Overchord vil du uddybe nærmere?? I hvertfald sp. 1 - JEg kunne godt tænke mig at lave sådan en løsning
Avatar billede overchord Nybegynder
09. september 2004 - 14:41 #5
ok mht til at bruge UNC-stien skal du ikke noedvendigvis bruge kode i din distribuerede database. Det vigtigste er at linket mellem front-end og back-end er etableret paa en UNC sti som f.eks \\Server2\databaser\backend.mdb frmefor brugerens eller din egen definerede drev-placering (f.eks \\Server2 er mappet som g:\ paa en maskine og som z:\ paa en anden)
Dette goer jeg normalt selv ved at definere en database med UNC stien og link tabeller vha koden istedet:

set db2  = Opendatabase("\\Server2\databaser\backend.mdb")

DoCmd.TransferDatabase acLink, "Microsoft Access", db2.Name, acTable, Tablenavn, Tabelnavn

Dette er relativt nemt at kode hvis du looper igennem alle dine tabeller. Som regel er det nok at have linket tabellerne paa denne maade paa en enkelt maskiner og saa distribuere denne kopi, men du har muligheden for at inkludere koden paa de lokale kopier og gen-linke tabellerne hvis der skulle blive problemer.

Mht pkt 2 er det en lidt laengere historie mht hvilken loesning du vil bruge, om strukturen paa db er forskellige i forskellige databaser osv. Det kan vaere besvaerligt nok at skifte al data bare i ren access (der opstaar altid nogle smaa forskelle mellem databaser med tiden :-) )
Avatar billede nillebis Nybegynder
09. september 2004 - 16:56 #6
Jeg vender lige tilbage senere - prøver lige at lege lidt med det.. Det ser lidt svært ud - Det i sp. 1 altså - JEg ved jo ikke hvor kunden vil have sin backend til at ligge!!
Avatar billede arne_v Ekspert
09. september 2004 - 17:52 #7
Hvis app kun skal distribueres på et enkelt netværk så kan man gemme UNC.

Men ellers skal ens applikations startup kode checke for om backend
er der. Ellers skal der promptes for placering m.v. og den information
gemmes så (local MDB, windows registry, INI fil eller lignende).

Det kan sagtens kodes i VBA.

Men jeg har svært ved at se hvordan det skal gøres uden bruger interaktion.

Søge på nettet efter SQLServere og prøve sig frem ? Nej vel !
Avatar billede nih Novice
09. september 2004 - 22:46 #8
Det med SQL serveren har jeg ikke prøvet men jeg har et simpel modul til at skifte backend med .mdb:

Option Compare Database
Option Explicit

Const DocsBackEndSti As String = "\\Koent2\DOCSOPEN\Docsdb\NIH\"
Const BacendFilNavn As String = "ArbPlads_tbl.mdb"


Public Function checkLinks()
    Dim rs As DAO.Recordset
    Dim check As Boolean

On Error Resume Next
    'Stop
    Set rs = CurrentDb.OpenRecordset("stof")
    check = IIf(Err.Number = 0, True, False)
   
    If Not check Then
        'Vælg lokal backend
        If Not RefreshLinks(GetCurrentPath() & BacendFilNavn) = True Then
            MsgBox "kunne ikke finde en gyldig backend"
        End If
    End If
    rs.Close
    Set rs = Nothing
   
End Function

Function getbackend() As String
    If InStr(CurrentDb.TableDefs("stof").Connect, "docsdb") Then
        getbackend = "DocsOpen"
    Else
        getbackend = "Lokal"
    End If
End Function
Function SkiftBackend(sBackend As Integer)

    If sBackend = 1 Then
        RefreshLinks DocsBackEndSti & BacendFilNavn
    ElseIf sBackend = 2 Then
        RefreshLinks GetCurrentPath & BacendFilNavn
    End If
   
End Function
Function GetCurrentPath() As String
    Dim Pos As Integer, path As String
    path = CurrentDb.Name
    Pos = Len(path)
    Do Until Mid(path, Pos, 1) = "\"
        Pos = Pos - 1
    Loop
    GetCurrentPath = Left(path, Pos)
End Function


Function RefreshLinks(strFilename As String) As Boolean


    Dim db As DAO.Database
    Dim tdf As DAO.TableDef
    Dim intCount As Integer

On Error GoTo ErrorHandler
Debug.Print strFilename
    Set db = CurrentDb
    For intCount = 0 To db.TableDefs.Count - 1
        Set tdf = db.TableDefs(intCount)

        If Len(tdf.Connect) > 0 Then
            tdf.Connect = ";DATABASE=" & strFilename
            Err.Number = 0
           
            On Error Resume Next
            tdf.RefreshLink
           
            If Err.Number <> 0 Then
            Stop
                RefreshLinks = False
                Exit Function
            End If
        End If
    Next intCount

    RefreshLinks = True
    Exit Function
   
ErrorHandler:
    MsgBox "Error#:  " & Err.Number & vbCrLf & Err.Description
    RefreshLinks = False
End Function

Det ene link er en netværkssti og den anden en lokal backend i samme dir som frontend.

håber du kan bruge det
Avatar billede hekla Nybegynder
09. september 2004 - 23:05 #9
Rolls Roycen (hvis det er sådan man staver til bilnavnet) inden for den slags installationer er, så vidt jeg ved, instalationescriptene fra SageKey.com. Med dem kan man lave alle de muligheder, som du stiller op, men hele installationspakken koster mere end $1000, og det vil stadig kræve arbejde med tilpasning af scrips.
Avatar billede nillebis Nybegynder
13. september 2004 - 21:37 #10
Kan du måske lige fortælle hvordan jeg skal sætte koden op!!
Avatar billede nih Novice
14. september 2004 - 23:55 #11
Hej

min kode er bare et eksempel på hvordan du kan gøre.

koden indsætter du i et modul. og sæt reference til DAO

systemmet arbejder med een frontend og 2 backend's - den ene backend er placeret i bibliotekket angivet med konstanten DocsBackEndSti den anden i SAMME bibliotek som din frontend.
begge Backend's har SAMME navn angivet med konstanten BacendFilNavn.


Den første funktion tjekker om dine kædede tabeller er iorden, hvis ikke kæder den til backend i samme bibliotek som frontend - dvs lokal. Jeg tjekker min tabel "stof" om jeg kan åbne den - her skal du selvfølgelig bruge et tabel navn fra din egen db. god at kører hvergang din frontend starter op.

når brugeren skal skifte backend kaldes funktionen SkiftBackend fra en knap på en formular:
SkiftBackend (1) ' den ene backend angivet med med konstanten DocsBackEndSti
skiftBackend (2) ' den anden backend i samme bibliotek som frontend

min kode er bare ment som inspiration - der er mange forholdsregler som man kan tage højde for - jeg er sprunget over en del af dem.
Avatar billede nillebis Nybegynder
17. oktober 2004 - 09:34 #12
smid et svar
Avatar billede nillebis Nybegynder
02. november 2004 - 09:29 #13
Lukker
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