09. september 2004 - 12:22Der 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!
Virksomheder er på vej fra store sprogmodeller, der svarer på spørgsmål, til AI-agenter, der kan udføre opgaver på egen hånd. Det gør teknologien mere nyttig – og langt mere risikabel.
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.
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")
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 :-) )
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!!
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 !
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.
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.
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.
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.