Avatar billede hundevennen Nybegynder
28. november 2007 - 14:28 Der er 37 kommentarer og
1 løsning

SQLsætning med dynamisk valg

jeg har en database med felterne dato og uge og vil gerne kunne udtrække en liste ud fra hvad der vælges i en form.
Jeg bruger flg:
aarstal = request.form("aarstal")
maanedsnr = request.form("maanedsnr")
uge = request.form("uge")

strText =     "SELECT * FROM t_kalender where year(dato) = "& aarstal &" and month(dato) = " & maanedsnr & "  and uge= "& uge &" order by dato asc"

problemet er, at man skal kunne vælge f.eks aarstal og uge eller aarstal og maanedsnr, så uge er tom - eller aarstal og uge, så maanedsnr er tom??????
Avatar billede hundevennen Nybegynder
28. november 2007 - 14:29 #1
ka man flette en IF ind, så strText er ligeglad hvis der mangler en variabel
Avatar billede w13 Novice
28. november 2007 - 14:58 #2
Sagtens. strText er jo en helt normal tekststreng, som først bliver brugt som SQL, når du kører en Execute på den senere.

Du gør det vist sådan her:

strText="SELECT * FROM [t_kalender] WHERE "
i=0
If aarstal<>"" Then
  strText=strText&"year(dato)="&aarstal&" and "
  i=i+1
Else If maanedsnr<>"" Then
  strText=strText&"month(dato)="&maanedsnr&" "
  i=i+1
Else If uge<>"" Then
  If i>0 Then strText=strText&"and "
  strText=strText&"uge="&uge&" "
End If
strText=strText&"order by [dato] asc"
Avatar billede soerenlyn Nybegynder
28. november 2007 - 16:16 #3
Jeg forstår helt hvad du laver der.

Inde i "If aarstal<>"" Then" slutter du din string på and. Og lægger en til i.
Så er der nogle Else's der så derfor ikke bliver kørt hvis man går ind i den første .. og så tilføjer du bare "order by [....." ...

Så kommer der jo til at stå "SELECT ...... = "&aarstal&" and order by [dato] asc"

Det er da noget vrøvl ?
Avatar billede w13 Novice
28. november 2007 - 16:19 #4
Ja! Bestemt! :)

Sku' ikke ha' lavet Else If, men bare If:

strText="SELECT * FROM [t_kalender] WHERE "
i=0
If aarstal<>"" Then
  strText=strText&"year(dato)="&aarstal&" and "
  i=i+1
End If
If maanedsnr<>"" Then
  strText=strText&"month(dato)="&maanedsnr&" "
  i=i+1
End If
If uge<>"" Then
  If i>0 Then strText=strText&"and "
  strText=strText&"uge="&uge&" "
End If
strText=strText&"order by [dato] asc"
Avatar billede hundevennen Nybegynder
28. november 2007 - 16:59 #5
det ser spændende ud - afprøver imorgen - foreløbig tak
Avatar billede hundevennen Nybegynder
29. november 2007 - 08:32 #6
w13 - jeg har nu klippet din sætning direkte ind - og det gir jo fejl, da det er på en asp side. jeg har så fjernet linieskift og får stadig fejl lige efter WHERE skal der være expected end of statement?????
Avatar billede hundevennen Nybegynder
29. november 2007 - 08:37 #7
Hvorfor er der [] omkring tabellen og ved order by tabel?
Avatar billede hundevennen Nybegynder
29. november 2007 - 08:37 #8
Det er en accessbase jeg bruger
Avatar billede nielle Nybegynder
29. november 2007 - 08:43 #9
Prøv at udskrive den resulterende SQL sætning sådan at man kan se hvordan den kommer til at se ud.

[]-tegnene er ikke normalt nødvenige, men man bruger dem i tilfælde at at man har kommet til at bruge et ellers reserveret til en af tabel- eller kolonne navnene.
Avatar billede hundevennen Nybegynder
29. november 2007 - 10:04 #10
hvordan er det lige man udskriver sqlsætningen?
Avatar billede nielle Nybegynder
29. november 2007 - 10:08 #11
Response.Write "DEBUG: " & strText & "<br>"

