Como obtener el texto escrito en un textfield en una sentencia SQL??

jmlabernia
03 de Diciembre del 2004
Hola,

tengo un programa que necesita conectarse a una bd en sqlserver. Mi problema es que cuando voy a escribir una sentencia para que me introduzca un nuevo registro con los campos de un formulario, no puede leer lo que hay en los objetos text del mismo. Este es mi código:

Private Sub Command1_Click()
' Por si ya estaba abierta...
Set cnn = Nothing
Set rst = Nothing
'
' Crear los objetos
Set cnn = New ADODB.Connection
Set rst = New ADODB.Recordset
'
' abrir la base usando las credenciales de Windows
cnn.Open "Provider=SQLOLEDB; " & _
"Initial Catalog=Prueba; " & _
"Data Source=PORTATIL_CHM; " & _
"integrated security=SSPI; persist security info=True;"
'
' abrir el recordset indicando la tabla a la que queremos acceder
rst.Open "insert into alumnos (id_alumno, passw, nombre, apellidos, email) values ('text1.text', '.text2.text', 'text3.Text', 'text4.Text', 'text5.Text')", cnn, adOpenDynamic, adLockOptimistic

End Sub

Evidentemente, en la base de datos me guarda text1.text en lugar de su contenido, y asi en todos los atributos de la tupla. Y es que en SQL, lo que va en ' ' simples significa ese texto exactamente. Como lo puede cambiar?? Alguien sabe algo?? Manteniendo el recorset como forma de acceso porque no conozco otra!! Muchas gracias de antemano.

kipied
03 de Diciembre del 2004
Espero ayudarte (no soy experto)
luego de values coloca :
(" & text1.text & "," & text2.text & "," & text3.text & "," & text4.text & "," & text5.text & ")",cnn, adOpen...

Otra forma sería guardar los valores en una cadena:

Dim Valores as String

Valores= text1.text & "," & text2.text & "," & text3.text & "," & text4.text & "," & text5.text

entonces:

rst.Open "insert into alumnos (id_alumno, passw, nombre, apellidos, email) values (" & Valores & ")", cnn, adOpenDynamic, adLockOptimistic





mvallejos
03 de Diciembre del 2004
Agrego algo a lo de Kipied, cuando generes la cadena SQL, los valores texto van entre comillas simples, no así los numéricos.
Con los números, como precaución, trata de reemplazar las posibles comas decimales por puntos, ya que en la concatenación de valores, el motor va a tomar esa coma como separador de campos y no como coma decimal.

Investiga la función Replace de VB

Max
03 de Diciembre del 2004
Como sugerencia, te apunto que si estas trabajando contra SQL Server, utilices Stored Procedures, que para algo estan.
Además de limpieza en el codigo ganas seguridad y rapidez en la aplicacion.