---
title: "hjälp med att bygga ihop en SQL-fråga"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/112503-hjälp-med-att-bygga-ihop-en-sql-fråga"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "oola"
published: "2004-09-28T14:20:37.000Z"
updated: "2004-09-29T13:50:25.000Z"
replies: 11
views: 394
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/112503-hjälp-med-att-bygga-ihop-en-sql-fråga"
---

# hjälp med att bygga ihop en SQL-fråga

## #1 — oola, 2004-09-28T14:20Z

Såhär är det. Du ska kunna söka efter en person.

Sidan innehåller, förutom en submit-knapp, 4 olika formelement: 

Förnamn: textfält
Efternamn: textfält
Avdelning: Listbox
Land: Listbox

Tabellen Person i databasen består av ett Id samt de fyra egenskaperna som radades upp ovan.

Nu ska alltså en person kunna hittas och mitt problem är att få till korrekta SQL-frågor. Om användaren struntar i att fylla i ngt av fälten ska dessa inte inkluderas i SQL-frågan så att SQL-frågan blir olika beroende på vad användaren fyller i.

Ett sätt att göra det är förstås med massor av If-satser men det undviker jag gärna då det blir alltför jobbig kod.

Kan ni kanske ge mig några exempel på hur just du gjort det eller kan ni bara ge mig lite tips?

Permalänk: https://www.webforum.nu/p/112503

## #2 — J.N., 2004-09-28T15:30Z

HEJ!

Det är inte så klurigt, gör if-satser din sql-sats.

```

sql="SELECT * FROM tbl"

if fornamn<>"" then sql2 = " fornamn='" & fornamn & "'
if efternamn<>"" then sql2 = sql2 & " efternamn='" & efternamn & "'
osv

if sql2<>"" then sql = sql & " WHERE"

slutsql=sql & sql2
```

Sedan kan du bygga vidare på liknande sätt för att söka ASC eller DESC på respektive fält, det är samma princip.

Permalänk: https://www.webforum.nu/p/1449034

## #3 — Jesper T, 2004-09-28T15:30Z

Skulle kanske ha gjort ungefär så här:

```
fornamn		= "Kalle"
efternamn	= "Jonsson"
avdelning 	= "dialys"
land 		= ""

andor		= "and"         'Skall det vara and eller or?

	function dbSearch(str,k)
		if str <> "" then dbSearch = k & " like '%" & str & "%' "&  andor &" "
	end function

sql= "SELECT fornamn,efternamn,avdelning,land from table WHERE "
sql = sql & dbSearch(fornamn, "fornamn")
sql = sql & dbSearch(efternamn, "efternamn")
sql = sql & dbSearch(avdelning, "avdelning")
sql = sql & dbSearch(land, "land")
sql = left(sql, len(sql) - 4)
							
Set Rs = execute(sql)
```

 Kontrollera att minst ett fält är ifyllt, annars så kommer du få fel.

Permalänk: https://www.webforum.nu/p/1449035

## #4 — oola, 2004-09-29T06:48Z

Tack för svaren! Återkommer med vilken lösning som var bäst :)

Permalänk: https://www.webforum.nu/p/1449328

## #5 — oola, 2004-09-29T12:13Z

Använde egentligen en blandning av era svar men det går ju bara att acceptera ett inlägg som rätt tyvärr :)

Permalänk: https://www.webforum.nu/p/1449505

## #6 — @nders, 2004-09-29T12:18Z

Du kan ju alltid visa det slutgiltiga resultatet också, så får andra som har samma problem lite mer hjälp. :)

mvh

Permalänk: https://www.webforum.nu/p/1449507

## #7 — oola, 2004-09-29T12:34Z

```
	F_Name=request.querystring("F_Name")
	L_Name=request.querystring("L_Name")
	D_Id=request.querystring("D_Id")
	C_Id=request.querystring("C_Id")

	SQL="SELECT * FROM Person"
	
	if F_Name<>"" then sql2 = sql2 & " F_Name like '%" & F_Name & "%' AND"
	if L_Name<>"" then sql2 = sql2 & " L_Name like'%" & L_Name & "%' AND"
	if D_Id<>"*" then sql2 = sql2 & " D_Id =" & D_Id & " AND"
	if C_Id<>"*" then sql2 = sql2 & " C_Id =" & C_Id & " AND"

	if sql2<>"" then 
		SQL= SQL& " WHERE"
	else
		'Denna else-sats behövs eftersom SQL-strängen kapas längre ner. Om de fyra X:en inte skulle vara där blir frågan kaputt.
		SQL= SQL& "XXXX"
	end if
	
	SQL=SQL & sql2
	
	SQL = left(SQL, len(SQL) - 4)
```

Du har en poäng där och här kommer därför en lösning. Kanske inte den bästa eller effektivaste men den fungerar iaf :)

Permalänk: https://www.webforum.nu/p/1449513

## #8 — fredrik, 2004-09-29T12:46Z

Glöm inte att skydda dit mot SQL-injection sen heller!

Dvs. används antingen en parameteriserad fråga eller skydda dig iaf mot '-tecknet.

Du kan läsa mer om det på:
<http://www.swesecure.com/?ID=dc6ea60a-12ae-4e7e-9e9c-59489ccafa90&IID=29a58b01-ca79-4877-b924-4f5da18d4a2a>

Permalänk: https://www.webforum.nu/p/1449517

## #9 — J.N., 2004-09-29T12:58Z

HEJ!

Jag förstår inte varför du har med else-satsen med XXXX, de borde du kunna arbeta bort genom att justera Left-funktionen?

Permalänk: https://www.webforum.nu/p/1449521

## #10 — oola, 2004-09-29T13:07Z

Hmm...det är väl om sql 2 är tom, då måste jag lägga till något annars tar Left-funktionen bort sånt som är viktigt.

Går också att skrive WHERE direkt i första SQL-frågan och lägga till ett mellanslag efter varje AND.

Jaja, det var iaf ett enkelt sätt att jobba sig runt ett problem.

Permalänk: https://www.webforum.nu/p/1449527

## #11 — J.N., 2004-09-29T13:15Z

HEJ!

Nej, du kan inte lägga WHERE i första sql-variabeln, OM man inte fyller i något fält att leta efter. (Har du kanske redan stoppat?)

Såg att jag missat att få med AND efter varje sql2, och det behövs ju, om söker på mer än ett fält.
Då kan man lösa det som du gjort.

Permalänk: https://www.webforum.nu/p/1449533

## #12 — oola, 2004-09-29T13:50Z

Fast det gick, jag ändrade faktiskt, skrev dit WHERE i första sql-en och sen oavsett vad som händer köra: SQL = left(SQL, len(SQL) - 5) istället för -4.

Jaja, spelar egentligen inte så stor roll hur man gör det.

Permalänk: https://www.webforum.nu/p/1449553

---

Tråden på webben: https://www.webforum.nu/amne/asp/112503-hjälp-med-att-bygga-ihop-en-sql-fråga