Gør det lige før at du sender den vidre til databasen
Avatar billede hundevennen Nybegynder
29. november 2007 - 10:47 #12
nielle - den når slet ikke så langt og melder stadig fejl i sqlsætningen ligefør det første i=0 If aarstal................. expected end of statement??? - der skal jo nok sættes et ", men samme fejl kommer så lidt længere ude af sætningen og bliver bare ved ligemeget hvormange jeg sætter????
Avatar billede nielle Nybegynder
29. november 2007 - 10:48 #13
Må vi se noget mere kode?
Avatar billede hundevennen Nybegynder
29. november 2007 - 12:35 #14
der er jo en form.asp med felterne aarstal maanedsnr og uge som sendes videre til
søgesiden som som har dette:

aarstal = request.form("aarstal")
maanedsnr = request.form("maanedsnr")
uge = request.form("uge")





dim color

strText="SELECT * FROM [t_kalender] WHERE " i=0 If aarstal<>"" Then strText=strText&"year(dato)="&aarstal&" and " i=i+1 End If If maanedsnr<>"" Then strText=strText&"month(dato)="&maanedsnr&" " i=i+1 End If If uge<>"" Then If i>0 Then strText=strText&"and " strText=strText&"uge="&uge&" " End If strText=strText&"order by [dato] asc"

getdata strtext o.s.v.
Avatar billede w13 Novice
29. november 2007 - 14:16 #15
hundevennen>> Ja, det er en ASP-kode. Men du kan stadig ikke skrive det hele på en linje af den grund. Det skal være på flere linjer, som jeg foreslår. Der er så åbenbart en fejl et sted, men nu har jeg jo ikke set fejlmeddelelsen, så jeg ved ikke, hvad det er for en fejl.

Det er som sagt meningen, at det skal være på flere linjer. Der er en grund til, at din SQL-sætning hedder strSQL ("string SQL"). Det er jo en tekststreng. Og tekststrengen åbner og lukker vi, og vi har nogle if-sætninger, der køres, og hvis betingelserne i dem er sande, så tilføjer vi noget til strSQL. Så det må meget gerne være i flere linjer.

Jeg synes, du skal prøve at bruge min oprindelige kode, og skrive her, hvilken fejlmeddelelse, du får. Evt. kan du indsætte Nielle's debugning lige neden under min kode, for at se, hvordan den skriver den.
Avatar billede hundevennen Nybegynder
29. november 2007 - 14:35 #16
w13 ok - tester videre
Avatar billede hundevennen Nybegynder
30. november 2007 - 08:36 #17
Det virker næsten - når jeg i formen vælger aarstal og uge virker den ikke fordi
sqlsætningen kommer til at sådan ud:jeg har valgt 2007 og uge 10 i formen
SELECT * FROM [t-kalender] WHERE year(dato)=2007 and month(dato)= and uge = 10 order by......... den skal jo ikke skrive month(dato)= når der ikke er noget i formen????
Avatar billede hundevennen Nybegynder
30. november 2007 - 18:48 #18
year(dato)skal altid være valgt, men måned og uge skal kunne vælges
Avatar billede hundevennen Nybegynder
01. december 2007 - 09:19 #19
så egentlig ´skulle sætningen vel kunne være sådan her:
strText =    "SELECT * FROM t_kalender where year(dato) = "& aarstal &" and "
If maanedsnr<>"" Then
  strText=strText&"month(dato)="&maanedsnr&" "
  i=i+1
End If
If uge<>"" Then
  If i>0 Then strText=strText&"and "
  strText=strText&"uge="&uge&" "
End If
strText=strText&"order by [dato] asc"
??????????
Avatar billede w13 Novice
01. december 2007 - 12:31 #20
Kan du risikere, at ingen af dem er valgt, for så går det ikke at have til "and" sidst i:
strText = "SELECT * FROM t_kalender where year(dato) = "& aarstal &" and "
Fjern "and" derfra og ret månedsnr.-delen til:
If maanedsnr<>"" Then
  strText=strText&" and month(dato)="&maanedsnr&" "
  i=i+1
