07. september 2007 - 11:38Der 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?
Teknologi, AI og forretning er i centrum på Computerworlds Cloud og AI Festival i København d. 18. og 19. september. Se hele programmet for den store konference om strategisk brug af Cloud og AI på: www.cloud-festival.dk
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
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.
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
"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'})" _ )
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'})"
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
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
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.
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
Synes godt om
Ny brugerNybegynder
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.