26. maj 2006 - 15:09
Der er
19 kommentarer og 1 løsning
datoproblem, når data hentes fra access
Er der nogen der kan hjælpe med denne kode. Hvis jeg fravælger valg af dato fungerer den fint. jeg får fejlmeddelelsen, SQL Syntaxfejl Sub Makro3() ' ' Makro3 Makro ' ' Dim Ws As Object 'aktuel arknavn Set Ws = Sheets("Ark3") 'slet nuværende indhold Ws.Activate Range("C2:D800").Activate Selection.CurrentRegion.Select Selection.ClearContents Range("A1").Select Dim tmp1 As Date Dim tmp2 As Date With ActiveSheet.QueryTables.Add(Connection:=Array(Array( _ "ODBC;DSN=MS Access-database;DBQ=C:\Programmer\Videokartotek\Data\Video_be.mdb;DefaultDir=C:\Programmer\Videokartotek\Data;DriverId=2" _ ), Array("5;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;")), Destination:= _ Range("C2")) tmp = InputBox("Årstal") tmp1 = InputBox("Fra dato") tmp2 = InputBox("Til dato") .CommandText = Array( _ "SELECT Optagelse.Titel, Optagelse.Årstal, Optagelse.Dato, Optagelse.Spilletid" & Chr(13) & "" & Chr(10) & "FROM `C:\Programmer\Videokartotek\Data\Video_be`.Optagelse Optagelse" & Chr(13) & "" & Chr(10) & "WHERE (Optagelse.Årstal='" & tmp & "') AND (Optagelse.Dato" _ , ">= {ts '" & tmp1 & "'} And Optagelse.Dato<= {ts '" & tmp2 & "'})") .Name = "Forespørgsel fra MS Access-database" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SavePassword = True .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .PreserveColumnInfo = True .Refresh BackgroundQuery:=False End With End Sub
Annonceindlæg fra Pax8
I ren Access skal datoer ikke være omslutet af '' men af havelåger ##, men er langt fra sikker på det fungerer i din kode.
prøvede med havelåger på forskellige placeringer, virkede ikke.
Hmm - Så har jeg intet bud, blot afvis mit svar.
Det jeg har brug for er blot at få data sorteret efter dato, som vælges når kode køres, der var måske en smartere måde at gøre det på?
Jeg har ikke den store forstand på dette, men kan du ikke blot importere en forespørgsel, der i Access er sorteret efter dato, og undlade at importere datofeltet?
Mugs; det var et forsøg værd, jeg prøver mig lidt frem, og håber at kommer med den gyldne løsning i mellemtiden.
Hvad laver de {ts i din kode? Prøv lige at fjerne dem samt tuborgklammerne {}.
Et andet forslag er som mugs skriver at lave forespørgslen i access. Bag den visuelle førespørgel ligger der noget SQL. Kopier denne SQL sætning over i din kode.
denne kode liggeri excel, og er en tilrettet makro som er lavet med makrooptager, SQL'en fra access fungerer ikke i denne kode. SQL fra access ser sådan ud. SELECT Optagelse.Titel, Optagelse.Årstal, Optagelse.Dato, Optagelse.Spilletid FROM Optagelse WHERE (((Optagelse.Årstal)=[årstal]) AND ((Optagelse.Dato)>=[fra]) AND ((Optagelse.Spilletid)<=[til]));
Prøv det her Sub Makro3() Dim Ws As Object Dim sql As String Dim tmp 'aktuel arknavn Set Ws = Sheets("Ark3") 'slet nuværende indhold Ws.Activate Range("C2:D800").Activate Selection.CurrentRegion.Select Selection.ClearContents Range("A1").Select Dim tmp1 As Date Dim tmp2 As Date With ActiveSheet.QueryTables.Add(Connection:=Array(Array( _ "ODBC;DSN=MS Access-database;DBQ=C:\Programmer\Videokartotek\Data\Video_be.mdb;DefaultDir=C:\Programmer\Videokartotek\Data;DriverId=2" _ ), Array("5;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;")), Destination:= _ Range("C2")) tmp = InputBox("Årstal") tmp1 = InputBox("Fra dato") tmp2 = InputBox("Til dato") sql = "SELECT Optagelse.Titel, Optagelse.Årstal, Optagelse.Dato, Optagelse.Spilletid" sql = sql & " FROM `C:\Programmer\Videokartotek\Data\Video_be`.Optagelse" sql = sql & " WHERE (((Optagelse.Årstal)=" & tmp & ") AND ((Optagelse.Dato)>=" & tmp1 & ") AND ((Optagelse.Spilletid)<=" & tmp2 & "))" .CommandText = Array(sql) .Name = "Forespørgsel fra MS Access-database" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SavePassword = True .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .PreserveColumnInfo = True .Refresh BackgroundQuery:=False End With End Sub
Får fejlmeddelelse Generel ODBC-felj
Bemærk at der kan være en fejl der hvr du i øverste eksempel bruger optagelse.dato to gange og i nederste bruger optagelse.spilletid i stedet.
Virker. droppede årstal, jeg havde jo dato. Tak for hjælpen. koden ser nu sådan ud. Sub Makro2() Dim Ws As Object Dim sql As String 'aktuel arknavn Set Ws = Sheets("Ark3") 'slet nuværende indhold Ws.Activate Range("C2:D800").Activate Selection.CurrentRegion.Select Selection.ClearContents Range("A1").Select Dim tmp1 As Date Dim tmp2 As Date With ActiveSheet.QueryTables.Add(Connection:=Array(Array( _ "ODBC;DSN=MS Access-database;DBQ=C:\Programmer\Videokartotek\Data\Video_be.mdb;DefaultDir=C:\Programmer\Videokartotek\Data;DriverId=2" _ ), Array("5;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;")), Destination:= _ Range("C2")) tmp1 = InputBox("Fra dato") tmp2 = InputBox("Til dato") sql = "SELECT Optagelse.Titel, Optagelse.Årstal, Optagelse.Dato, Optagelse.Spilletid" sql = sql & " FROM `C:\Programmer\Videokartotek\Data\Video_be`.Optagelse" sql = sql & " WHERE (((Optagelse.Dato)>=" & tmp1 & ") AND ((Optagelse.Dato)<=" & tmp2 & "))" .CommandText = Array(sql) .Name = "Forespørgsel fra MS Access-database" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SavePassword = True .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .PreserveColumnInfo = True .Refresh BackgroundQuery:=False End With End Sub
hvis det virker gør jeg gerne :-)
Jeg var måske lidt hurtig da jeg accepterede dit svar. jeg fåk godt nok overskrifterne på tabellerne ind i regnearket (det fik jeg ikke før). Men ligemeget hvilken dato jeg indtaster får jeg ingen data.
prøv lige at ændre sql'en til dette sql = "SELECT Optagelse.Titel, Optagelse.Årstal, Optagelse.Dato, Optagelse.Spilletid" sql = sql & " FROM `C:\Programmer\Videokartotek\Data\Video_be`.Optagelse" sql = sql & " WHERE (((Optagelse.Dato)>=#" & tmp1 & "#) AND ((Optagelse.Dato)<=#" & tmp2 & "#))"
bak: Det var det der skulle til. Tak skal du have.
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig