Avatar billede madiedk Nybegynder
07. september 2007 - 11:38 Der er 25 kommentarer og
1 løsning

database forespørgsel

Hej

jeg henter data fra en database i excel, mit problem er at jeg gerne vil have at databasen skal have indput fra en celle i excel. I vba har jeg gemt celle a39 i en string variabel der hedder af1.

når jeg så i database queryen ændre '3001' til af1 så henter den ikke i databasen.

hvis jeg laver en "msgbox af1" så skriver den 3001 som er den string jeg har gemt i variablen.

i kan se eksemplet nedenfor i den første virker den, men ikke i den anden. er det noget med variabeltypen eller?

PORTEFOELJE='3001'

PORTEFOELJE=af1
Avatar billede gider_ikke_mere Nybegynder
07. september 2007 - 12:23 #1
Er cellen AF1?
Range("AF1").Value?
Avatar billede madiedk Nybegynder
07. september 2007 - 12:29 #2
nej af1 er bare navnet på min variabel hvor jeg har gemt værdien 3001. mit problem er at hvis jeg skriver PORTEFOELJE='3001' i vba koden så virker det, men skriver jeg PORTEFOELJE=af1 virker det ikke. selvom af1 variablen indeholder værdien 3001
Avatar billede gider_ikke_mere Nybegynder
07. september 2007 - 12:31 #3
Hvilket sprog taler vi om?
Avatar billede madiedk Nybegynder
07. september 2007 - 12:34 #4
det excel vba altså visual basic
Avatar billede gider_ikke_mere Nybegynder
07. september 2007 - 12:39 #5
Har du dimmet din variabel først?

Dim af1 as Long
af1 = "3001"

PORTEFOELJE = af1
Avatar billede madiedk Nybegynder
07. september 2007 - 12:45 #6
ja har både prøver med as string og as long
Avatar billede madiedk Nybegynder
07. september 2007 - 12:58 #7
hvis jeg skriver PORTEFOELJE = 3001 virker det også, så jeg forstår ikke helt hvorfor det ikke virker med PORTEFOELJE = af1, som sagt har jeg testet med en msgbox af1 og set at den gemmer 3001 i variablen.
Avatar billede gider_ikke_mere Nybegynder
07. september 2007 - 12:59 #8
Nu ved jeg jo ikke hvordan din query ser ud, men du har vel adskilt variablen fra resten af kaldet?

("Noget" & af1 & "noget andet")

Ellers smid noget kode. Jeg er her først igen i aften, men der er helt sikkert andre der kan hjælpe.
Avatar billede madiedk Nybegynder
07. september 2007 - 15:29 #9
variablen har jeg defineret i starten af proceduren og så i selve queryen har jeg bare sat af1 ind i stedet for 3001
Avatar billede gider_ikke_mere Nybegynder
07. september 2007 - 19:10 #10
Du er nok nødt til at vise noget kode.
Avatar billede madiedk Nybegynder
07. september 2007 - 20:40 #11
Sub Makro2()
'
' Makro2 Makro
' Makro indspillet 07-09-2007 af rfo
'
Dim af1 As String
Dim af2 As String
Dim af3 As String
Dim af4 As String
Dim af5 As String
Dim af6 As String
Dim af7 As String
Dim af8 As String
Dim af9 As String


af1 = Range("a33")
af2 = Range("A34")
af3 = Range("A35")
af4 = Range("A36")
af5 = Range("A37")
af6 = Range("A38")
af7 = Range("A39")
af8 = Range("A40")
af9 = Range("A41")

