Wolverin Skrevet 15. februar 2006 Del Skrevet 15. februar 2006 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
Wolverin Skrevet 16. februar 2006 Forfatter Del Skrevet 16. februar 2006 (endret) 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 16. februar 2006 av Wolverin Lenke til kommentar
Wolverin Skrevet 17. februar 2006 Forfatter Del Skrevet 17. februar 2006 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
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å