Avatar billede Webnoob Juniormester
16. juli 2017 - 23:06 Der er 8 kommentarer

Opdatere database i Excel

Nogen der kan fortælle mig en måde at opdater en database i excel.
Jeg kan sagtens indlæse dataen fra databasen i Excel, men kan ikke få lov til at opdatere databasen.
Avatar billede komputerdk Mester
18. juli 2017 - 09:37 #1
Når du skriver databasen - er det så en MS SQL server, MySQL etc?

OBS hvis du bare skal opdatere et par hundrede linjer - så drop excel - der er SSIS eller powershell eller lign meget bedre - nedenstående VBA kan forbedres ved at lave et loop hvor du indsætter 100 linjer ad gangen eller lign..

VBA for at indsætte (

Sub DB_insert()
'Tilføj Tools > references >  Microsoft ActiveX Data Objects 2.8 Library

Dim conn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim sConnString As String
    Dim SQL As String
    Dim x As Integer
    Dim count As String
     
'Slår opdateringen fra..
  Application.ScreenUpdating = False
     
    count = Application.WorksheetFunction.CountA(Columns("A:A")) 'tæller antal rækker
   
    x = 1 'da der er overskrift
   
    'Laver forbindelsen til Databasen.
    sConnString = "Provider=SQLOLEDB;Data Source=DIN_DATA_BASE_SERVER;" & _
                  "Initial Catalog=DATABASE_NAVN;" & _
                  "Integrated Security=SSPI;"

    ' laver forbindelsen
    Set conn = New ADODB.Connection
    Set rs = New ADODB.Recordset

    'Vi åbner forbindelsen
    conn.Open sConnString

'Laver loop
Do While Len(Range("a1").Offset(x, 0).Value) > 0


'Din SQL & _ ny linje

SQL = SQL & "INSERT INTO [DIN_TABEL] " & _
      "([felt 1],[felt 2]" & _
      ",[felt 3]) VALUES ("
   

'Værdier sættes ind
     
SQL = SQL & "'" & Range("A1").Offset(x, 0).Value & "'," & _
            "'" & Range("a1").Offset(x, 1).Value & "'," & _
            "'" & Range("a1").Offset(x, 2).Value & "';"
     
'Kører SQLen
    Set rs = conn.Execute(SQL)
x = x + 1
Loop
       

    ' Ryder op
    If CBool(conn.State And adStateOpen) Then conn.Close
    Set conn = Nothing
    Set rs = Nothing
Application.ScreenUpdating = True
MsgBox "done"
End Sub
Avatar billede komputerdk Mester
18. juli 2017 - 09:39 #2
Ovenstående VBA er klippe klistre fra en anden kode - så spørg hvis det er sort..

er lavet tli SQL server 2008 og den køres som den bruger der er logget ind..
Avatar billede Webnoob Juniormester
18. juli 2017 - 09:54 #3
Der er slet ikke tale om at det er flere linjer der skal opdateres, det er et par enkelte felter her og der, som skal opdateres. Hvad er det der SSIS?
Avatar billede komputerdk Mester
18. juli 2017 - 16:06 #4
SSIS er en "pakke" som SQL serveren kører der fx. kan importere en fil til en tabel.

Hvis det er et par linjer der skal opdateres, kan VBA bruges.

Så skal du dog bruge en update i din SQL forespørgsel , hvis du vil opdatere eksisterende data.
Avatar billede Webnoob Juniormester
18. juli 2017 - 23:37 #5
Kan du vise mig et eksemble i vba til at indsætte, delete og/eller opdatere en table fra excel til MS sql server 2016?
Avatar billede komputerdk Mester
20. juli 2017 - 22:09 #6
Når jeg kommer til en PC kigger jeg på det.
Avatar billede komputerdk Mester
22. juli 2017 - 00:44 #7
her en mulighed..

du kan lave det som en funktion - så du fx. kan lave en formel der hedder

updDB(id, felt1,felt2)

her er den som almindelig sub

Sub exp()
'Tilføj Tools > references >  Microsoft ActiveX Data Objects 2.8 Library


Dim MyCon As New ADODB.Connection
Dim RS As New ADODB.Recordset 'til de data vi trækker ud fra recordsettet
Dim ConStr As String
Dim SQL As String
Dim y As Integer
Dim za As Integer
Dim SQL_2 As String
Dim x As Integer


'Hvis det er en database med en SQL bruger
ConStr = "Provider=sqloledb;Data Source=DIN_DB_SERVER;Initial Catalog=DATABASE; " & _
"User ID=DIT_BRUGERNAVN; Password=DIT_PASSWORD;"

'Hvis det er med windows bruger
' ConStr = "Provider=SQLOLEDB.1;Integrated Security=SSPI; Initial Catalog=DATABASE;Data Source=DIN_DB_SERVER;Persist Security Info=False" 'Databasen vi bruger


Set MyCon = New ADODB.Connection
MyCon.ConnectionString = ConStr

SQL = "SELECT Count(ID) as Antal FROM tabel " & _
        "WHERE tabel.id = '" & Range("celle med id").Value & "'"

MyCon.Open (ConStr)
Set RS = MyCon.Execute(SQL)
       
za = RS.Fields.Item("antal") 'bruger antal til at se om der er nogen
RS.Close
MyCon.Close

'hvis der en linje med det ID - ergo skal opdatere ikke insætte
If za > 0 Then


'Opdaterer eksisterende - hvis data findes
'update 12-05-2015 med convert på dato...
    SQL_2 = "UPDATE tabel SET " & _
            "feltnavn1 = '" & Range(feltnavn1).Value & "'," & _
            "Feltnavn2 = '" & Range(feltnavn1).Value & "'" & _
            " WHERE tabel.id = '" & Range("din_celle_med_id").Value & "'"

'

Else
 
  'Sætter ind - hvis data ikke findes
    SQL_2 = "INSERT INTO tabel(feltnavn1, feltnavn2, id) " & _
            "VALUES ('" & Range("feltnavn1").Value & "','" & Range(feltnavn2).Value & "','" & Range("din_celle_med_id").Value & "')"
 
End If

MyCon.Open      'åbner connection
RS.Open SQL_2, MyCon, adOpenDynamic 'åber sql'en
MyCon.Close

End Sub
Avatar billede Webnoob Juniormester
14. november 2017 - 22:00 #8
Hej Komputerdk, beklager jeg har været så længe væk. I det du skriver skal man have brugernavn og kodeord i filen i klar tekst og det er jeg ikke så vild med og slet ikke når jeg bruger Windows authentication.
Der må være en anden måde hvor på det er muligt at åbne en database i Excel og sende ændringer fra Excel til databasen.
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
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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