28. maj 2007 - 18:28Der er
15 kommentarer og 1 løsning
sql til vba
Hej
jeg sidder med en database hvor jeg ønsker at flytte mine forespørgsler over i VBA, men det driller. Følgende SQL virker fint i en forespørgsel, men hvordan skal det se ud for at virke i VBA. Funktionen skal trække to vandaflæsninger fra hinanden på baggrund af vandaflæsningen fra foregående og nyeste aflæsning.
Forskel: [T].[Vand]-(SELECT T2.[Vand] FROM Tabel T2 WHERE T2.Dato = DateAdd("d",-1,T.Dato))
'Definer en objektvariabel som recordsæt... dim rs as Recordset
Definer recordset variablen til at indeholde et åbent recordsæt (rækkerne i en forespørgsel)... set rs = currentdb.openrecordset("SELECT [T].[Vand]-(SELECT T2.[Vand] FROM Tabel T2 WHERE T2.Dato = DateAdd('d',-1,T.Dato)) AS Forskel FROM T WHERE T.Id=33")
'Tildel værdien fra forespørgslen til en VB variabel.. Forskel = rs.Fields("Forskel").Value 'Kan evt. forkortes til rs("Forskel")
'Luk forespørgslen... rs.close
Værdien der returneres vil være taget fra den første (og måske eneste?) række i recordsættet.
Bare for at være helt på det rene. :-) Når du siger VBA, mener du så i virkeligheden VBScript (som i ASP webprogrammering), sådan som ffsoft lægger op til i dennes svar? Eller er det stadig ren Access VBA, som jeg har antaget?
Forudsætninger: Det er en ren Access løsning Tabellen hedder tblForbrug og indeholder felterne Vandmaaler og AflaesningsDato På formularen er der et felt der hedder txtForbrug
Sub txtForbrug_AfterUpdate() Dim conn As ADODB.Connection Dim rst As ADODB.Recordset Dim strSQL As String Dim sngForbrug As Single
Set conn = CurrentProject.Connection Set rst = New ADODB.Recordset
strSQL = "SELECT Vandmaaler FROM tblForbrug WHERE AflaesningsDato = DateAdd('d', -1, Date()) ORDER BY tblForbrug.AflaesningsDato DESC;" Debug.Print strSQL rst.Open strSQL, conn sngForbrug = rst("Vandmaaler") rst.Close Set rst = Nothing conn.Close Set conn = Nothing
MsgBox "Du har brugt: " & Me.txtForbrug - sngForbrug
End Sub
Det er ikke en fejlsikker løsning, hvis ikke brugerne indtaster hver dag vil det gå galt. Den indtastede værdi skal vel gemmes i databasen som denne dags forbrug.
Tak for dit indlæg, jeg prøver det senere det ser lovende ud, men kan det godt passe, at udtrykket ikke trækker to vandmaaler værdier fra hinanden? Det skal trække dagens "vandmaaler værdi" fra den foregående dags "vandmaaler værdi" og returnere den til et felt i tabellen som hedder Forbrug....
Du må først lige svare på det du bliver spurgt om. kjulius og jeg har begge stillet dig spørgsmål og du kan ikke forvente hjælp, hvis du ikke selv vil hjælpe til.
ok, ang. kjulius, så drejer det sig om en ren løsning til Access, jeg vil gerne helt udgå forespørsler og udelukkende køre det via VBA, så der er ingen forespørsler at relatere til....
tak for det fornemme svar, meget brugbart! jeg har lige kort tjekket databasen ud og det ser ud til at kunne præcist hvad jeg ønsker, jeg får nok først tid til at kigge nærmere på det i weekenden, så kan det godt være der dukker et spørgsmål eller to op, men tak, har du fået dine point?
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.