Avatar billede tolveren Nybegynder
26. juli 2005 - 09:25 Der er 17 kommentarer

Connection til SQLserver

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 ?
26. juli 2005 - 10:12 #1
Hej Tolveren,

"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.
Avatar billede tolveren Nybegynder
26. juli 2005 - 10:19 #2
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.
26. juli 2005 - 10:27 #3
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?
Avatar billede tolveren Nybegynder
26. juli 2005 - 10:35 #4
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 ?
26. juli 2005 - 10:44 #5
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 :)
Avatar billede tolveren Nybegynder
26. juli 2005 - 10:53 #6
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
26. juli 2005 - 10:55 #7
Nej, du skal slette alle 4 linier og blot skrive:

ÅbnFormular "Form_navn", "tabel_navn"
Avatar billede tolveren Nybegynder
26. juli 2005 - 11:17 #8
Fejltekst:
-----------
Argumenterne har en forkert type eller er uden for det angivne område eller der er opstået en konflikt mellem dem ??
26. juli 2005 - 11:18 #9
Hvilken linie står den på, hvis du trykker Debug?
Avatar billede tolveren Nybegynder
26. juli 2005 - 11:31 #10
Den hænger ikke i function
26. juli 2005 - 12:59 #11
hmmm....kan du paste hele koden? (både funktionen og kaldet. Det burde virke?
Avatar billede tolveren Nybegynder
26. juli 2005 - 13:06 #12
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

       
    ÅbnFormular "Indtast_data_rediger", "kode1"

Exit_Knap1_til_medarb_form_Click:
    Exit Sub

Err_Knap1_til_medarb_form_Click:
    MsgBox Err.Description
    Resume Exit_Knap1_til_medarb_form_Click
   
End Sub
---------------
26. juli 2005 - 13:10 #13
tja, det ser jo rgtigt ud.

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....
Avatar billede tolveren Nybegynder
26. juli 2005 - 13:24 #14
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
Avatar billede tolveren Nybegynder
26. juli 2005 - 13:46 #15
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.
26. juli 2005 - 14:21 #16
jeg kan ikke helt huske syntaksen til at connecte til SQL server vha DAO.

Men til et alm. Recordset er syntaksen således:

Dim db as database
Dim rs As DAO.Recordset
Set db = opendatabase("C:\Dindatabase.mdb")
Set rs = db.Openrecordset("din tabel", dbopendynaset)

Måske kan du selv finde syntaksen til SQL serveren?
Avatar billede terry Ekspert
26. juli 2005 - 18:04 #17
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!
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