Thomas har tidligere skrevet at ------------------------------------ Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection cn.ConnectionString = "driver={SQL Server};" & "server=servernavn;uid=bruger;pwd=xxx;database=basen" cn.Open Set rs = New ADODB.Recordset rs.Open "tabel1", cn, adOpenKeyset, adLockOptimistic
DoCmd.OpenForm "Start_formular" Set Forms!Start_formular.Recordset = rs
rs.Close cn.Close Set rs = Nothing Set cn = Nothing --------------------------------------- Kunne indsættes i acces og så skulle acces kunne anvendes som frontend til SQLserver. --------------------------------------- Håber nogen kan hjælpe mig. Hvor skal koden indsættes. Skal det være på formens hændelse "Aktuel" eller hvor. Skal koden indsættes på alle forme for at holde forbindelsen til SQLservereren ?
"Thomas", er det mig? (jeg kan ikke lige huske, at jeg har skrevet det, men med min malerhjerne, så kan det sagtens passe alligevel ;)
Men ovenstående kode er generelt ikke den smarteste måde. Den absolut nemmeste er at sammenkæde tabellerne og derefter bruge dem nøjagtig, som du bruger almindelige Access-tabeller:
Højreklik i database-vinduet (på det hvide område) og vælg "Sammenkæd tabeller". I fil-dialogboksen skiftes filtype til "ODBC-databaser", hvorefter du vælger DSN osv.
Jeg har lavet en DSN-fil og jeg har også kædet tabellerne til SQLserveren. Men hver gang jeg åbner en form eller skal åbne en tabel så vil acces have at jeg logger på SQLserveren. Jeg kan muligvis få administrator til at fjerne login, men jeg kunne godt tænke mig at indsætte en connection i formen, hvorved login overspringes.
Når du sammenkæder og har valgt DSN, får du en dialogboks frem, hvor du skal vælge hvilke tabeller der skal sammenkædes. I denne dialogboks er der et afkrydsningsfelt forneden, som hedder "gem adgangskode". Den gør, at du ikke bliver promptet.
Ellers plejer det nu kun at være første gang (i sessionen), at man blver promptet...eller hvad?
Kan det være fordi at jeg ikke er administrator på sqlservereren at jeg ikke får muligheden med at gemme adgangskoden ? Men kan du hjælpe med den der connection string og hvordan skal den lægges, hvis jeg bare skal køre access som front-end ?
Hvis du vil køre den på den måde, så er der 2 måder at gøre det på (som jeg ser det).
1) På hændelsen Form_Load (ved indlæsning) på hver formular lægges nedenstående kode:
Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection cn.ConnectionString = "driver={SQL Server};" & "server=servernavn;uid=bruger;pwd=xxx;database=basen" cn.Open Set rs = New ADODB.Recordset rs.Open "tabel1", cn, adOpenKeyset, adLockOptimistic
Me.Recordset = rs
rs.Close cn.Close Set rs = Nothing Set cn = Nothing
2) Lav en generel funktion, som kaldes hver gang du skal åbne en formular. Denne funktion lægges i et modul:
Public function ÅbnFormular(Formularnavn as String, Tabelnavn as String) Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection cn.ConnectionString = "driver={SQL Server};" & "server=servernavn;uid=bruger;pwd=xxx;database=basen" cn.Open Set rs = New ADODB.Recordset rs.Open Tabelnavn, cn, adOpenKeyset, adLockOptimistic
DoCmd.OpenForm Formularnavn Set Forms(formularnavn).Recordset = rs
rs.Close cn.Close Set rs = Nothing Set cn = Nothing End function
Herefter åbner du formular frmA med tabellen tblB således i VBA:
ÅbnFormular "frmA", "tblB"
Den sidste model er nok den smarteste, da den kun har kode liggende ét sted.
Jeg vil dog stadig synes at det er at gå over åen efter vand, i forhold til at bruge sammenkæde tabeller. Men hvis du ikke kan få det med login'et til at spille, så er dette da en mulighed :)
På min åbne knap ligger denne kode. Skal jeg sætte et komma efter form_navn og skrive tabelnavn også ? ---------------------------- før korrektion:
Dim stDocName As String Dim stLinkCriteria As String stDocName = "Form_navn" DoCmd.OpenForm stDocName, , , stLinkCriteria ------------------------------ efter korrektion:
Dim stDocName As String Dim stLinkCriteria As String stDocName = "Form_navn","tabel_navn" DoCmd.OpenForm stDocName, , , stLinkCriteria
Funktionen: ---------- Public Function ÅbnFormular(Formularnavn As String, Tabelnavn As String) Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection cn.ConnectionString = "driver={SQL Server};" & "server=intra11ny;uid=mig;pwd=xxx;database=base1" cn.Open Set rs = New ADODB.Recordset rs.Open kode1, cn, adOpenKeyset, adLockOptimistic
DoCmd.OpenForm Indtast_data_rediger Set Forms(Indtast_data_rediger).Recordset = rs
rs.Close cn.Close Set rs = Nothing Set cn = Nothing End Function ---------------------- Knappen: --------- Private Sub Knap1_til_medarb_form_Click() On Error GoTo Err_Knap1_til_medarb_form_Click
Hvilken version af Access bruger du? Hvis det er 2000, så var formularer stadig baseret på DAO i stedet for ADO. Så måske skal recordsettet laves om til et DAO-recordset....
Jeg har flueben i references: Microsoft DAO 3.6 library. Skal Det fjernes eller skal jeg bare ændre: ændre anden linje til DAODB.Recordset ----- Dim cn As ADODB.Connection Dim rs As DAODB.Recordset Set cn = New ADODB.Connection
Det er access 2000 jeg anvender. Jeg har lige konverteret til 2002. Acces skrev dog at der opstod fejl under konverteringen. Og i den nye version virker connection ikke.
why dont you try looking at Access Data Projects (ADP) instead of MDB!
You should concider making an upstart form to get the user to login and then re-link sing User/password then you should not need to logon again!
Synes godt om
Ny brugerNybegynder
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.