End If
Avatar billede hundevennen Nybegynder
01. december 2007 - 12:37 #21
w13 - det er en søgefunkton det bliver brugt til, så der vil altid være valgt mindst 2 og år er obligatorisk
Avatar billede w13 Novice
01. december 2007 - 12:45 #22
Så ser den korrekt ud.
Avatar billede hundevennen Nybegynder
04. december 2007 - 15:00 #23
w13 har nu testet og den sætter stadig måned ind selvom den ikke bliver valgt
HVis jeg i søgeformen vælger år 2007 og uge 25, får jeg stadig en sqlsætning der siger:
select * from t-kalender where year(dato) = 2007 and month= and uge = 25 order by dato asc.???
Avatar billede w13 Novice
04. december 2007 - 15:02 #24
If maanedsnr<>"" Then
bør nok være:
If maanedsnr<>"" Or maanedsnr=0 Then
Avatar billede hundevennen Nybegynder
04. december 2007 - 15:11 #25
der gir Type Mismatch: '[string: ""]'
Avatar billede hundevennen Nybegynder
04. december 2007 - 15:13 #26
du satte mig lige på sporet - det skal være
If maanedsnr = ""

du gav inspirationen så læg et svar
Avatar billede hundevennen Nybegynder
04. december 2007 - 17:55 #27
jeg blev afsporet - det virker ikke med = ""
Avatar billede w13 Novice
04. december 2007 - 18:10 #28
Har du en "then" også?
If maanedsnr = "" then
Avatar billede hundevennen Nybegynder
04. december 2007 - 19:27 #29
ja:
If maanedsnr<>"" Then
  strText=strText&"month(dato)="&maanedsnr&" "
  i=i+1
End If
If uge= "" Then
  If i>0 Then strText=strText&"and "
  strText=strText&"uge="&uge&" "
End If
strText=strText&"order by [dato] asc"
Avatar billede w13 Novice
04. december 2007 - 19:46 #30
Prøv med:
If maanedsnr<>"" Or maanedsnr>0 Then

Havde vist skrevet maanedsnr=0 før og det er jo forkert - den må ikke være 0.
Avatar billede hundevennen Nybegynder
05. december 2007 - 08:45 #31
der kommer stadig fejl i sqlsætningen. Hvis jeg vælger år og måned så kører den, men hvis jeg vælger år og uge fejler den - den skriver hvis der bliver valgt uge stadig
måned ind i sqlsætningen
Avatar billede hundevennen Nybegynder
05. december 2007 - 09:37 #32
det ligger i denne del:
If maanedsnr<>"" Then
  strText=strText&"month(dato)="&maanedsnr&" "
der står jo egentlig at hvis forskellig fra blank, så skal den skrive month(dato)plus
månedsnummer og det går den - jeg skal jo ikke ha month(dato)med hvis maanedsnr er blank?????
Avatar billede hundevennen Nybegynder
05. december 2007 - 09:51 #33
der skulle vel stå noget i retning af:

If maanedsnr<>"" Then
  strText=strText&"month(dato)="&maanedsnr&" "
if maanedsnr="" then strtext=strtext & "and"
  i=i+1
End If
If uge<>"" Then
  If i>0 Then strText=strText&"and "
  strText=strText&"uge="&uge&" "
End If
strText=strText&"order by [dato] asc"

men jeg får syntaxfejl ??
Avatar billede w13 Novice
05. december 2007 - 14:38 #34
Nej, det hele skal være:
strText="SELECT * FROM t_kalender where year(dato)="&aarstal&" "
If maanedsnr<>"" Then strText=strText&"and month(dato)="&maanedsnr&" "
If uge<>"" Then strText=strText&"and uge="&uge&" "
strText=strText&"order by [dato] asc"
Avatar billede hundevennen Nybegynder
05. december 2007 - 17:51 #35
det virker ikke, men læg et svar - har fundet ud af det
der skal stå
If isNumeric(maanedsnr&"") Then
Avatar billede w13 Novice
05. december 2007 - 23:38 #36
Og så fungerer det?

Men tak for point så :)
Avatar billede w13 Novice
05. december 2007 - 23:38 #37
&"" burde dog ikke gøre forskel.
Avatar billede hundevennen Nybegynder
06. december 2007 - 08:03 #38
ja det fungere
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
Kurser inden for grundlæggende programmering

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

IT-JOB

Netcompany A/S

Business Cloud Engineer

Politiets Efterretningstjeneste

Datacentertekniker til PET

Formpipe Software A/S

Senior Product Manager

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Sårbarhedsstyringsspecialist - bliv en nøglespiller i kampen mod cybertrusler