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.
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
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..
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?
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.
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?
komputerdk Mester
20. juli 2017 - 22:09 #6
Når jeg kommer til en PC kigger jeg på det.
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
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.
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

Opret Preview

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





Premium
Test: Huaweis Matebook X er særlig laptop med en svaghed, som du skal være opmærksom på
Huawei beviser endnu en gang, at de sagtens kan mingle sig med de bedste pc-producenter. Men alligevel skyder selskabet lidt ved siden af, med sin nyeste maskine.
Computerworld
Bitcoinen nåede lige at kulminere igen – men så kom krakket
Der blev sat en ny rekord for bitcoinens værdi i år – men godt 24 timer efter blev der høvlet næsten 20.000 kroner af den.
CIO
Podcast: Her er seks gode råd om ledelse og digitalisering fra danske top-CIO'er
The Digital Edge: Vi har talt med 17 af Danmarks dygtigste digitale ledere - og samlet deres seks bedste råd om digitalisering og ledelse. Få alle rådene på 26 minutter i denne episode af podcasten The Digital Edge.
Job & Karriere
Se Waoos forklaring: Derfor har selskabet fyret topchef Jørgen Stensgaard med omgående virkning
Waaos bestyrelse opsiger fiberselskabets topchef, Jørgen Stensgaard, der fratræder med omgående virkning. Se hele forklaringen fra Waao her.
White paper
Sådan øger du medarbejdertilfredshed og produktivitet
En af de mest effektive måder at øge medarbejdernes produktivitet og tilfredshed med arbejdspladsen er ved at give frit valg mellem Windows eller Mac, når der skal vælges arbejdscomputer. Samtidig mindskes presset på supporten, mens sikkerhedsniveauet højnes. Med en client-as-a-service aftale kan du lade medarbejderne selv træffe valget, men uden at uden at det behøver at være udfordrende eller ressourcekrævende for virksomheden. Eksempelvis kan du lade partneren håndtere alt fra finansiering, leverance, klargøring og implementering til support og lifecycle-management. Læs mere i denne hvidbog.