Función para hacer insert's "simples" a una tabla (está en desarrollo)
Si se trata de un insert algo más complejo con "parseo" de cadenas, validaciones server-side, etc, mejor dejar esto de lado y construir la sentencia SQL normalmente
Todos los campos del formulario deberán llamarse como los campos de la tabla donde se insertarán y tendrán como prefijo uno de los siguientes (para todos los casos, sin las comillas):
- "str" para datos que se inserten en campos text
*
- "num" para datos que se inserten en campos numéricos
- "s_n" para datos que se inserten en campos si/no
- "ni_" para todo campo del formulario que no se desee insertar en la BD (ej: el botón submit
)
Los campos tipo 'si/no' deberán tener valor predeterminado = No en la tabla.
El motivo de esto es que si el checkbox no ha sido 'checkeado', no aparece en la colección FORM. Y si no aparece, no se puede establecer el valor como FALSE... quedando su valor como el valor predeterminado del campo en la tabla (o ninguno)
Código:
<%
Function Insertar(Tabla)
' Empiezo a construir la sentencia SQL
SQL = "INSERT INTO " & Tabla & " ("
' Reviso la colección FORM para colocar el nombre de los campos en la sentencia SQL
For i = 1 to Request.Form.Count()
Campo = Request.Form.key(i)
' Verifico que el campo sea "insertable"
If Left(Campo, 3) <> "ni_" Then
'El campo es "insertable"
Campo = Replace(Campo, "str", "")
Campo = Replace(Campo, "num", "")
Campo = Replace(Campo, "s_n", "")
SQL = SQL & Campo & ", "
End if
next
'Quito la última comilla, el espacio final y concateno
SQL = Mid(SQL, 1, Len(SQL) - 2)
SQL = SQL & ") VALUES ("
'Recorro nuevamente la colección FORM para seguir generando la sentencia SQL
For i = 1 to Request.Form.count()
' Obtengo el tipo de dato, el nombre de campo y el valor del mismo
Tipo = Left(Request.Form.key(i), 3)
Campo = Mid(Request.Form.key(i),4 , Len(Request.Form.key(i)))
Valor = Request.Form.item(i)
' Si se trata de una campo text lo coloco entre apóstrofes
If Tipo = "str" Then SQL = SQL & "'" & Replace(Valor, "'", "''") & "', "
' Si se trata de un campo numérico va sin los apóstrofes
If Tipo = "num" Then
SQL = SQL & Valor & ", "
' Si el valor ingresado no es un número, arroja un mensaje de error y detiene el proceso
If NOT IsNumeric(Valor) Then
Response.Write "<STRONG>Error:</STRONG> " _
& "El campo '" & campo & "' recibe valores incorrectos" _
& " (<span style='color:#FF0000'>" & Valor & "</span>). Debería ser un número válido.<br>" _
& "La operación no se ha efectuado."
Response.End
End if
End if
' Si es un campo si/no convierto a True (-1) si es que ha sido 'checkeado'.
' Si no ha sido 'checkeado' no lo puedo identificar, así que el campo en la tabla deberá...
'... tener como valor predeterminado False (0, No o lo que corresponda)
If Tipo = "s_n" Then
If Valor <> "" Then Valor = -1 Else Valor = 0
SQL = SQL & Valor & ", "
End if
next
' Nuevamente elimino la última comilla y el espacio
SQL = Mid(SQL, 1, Len(SQL) - 2)
' Finalmente, cierro la sentencia SQL
SQL = SQL & ")"
' Le doy a la función el valor de la sentencia SQL
Insertar = SQL
End Function
%>
Formulario de ejemplo:
Código:
<form ...>
Nombre: <input name="strNombre" type="text">
Apellido: <input name="strApellido" type="text">
Edad: <input name="numEdad" type="text">
Este no se guarda: <input name="ni_Control" type="text">
Activo? <input name="s_nActivado" type="checkbox" value="checkbox">
<input name="ni_Submit" type="submit" value="Enviar">
</form>
Se la llama así:
Código:
<%
'Reemplazar Response.Write por objetoConexion.Execute
Response.Write(Insertar("MiTabla"))
%>
Todavía no la usé ni sé si vale la pena usarla, pero se me ocurrió hacerla
Correcciones:
-
21/10/2004 La línea marcada con
* decía "txt", como prefijo, cuando debía decir "str". Fue modificado en el texto original.