Gå til innhold

Anbefalte innlegg

Jeg sitter med en hendelse base, som jeg har laget et View som kobler sammen en god del tabeller og behandler dem slik at jeg får ut et ønsket resultat.

 

Dette View er laget i Oracle, og heter hendelse_beh

Denne inneholder:

DAG DATE

ID_HOUR DATE

UNIT_NR NUMBER(9)

ANTALL NUMBER

 

Meningen her er at vilkårene i spørringen skal være at:

Dag er mellom Celle B2, og B3 i Excel arket Innstilling.

 

Dette skal lages slik at det en knapp med en macro som kjører selve spørringen, og Celle B2 og B3 er det eneste brukeren trenger å bekymre seg over og endre verdier i.

 

I access ville man hatt verdiene i et skjema, og da kunne referert til skjema som følger:

[forms]![hendelser]![fra_dag]

 

Hvordan kan jeg i Query si at vilkåret står i Celle B2 og Celle B3 i arket Innstillinger??

Lenke til kommentar
Videoannonse
Annonse

Jeg fant ut at en macro var løsningen.

 

Denne fungerer, men har ikke korrekte inndata jeg tenkte å bruke

Sheets("inst").Select
   inn_data = Cells(1, 2)
   fradate = Cells(2, 2)
   fradate = CDate(fradate)
   tildate = Cells(1, 4)
   Sheets("resultat").Select
   With ActiveSheet.QueryTables.Add(Connection:=Array(Array( _
       "ODBC;DBQ=C:\test.mdb;DefaultDir=C:\;Driver={Microsoft Access Driver (*.mdb)};DriverId=25;FIL=MS Access;MaxBufferSize=2048;MaxScanRow" _
       ), Array("s=8;PageTimeout=5;SafeTransactions=0;Threads=3;UserCommitSync=Yes;")) _
       , Destination:=Range("A1"))
       .CommandText = Array( _
       "SELECT hendelse_beh.verdi, hendelse_beh.tekst_kode, hendelse_beh.dag, hendelse_beh.tildato" & Chr(13) & "" & Chr(10) & "FROM `C:\test`.hendelse_beh hendelse_beh" & Chr(13) & "" & Chr(10) & "WHERE (hendelse_beh.verdi = " & inn_data & ")" _
       )
       .Name = "Spørring fra hendelser"
       .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

 

Inndataene skal jo være unit_nr som jeg har fått med over, men også dato på dag som skal være mellom to verdier skrevet i ark "inst" i excel.

 

Som dere ser så er det access base jeg tester mot nå, for da kan jeg teste det hjemme på min lap top. Selve oppkoblingen mot oracle og access ordner jeg enkelt med å bytte ut ODBC pekeren i macroen.

 

Jeg forsøkte meg med følgende

 

WHERE (hendelse_beh.dag = " & fradate & ")"

Det fungerer ikke.

 

"Syntaks feil i SQL" får jeg til svar.

 

Føler jeg er veldig nær en løsning her, men det stopper på målstreken.

Endret av Wolverin
Lenke til kommentar

Ny dag, nye muligheter og løsninger.

Jeg fant ut av det til slutt.

Tenkte å poste løsningen her, så kan andre nyte godt av det om de trenger noe liknende. :)

 

Macro er uendret i starten og oppkoblingen mot ODBC er uendret.

Forskjellen blir bare i where segmentet i SQL settningen.

 

Excel krever at SQL settningen skrives som en sammensatt tekst streng, hvor man bygger den opp lag på lag.

For å slå sammen teksten "Select noe, noe_mer", med "from tabellen", så brukes & tegnet som limet.

Her må man skrive "select noe, noe_mer" & " " & "from tabellen"

Da blir teksten egentlig til "select noe, noe_mer from tabellen".

 

Hvis man da har en variabel, så må man flette denne inn i teksten med å benytte seg av disse.

 

ts i excel macro, altså VBA kode, betyr timeserie etter det jeg har klart å lest meg til.

Skal man sammenlikne et dato/klokkeslett felt i en tabell i en database med noe man finner i en celle i Excel, så må ts stå forran verdien, ellers forstår ikke systemet at det er en dato/klokkeslett verdi man forsøker å skrive inn, og da blir det missmatch i data typer og SQL settningen kræsjer.

 

Koden min ble derfor som følger

& "WHERE (dag={ts '" & fradate & "'})

 

Her ser dere at jeg har brukt både & for å slå sammen teksten og min variabel, har jeg brukt ' som indikerer at det er en tekst og ikke et tall som verdien er, og jeg har brukt ts for å fortelle at teksten er en dato/klokkeslett verdi.

Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...