Ver Mensaje Individual
  #33 (permalink)  
Antiguo 10/06/2008, 06:50
Avatar de Txoco
Txoco
 
Fecha de Ingreso: junio-2008
Ubicación: Perdido en tierras Quijotescas
Mensajes: 189
Antigüedad: 16 años, 10 meses
Puntos: 7
Respuesta: cambiar el orden de coger datos en un for each, del ultimo al primero

Hola!

Sigo pensando que si le das algunas vueltas al DataControl te evitarás tantos quebraderos de cabeza, pero aún así, creo que te estás complicando demasiado... creo que te resultaría mucho más sencillo algo así:

Código:
...Execute("Insert Into clientes (e-mail, telefono, etc) Values (""" & txtE-mail & """, """ txtTelefono & """, " & restodecampos & ")")
directamente, en lugar de concatenar en una función de forma dinámica.

Si aún así lo que quieres es centralizar la creación de la sentencia, te propongo esta función:

Código:
Public Function AltaEnBBDD(ByVal Tabla As String, ByVal Campos As String, ByVal Mascara As String, ParamArray Controles() As Variant) As String
Dim i As Long
Dim SQL As String

    SQL = "INSERT INTO " & Tabla & " (" & Campos & ") VALUES (" & Mascara & ");"
    For i = 0 To UBound(Controles)
        SQL = Replace(SQL, "%", Controles(i).Text, 1, 1, vbTextCompare)
    Next i
    
    AltaEnBBDD = SQL
End Function
A la que invocarías, por ejemplo así:

Código:
MsgBox AltaEnBBDD("clientes", "e-mail, telefono", """%"", %", txtEmail, txtTelefono)
El parámetro "mascara" te serviría para distinguir cómo se delimitan los campos, ya que no se puede distinguir a priori qué campos son numéricos y cuales no. Sólo tienes que tener cuidado de poner tantos símbolos de porcentaje como campos en el segundo parámetro, y como controles después de la máscara.

Por otra parte, fíjate que tal y como lo estás haciendo ahora, te concatena una coma de más al final de la lista de campos y de la de valores.