amundsf Skrevet 3. november 2011 Del Skrevet 3. november 2011 Hei! Jeg benytter adodb en god del for å hente ut verdier fra SQL til excel. Noe slikt: Public Const userId As String = "sa" Public Const dbUser As String = "dbo" Public Const db As String = "Databasenavn" Public Const password As String = "Passord" Public Const server As String = "amundpc\sql08" Private Sub GetSystemSettings() Dim cnn As New ADODB.Connection Dim rst As New ADODB.Recordset Dim conStr As String Dim strSQL As String conStr = "Provider=SQLOLEDB.1;" & _ "Initial Catalog=" & db & ";" & _ "Data Source=" & server & ";" & _ "User ID=" & userId & ";" & _ "Password=" & password & ";" 'Open Connection cnn.Open conStr strSQL = "SELECT FileFormatID FROM " & dbUser & ".SystemSettings WHERE ID = 1" rst.Open strSQL, cnn ' Get values from Query sqlFileFormatID = rst("FileFormatID") rst.Close cnn.Close Set rst = Nothing Set cnn = Nothing End Sub Dette funker jækli bra og jeg bruker denne typen i mange varianter. Benytter noen where, join på tabeller, grupperer litt osv. Men det som er utfordringen nå er at jeg skal skrive verdier tilbake. Altså vel benytte SQL-statementet UPDATE. Så vidt jeg har forstått skal dette være fullt mulig, men at det gjøres på en litt annen måte. Noen som har et lite enkelt eksempel som jeg kan benytte som utgangspunkt? Derfra skal jeg alltids klare meg NB! Ikke aktuelt med ODBC o.l. Det blir for fort for mye søl. Vil ha alt inne i koden. PS! Litt for trøtt til å gjennomføre effektiv testing / googling på dette nå, så derfor prøver jeg på denne posten... På forhånd takk! - Amund Lenke til kommentar
GeirGrusom Skrevet 3. november 2011 Del Skrevet 3. november 2011 (endret) Dim cmd = cnn.CreateCommand() cmd.Command = "UPDATE MinTabell SET MittFelt = MinVerdi, MittAndreFelt = MinAndreVerdi" cmd.ExecuteNonQuery() Det er forøvrig poengløst å sette et objekt lik Nothing helt i slutten av koden, ettersom disse allikevel faller ut av scope vil objektet bli ansett som ute av bruk av grabage collectoren. Jeg har ikke peiling på hvorfor det var vanlig å gjøre dette i VBScript. Edit: så først nå at det var Visual Basic for Applications Men SQL-en skal ihvertfall være det samme. Endret 3. november 2011 av GeirGrusom Lenke til kommentar
Harald Staff Skrevet 3. november 2011 Del Skrevet 3. november 2011 Hei Du setter inn et par optional parametre, cursor og lock type, som du trenger for å skrive: strSQL = "SELECT FileFormatID FROM " & dbUser & ".SystemSettings WHERE ID = 1" rst.Open strSQL, cnn, adOpenKeyset, adLockOptimistic If rst.EOF = False Then rst("FileFormatID") = 14 rst.Update DoEvents End If rst.Close 'osv osv ... på samme måte bør du definere når du bare leser; forwardonly for hastighetens skyld der du ikke trenger å spole frem og tilbake, og readonly for å garantere at brukeren ikke får skrevet til basen via usikre tekstfelter: rst.Open strSQL, cnn, adOpenForwardOnly, adLockReadOnly HTH. Beste hilsen Harald Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå