webForumDet fria alternativet

hjälp med SIUD ParameterSQL funktion

ASP

6 svar · 542 visningar · startad av ConnyFox

Medlem sedan aug. 20011 087 inlägg
Frågan#1

Har gjort en funktion för att enkelt kunna skriva parameterfrågor och skulle behöva lite kommentarer och kritik på resultatet för att göra den bättre.

Funktionen verkar fungera, har t.ex lyckats inserta lite text i min databas osv.
Dock så vet jag inte hur jag gör för att i select delen få ut en array med all data till den sidan där funktionen kallas, hjälp? :D

Funktionen kan kallas såhär

call parameterSQL("select", "minasidor", "namn,rubrik,innehall", "", "ID,namn", "5,data1", "100")

där gälten är
parameterSQL(sqlType, table, fields, data, where, whereData, limit)

Och detta är själva funktionen

<SCRIPT LANGUAGE=VBScript RUNAT=Server>

Function dbOpen(Connect)
Set Connect = server.createobject("ADODB.Connection")
Connect.Open "Driver={MySQL ODBC 3.51 Driver};Server=localhost;Port=3305;Database=dammtussen;" 
'Connect.Open "Driver={MySQL ODBC 3.51 Driver};Server=83.140.162.135;Port=3306;DATABASE=jj745_webshop3; USER=jj745_connyfox; PASSWORD=57tYmX; OPTION=3;" 

Set Connect = Connect

End Function

Function dbClose(Connect)

Connect.Close
Set Connect = Nothing

End Function

function parameterSQL(sqlType, table, fields, data, where, whereData, limit)

Set cmd = server.createobject("adodb.command")
cmd.activeConnection = connect

arrFields = split(fields, ",")
arrData = split(data, ",")
arrWhere = split(where, ",")
arrWhereData = split(wheredata, ",")

			if where > "" then
				wherepart = "WHERE "
				for i = 0 to ubound(arrWhere)
				wherepart = wherepart & "" & arrwhere(i) & " = ? AND "
				next
				wherepart = left(wherePart, len(wherepart)-4)
			else
				wherepart = ""
			end if
			
			if limit > "" then
				limitPart = " LIMIT " & limit & ""
			end if

	select case sqlType
		case "select"
			MySQL = "SELECT " & fields & " FROM " & table & " " & wherePart & " " & limitpart & ""
			response.write mysql
		case "insert"
			for each p in arrFields
			datapart = datapart & "?,"
			next
		
			mysql = "INSERT INTO " & table & " (" & fields & ") VALUES(" & left(datapart, len(datapart)-1) & ") " & wherePart & " " & limitpart & ""
			
			response.write mysql
		case "update"
			for i = 0 to ubound(arrFields)
			datapart = datapart & "" & arrFields(i) & " = ?, "
			next
			datapart = left(datapart, len(datapart)-2)
			
			
			mysql = "Update " & table & " set " & datapart & " " & wherePart & " " & limitpart & ""
			response.write mysql
		case "delete"
			mysql = "Delete from " & table & " " & wherePart & " " & limitpart & ""
			response.write mysql
	end select

dim strALLdata

if data > "" then
strAllData = strAlldata & data
end if

if data > "" AND wheredata > "" then
strAllData = strAlldata & ","
end if

if wheredata > "" then
strAllData = strAlldata & wheredata
end if

response.write strALLdata

arrExecuteData = split(strALLdata, ",")
cmd.CommandText = MySQL
SET rs = cmd.Execute (, arrExecuteData)
set cmd = nothing

end function

</script>
Medlem sedan juni 200032 967 inlägg
#2

connyfox skrev:

Dock så vet jag inte hur jag gör för att i select delen få ut en array med all data till den sidan där funktionen kallas, hjälp?

En funktion skall returnera någonting - som du har byggt dina funktioner nu är de sub:ar.

Du returnerar saker från funktionen genom att sist i funktionen tilldela funktionsnamnet ett värde. Om du ser till att du gör en array av resultatet från din select (ex. mha recordsetobjektets metod GetRows()), så är det bara att du skickar tillbaka den.

function parameterSQL(sqlType, table, fields, data, where, whereData, limit)

    ......
    minFetaArray = rs.GetRows()

    parameterSQL = minFetaArray
end function

Jag ser också att du alltid skapar ett recordset i slutet av funktionen. Det finns ingen anledning att skapa ett recordset till något som inte returnerar några poster.

Medlem sedan aug. 20011 087 inlägg
#3

Tackar! jag visste givetvis att det var något sådant, dock så försökte jag göra som följande

parameterSQL = rs.getrows

och det fungerade inte.
Tack för svaret!

Övriga förslag på förbättringar osv är givetvis välkommna!

Medlem sedan juni 200032 967 inlägg
#4

parameterSQL = rs.getrows

och det fungerade inte.

Borde fungera om inte recordsetet är EOF - men jag föredrar att göra som i mitt exempel - så man kan stänga alla objekt efter sig innan retur. "Fungerade inte" är en ruskigt dålig felbeskrivning, för övrigt. Felmeddelande? Exakt hur ser koden ut nu då? Hur kallade du på funktionen när det blev fel?

Medlem sedan aug. 20011 087 inlägg
#5

Jo det verkar väll fungera nu.. dock så lyckas jag inte använda min array på sidan där jag kallar på funktionen..

skriver jag t.ex

if isArray(parameterSQL) then
...
end if

så får jag felmeddelandet

Fel antal argument eller felaktig egenskapstilldelning.: 'parameterSQL'

vilket väll egentligen inte känns så konstigt.. men hur gör jag?

Medlem sedan juni 200032 967 inlägg
#6

Tilldela.

foo = parameterSQL(...)
if isArray(foo)
Medlem sedan aug. 20011 087 inlägg
#7

Tack! man har alltid något kvar att lära sig :)

251 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)