MsgBox af1
    ActiveWindow.SmallScroll Down:=0
    With ActiveSheet.QueryTables.Add(Connection:= _
        "ODBC;DSN=INVINV;UID=odbc;;SERVER=INVNPA;", Destination:=Range("A1"))
        .CommandText = Array( _
        "SELECT PORTEFOELJEHISTORIK.PORTEFOELJE, PORTEFOELJEHISTORIK.DATO, PORTEFOELJEHISTORIK.TIDSPUNKT, PORTEFOELJEHISTORIK.INDRE_VAERDI, PORTEFOELJEHISTORIK.FORMUE, PORTEFOELJEHISTORIK.CIRKULERENDE, PORTEFO" _
        , _
        "ELJEHISTORIK.TVANG, PORTEFOELJEHISTORIK.EX_INDRE_VAERDI, PORTEFOELJEHISTORIK.REG_DATO, PORTEFOELJEHISTORIK.MOD_DATO, PORTEFOELJEHISTORIK.REG_USER, PORTEFOELJEHISTORIK.MOD_USER, PORTEFOELJEHISTORIK.AKT" _
        , _
        "UEL_SKAT, PORTEFOELJEHISTORIK.AKK_UDSKUDT_SKAT, PORTEFOELJEHISTORIK.EMISSION_KURS, PORTEFOELJEHISTORIK.INDLOES_KURS" & Chr(13) & "" & Chr(10) & "FROM INV.PORTEFOELJEHISTORIK PORTEFOELJEHISTORIK" & Chr(13) & "" & Chr(10) & "WHERE (PORTEFOELJEHISTORIK.PORTEF" _
        , _
        "OELJE=10001) AND (PORTEFOELJEHISTORIK.DATO={ts '2007-08-06 00:00:00'}) OR (PORTEFOELJEHISTORIK.PORTEFOELJE='10002') AND (PORTEFOELJEHISTORIK.DATO={ts '2007-08-06 00:00:00'}) OR (PORTEFOELJEHISTORIK." _
        , _
        "PORTEFOELJE=10001) AND (PORTEFOELJEHISTORIK.DATO={ts '2007-08-07 00:00:00'}) OR (PORTEFOELJEHISTORIK.PORTEFOELJE='10002') AND (PORTEFOELJEHISTORIK.DATO={ts '2007-08-07 00:00:00'})" _
        )
        .Name = "Forespørgsel fra INVINV_1"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .Refresh BackgroundQuery:=False
    End With
End Sub
Avatar billede gider_ikke_mere Nybegynder
07. september 2007 - 21:22 #12
Jeg kan ikke lige se hvor dine variabler bliver brugt.
Avatar billede madiedk Nybegynder
07. september 2007 - 21:26 #13
undskyld, det er den originale. det er der hvor der står 10001 der skal stå af1
Avatar billede gider_ikke_mere Nybegynder
07. september 2007 - 21:42 #14
"PORTEFOELJE=10001) AND (PORTEFOELJEHISTORIK.DATO={ts '2007-08-07 00:00:00'}) OR (PORTEFOELJEHISTORIK.PORTEFOELJE='10002') AND (PORTEFOELJEHISTORIK.DATO={ts '2007-08-07 00:00:00'})" _
        )

Prøv med

"PORTEFOELJE=" & ad1 & ") AND (PORTEFOELJEHISTORIK.DATO={ts '2007-08-07 00:00:00'}) OR (PORTEFOELJEHISTORIK.PORTEFOELJE='10002') AND (PORTEFOELJEHISTORIK.DATO={ts '2007-08-07 00:00:00'})" _
        )
Avatar billede madiedk Nybegynder
07. september 2007 - 22:00 #15
har desværre førsdt mulighed på mandag, men tak for forslaget, jeg vender tilbage
Avatar billede kjulius Novice
07. september 2007 - 23:34 #16
Jeg under mig over, at feltet portefoelje er hhv. numerisk og alfanumeris i din WHERE sætning. Der er da vist én af delene, der kan være rigtigt...

Hvis det er alfanumerisk (også kaldet et character felt), skal du bruge

"PORTEFOELJE='" & ad1 & "') AND (PORTEFOELJEHISTORIK.DATO={ts '2007-08-07 00:00:00'}) OR (PORTEFOELJEHISTORIK.PORTEFOELJE='10002') AND (PORTEFOELJEHISTORIK.DATO={ts '2007-08-07 00:00:00'})"

i stedet. Hvis det er numerisk, er akyhnes forslag korrekt.

--------

Jeg undrer mig forresten også over, at du bruger et array til at opbygge din streng. Er der nogen speciel grund til det?
Jeg ville jo bare have skrevet det som en lang streng (og brugt et kortere alias for tabelreferencen, jeg bliver helt svimmel af at se det lange tabelnavn som prefix på alle felterne):

