Avatar billede steensommer Praktikant
31. januar 2005 - 00:03 Der er 8 kommentarer og
1 løsning

Excel og MS SQL

Hej

Jeg forsøger at skifte fra Access database til MS SQL DB men det lykkes ikke rigtigt med nedenstående kode. Hvad er problemet?

vh Steen

Private Sub TxtFNavn_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim Conn As String
Dim rs As ADODB.Recordset
Dim strSQL As String
Dim Cprnr As String
Dim FNavn As String
Cprnr = Me.txtCPR.Text
FNavn = Me.txtFNavn.Text

'  Conn = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=\\server\faelles\Lotte og Susanne\Registre\Patientregisteret.mdb;"
    Conn = "Provider=sqloledb;Data Source=\\server\faelles\Lotte og Susanne\Registre\Patientregisteret1CS;Initial Catalog=pubs;Integrated Security=SSPI;"

    strSQL = "UPDATE EKKO SET [Fornavn] = ('" & FNavn & "') WHERE [CPR nr] = ('" & Cprnr & "')"
   
    Set rs = New ADODB.Recordset
    rs.Open strSQL, Conn, adOpenForwardOnly, adLockReadOnly, adCmdText
Set rs = Nothing

End Sub
Avatar billede lorentsnv Nybegynder
31. januar 2005 - 01:00 #1
Din connection string ser ikke rigtig ud. Kig på følgende link for at se eksempler på connection strings for sorskellige databaser. Nedenstende link peger på OleDB Provider for SQL Server:
http://www.able-consulting.com/MDAC/ADO/Connection/OLEDB_Providers.htm#OLEDBProviderForSQLServer

Eksempelvis kunne din connection string se således ud:
Conn =  "Provider=sqloledb;" & _
          "Data Source=NavnPåDinSQLServer;" & _
          "Initial Catalog=pubs;" & _
          "Integrated Security=SSPI"


Din sql server har et kortere navn end det du har brugt. Det er servernavnet som skal stå som Data Source.
Avatar billede lorentsnv Nybegynder
31. januar 2005 - 01:05 #2
Se eventuelt også:
http://eksperten.dk/spm/197973
Avatar billede steensommer Praktikant
31. januar 2005 - 10:09 #3
Ja jeg ved godt at Connection string er forkert. Jeg har prøvet nedenstående men får fejl ved connection string:

Dim adoConn As ADODB.Connection
Dim RS As ADODB.Recordset

Set adoConn = New ADODB.Connection
Set RS = New ADODB.Recordset

    adoConn.Open "Provider=sqloledb;" & _
          "Data Source=Server;" & _
          "Initial Catalog=Patientregisteret1CS.adp;" & _
          "Integrated Security=SSPI;"
   
    RS.Open "\\server\faelles\Lotte og Susanne\Registre\Patientregisteret1CS.adp", adoConn
Avatar billede lorentsnv Nybegynder
31. januar 2005 - 10:16 #4
Du skal vel åbne dit recorset med en SQL. Hvad er det du refererer til med "\\server\faelles\Lotte og Susanne\Registre\Patientregisteret1CS.adp"? På SQL server referere du til databasenavnet, og ikke til databasefilen som i access. Du har angivet DataSource til 'Server'. Heder din SQL Server 'Server'? Hvis IIS ligger på samme server som SQL Server/MSDE, kan du referere til 'localhost'

Jeg vil mene du skal have din SQL med i åbningen af recorsettet:

Private Sub TxtFNavn_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim Conn As String
Dim rs As ADODB.Recordset
Dim strSQL As String
Dim Cprnr As String
Dim FNavn As String
Cprnr = Me.txtCPR.Text
FNavn = Me.txtFNavn.Text

Conn = "Provider=sqloledb;" & _
          "Data Source=Server;" & _
          "Initial Catalog=Patientregisteret1CS.adp;" & _
          "Integrated Security=SSPI;"

strSQL = "UPDATE EKKO SET [Fornavn] = ('" & FNavn & "') WHERE [CPR nr] = ('" & Cprnr & "')"
   
    Set rs = New ADODB.Recordset
    rs.Open strSQL, Conn, adOpenForwardOnly, adLockReadOnly, adCmdText
Set rs = Nothing

End Sub
Avatar billede steensommer Praktikant
31. januar 2005 - 10:37 #5
Ovenstående kode er et uddrag så den oprindelige kode og indeholder naturligvis sql - beklager forvirringen! Men uagtet stopper koden ved Conn (adoConn)(og når adrig ned til RS.Open) så fejlen må vel ligge et andet sted. Min SQL server hedder server og er anbragt på en anden maskine (server). Fejlen er:  "Cannot open database requested in login 'Patientregisteret1CS.adp'. Login fails.
Avatar billede lorentsnv Nybegynder
31. januar 2005 - 11:01 #6
Jeg ser nu at din Initial Catalog ikke er rigtig, det skal ikke være Patientregisteret1CS.adp. Dette er vel filnavnet på databasen i MSDE. Når du oprætter en database, giver du den et navn, og det er dette navn du skal bruge som Initial Catalog

Ellers skal du være opmærksom på at du logger rigtig på databasen Du har angivet Trusted connection, og i så fald skal IIS-brugere være oprættet i databasen med rigtige rettigheder.

Måske skulle du i stedet logge dig på med en bestemt bruger som du ved findes i databasen med fornødne rettigheder. Så skal din connectionstring se således ud:
Conn = "Provider=sqloledb;" & _
          "Data Source=Server;" & _
          "Initial Catalog=myDatabaseName;" & _
          "User Id=myUsername;" & _
          "Password=myPassword"
Avatar billede steensommer Praktikant
31. januar 2005 - 13:30 #7
Hej igen
Du må undskylde at der går så lang tid mellem mine svar - der har været en del at se til lige nu. Jeg har imidlertid også fået installeret SQL server på min lokale PC'er (Navn på SQL: STEENS). Jeg kom derved lidt nærmere med følgende kode:

    adoConn.Open "Provider=sqloledb;" & _
          "Data Source=STEENS;" & _
          "Initial Catalog=PatientregisteretSQL;" & _
          "Integrated Security=SSPI;"
   
    RS.Open adoConn

Nu fejler den ved RS.Open med ordene: "Argumenterne har en forkert type eller er uden for det angivne område, eller der er opstået en konflikt mellem dem.
Avatar billede lorentsnv Nybegynder
31. januar 2005 - 13:36 #8
Du må angive en sql i din RS.Open.

I koden du viser har du kun RS.Open adoConn.

Typisk vil du først definere en sql, og derefter åbne dit recordset med denne sql:

    adoConn.Open "Provider=sqloledb;" & _
          "Data Source=STEENS;" & _
          "Initial Catalog=PatientregisteretSQL;" & _
          "Integrated Security=SSPI;"
    SQL = "Select * from TabelX"
       
    RS.Open SQl, adoConn
Avatar billede steensommer Praktikant
31. januar 2005 - 13:38 #9
Hej
Det var da "bare" det:

    adoConn.Open "Provider=sqloledb;" & _
          "Data Source=STEENS;" & _
          "Initial Catalog=PatientregisteretSQL;" & _
          "Integrated Security=SSPI;"
   
    strSQL = "SELECT * FROM [Kartotek] WHERE [Patient nr] ='" & HCVno & "';"
    RS.Open strSQL, adoConn

Nu fungerer det tilsyneladende - tak for hjælpen.

vh Steen
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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