Avatar billede rosco Novice
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
Avatar billede mugs Novice
26. maj 2006 - 15:46 #1
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.
Avatar billede rosco Novice
26. maj 2006 - 15:56 #2
prøvede med havelåger på forskellige placeringer, virkede ikke.
Avatar billede mugs Novice
26. maj 2006 - 16:02 #3
Hmm - Så har jeg intet bud, blot afvis mit svar.
Avatar billede rosco Novice
26. maj 2006 - 16:20 #4
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å?
Avatar billede mugs Novice
26. maj 2006 - 16:38 #5
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?
Avatar billede rosco Novice
26. maj 2006 - 16:43 #6
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.
Avatar billede bak Forsker
27. maj 2006 - 11:21 #7
Hvad laver de {ts  i din kode?
Prøv lige at fjerne dem samt tuborgklammerne {}.
Avatar billede bak Forsker
27. maj 2006 - 11:24 #8
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.
Avatar billede rosco Novice
28. maj 2006 - 12:13 #9
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]));
Avatar billede bak Forsker
28. maj 2006 - 12:29 #10
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
Avatar billede rosco Novice
28. maj 2006 - 12:32 #11
Får fejlmeddelelse
Generel ODBC-felj
Avatar billede bak Forsker
28. maj 2006 - 12:33 #12
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.
Avatar billede rosco Novice
28. maj 2006 - 12:38 #13
Prøver igen
Avatar billede rosco Novice
28. maj 2006 - 12:48 #14
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
Avatar billede rosco Novice
28. maj 2006 - 12:49 #15
bak; lægger du et svar?
Avatar billede bak Forsker
28. maj 2006 - 12:53 #16
hvis det virker gør jeg gerne :-)
Avatar billede rosco Novice
28. maj 2006 - 15:48 #17
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.
Avatar billede bak Forsker
28. maj 2006 - 19:20 #18
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 & "#))"
Avatar billede rosco Novice
28. maj 2006 - 21:28 #19
bak:
Det var det der skulle til.
Tak skal du have.
Avatar billede bak Forsker
28. maj 2006 - 21:46 #20
velbekomme
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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