.CommandText = "SELECT PH.PORTEFOELJE, PH.DATO, PH.TIDSPUNKT, PH.INDRE_VAERDI, PH.FORMUE, PH.CIRKULERENDE, PH.TVANG, PH.EX_INDRE_VAERDI, PH.REG_DATO, PH.MOD_DATO, PH.REG_USER, PH.MOD_USER, PH.AKTUEL_SKAT, PH.AKK_UDSKUDT_SKAT, PH.EMISSION_KURS, PH.INDLOES_KURS & vbCrLf & _
"FROM INV.PORTEFOELJEHISTORIK PH" & vbCrLf & _
"WHERE (PH.PORTEFOELJE=10001) AND (PH.DATO={ts '2007-08-06 00:00:00'})" & vbCrLf & _
"  OR (PH.PORTEFOELJE='10002') AND (PH.DATO={ts '2007-08-06 00:00:00'})" & vbCrLf & _
"  OR (PH.PORTEFOELJE=10001) AND (PH.DATO={ts '2007-08-07 00:00:00'})" & vbCrLf & _
"  OR (PH.PORTEFOELJE='10002') AND (PH.DATO={ts '2007-08-07 00:00:00'})"
Avatar billede madiedk Nybegynder
07. september 2007 - 23:51 #17
jeg har bygget forespørgselen op via en makrooptagelse i excel. så har ikke kigget så meget på opbygningen af forspørgslen endnu, men mere koncentreret mig omkring hvorfor den ikke ville virke når jeg skrev af1 istedet for 3001. men jeg giver dig ret kjulius, din opbygning ser mere fornuftig og overskuelig ud i mine øjne. jeg vender tilbage mandag når jeg har afprøvet jeres forslag
Avatar billede madiedk Nybegynder
08. september 2007 - 15:53 #18
jeg har prøvet det nu og det virker når jeg skriver '" & ad1 & "' der er selvfølgelig point for det. men jeg vil lige høre om i også kan hjælpe mig med samme problem bare med datoer. originalt ser datoen sådan ud:

(Fakturaer.Ordredato={ts '1996-11-29 00:00:00'})

hvordan kan jeg putte en variabel ind i den. jeg har gemt "29-11-2007" i variablen pe1 som er gemt som en string.

har prøvet (Fakturaer.Ordredato={ts '" & pe1 & "'}) men det virker ikke
Avatar billede madiedk Nybegynder
08. september 2007 - 15:56 #19
har selvfølgelig også prøvet at stille datoerne op i rigtig rækkefølgelig. kan det have noget med at der er tid på i den originale?
Avatar billede gider_ikke_mere Nybegynder
08. september 2007 - 16:14 #20
Jeg har aldrig leget med database querys, men prøv at dimme pe1 til en date.
Avatar billede gider_ikke_mere Nybegynder
08. september 2007 - 16:17 #21
Eller prøv blot med (Fakturaer.Ordredato={ts " & pe1 & "})
Avatar billede madiedk Nybegynder
08. september 2007 - 16:28 #22
det virker intet af det, har prøvet det hele
Avatar billede gider_ikke_mere Nybegynder
08. september 2007 - 18:02 #23
Så kan jeg ikke umiddelbart hjælpe.
Avatar billede kjulius Novice
08. september 2007 - 18:54 #24
Hvilken database er det du prøver at hente data fra?
Avatar billede kjulius Novice
08. september 2007 - 23:02 #25
Umiddelbart ligner din SQL noget som kunne se ud som DB2 timestamp.

(Fakturaer.Ordredato={ts '1996-11-29 00:00:00'})

Den værdi du har i din variabel indeholder tilsyneladende kun datoen, så du kunne jo prøve at skrive

"(DATE(Fakturaer.Ordredato)={d'" & pe1 & "'})"

efter min erfaring er det ikke nødvendigt at bruge {ts''}, osv. - så måske kan du bare skrive
"(DATE(Fakturaer.Ordredato)='" & pe1 & "')"

eller måske
"(DATE(Fakturaer.Ordredato)=DATE('" & pe1 & "'))"

Måske skulle du også kigge lidt på formatet på din dato. Din variabel indeholder jo datoen i dansk format, mens den værdi din makro bruger er ISO formatet, altså år-måned-dag.
Avatar billede madiedk Nybegynder
09. september 2007 - 12:19 #26
jeg har fået det til at virke, ved at skrive

pe = ("1996-11-29 00:00:00")


og


(Fakturaer.Ordredato={ts '" & pe & "'})"


så  nu skal jeg bare have gjort så man kan skrive datoen som dd-mm-åååå i excel og så at den bliver lavet om til åååå-mm-dd i pe variablen. jeg må prøve at lege med det
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
Computerworld tilbyder specialiserede kurser i database-management

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



Seneste spørgsmål Seneste aktivitet
I går 23:37 Poe strøm Af lurup i LAN/WAN
I går 14:46 GIF-EDITOR Af snestrup2000 i Billedbehandling
I går 14:03 Logge ind Af Bob i PC
I går 12:12 2 skærme - 1 virker - den anden siger No signal Af eksmojo i Skærme
I går 10:33 openvpn projekt Af dcedata1977 i Windows