Ayuda sobre una respuesta que me dieron.... vb+sqlServer+recordsets

jmlabernia
07 de Diciembre del 2004
Hola a todos!!

Ayer me respondieron una duda a medias xq no entiendo lo que me ponian de respuesta a la hora de manejar la estructura de un recordset. Os detallo la duda inicial, la respuesta de la persona que me escribió, y lo que a mi me gustaría saber al final del todo. Muchas gracias a todos!!!:

No consigo obtener una tupla en una base de datos y escribir cada campo en un textfield diferente!!!

Lo que a mi me gustaría es realizar una Query de tipo “select”, y guardar el resultado en una especie de estructura. Luego había pensado escribir cada campo de esta estructura en un textfield diferente en un formulario.

Tengo poca idea de bd con vb, así que leí en una página como conectarlo a través de ADO. Así es como escribo valores de un formulario en mi bd:

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

Pero cuando hago un ‘rst.Open “select lo que sea.......’ me da error, no me deja con el .Open. Además, dónde se quedaría el resultado de la select??

Si alguien sabe como ayudarme con ADO y el tipo de código que tengo, se lo agradecería mucho. O también sino como podría configurar esta conexión los parámetros de conexión que muestro arriba con DAO que me lo escriba xfavor!!! Porque tengo entendido que cambiando este código a DAO quizás fuera más fácil todo esto..... Muchisimas gracias de antemano. Un saludo!!!!

LA RESPUESTA QUE OBTUVE:
Re:Consulta a sql server desde visual Basic
Enviado por mvallejos el día 6 de diciembre de 2004
Estás usando mal el objeto

Set Rst = cnn.execute("insert into alumnos (id_alumno, passw, nombre, apellidos, email) values ('" & Text1.Text & "','" & Text2.Text & "','" & Text3.Text & "','" & Text4.Text & "','" & Text5.Text & "')"

Si bien esto no es un Select, si querés hacer una query y colocarla en textos

Dim Cnn as New ADODB.Connection
Dim Rs as New ADODB.Recordset

cnn.Open "Provider=SQLOLEDB; " & _
"Initial Catalog=Prueba; " & _
"Data Source=PORTATIL_CHM; " & _
"integrated security=SSPI; persist security info=True;"

Rs.Open <Sql>,cnn,AdOpenStatic

Luego, vas repartiendo los campos en distintos textos

Text1.Text = Rst!<Campo1>
Text2.Text = Rst!<Campo2>
.................................................
TextN.Text = Rst!<CampoN>

Espero que sirva

Y MI DUDA DE AHORA:
No entiendo muy bien lo que me dice de:

"Luego, vas repartiendo los campos en distintos textos

Text1.Text = Rst!<Campo1>
Text2.Text = Rst!<Campo2>"

Que tengo que poner después de "!"?? Es que me desconcierta un poco lo de rst!<campo1>. Alguien me puede poner un ejemplo por favor?? Muchisimas gracias!!


mvallejos
07 de Diciembre del 2004
A ver...

Cada vez que ejecutes uns SQL de selección de registros, en el recordset, se genera una estructura de datos cuyo nombre de campos coinciden con los campos enumerados en la SQL, a eso se lo llama también conjunto de resultados.

Una vez que se abre un recordset, hay diferentes maneras de acceder a los datos contenidos.
Supongamos que uno de los campos de tu recordset
se llama Codigo y Rs es la variable recordset

Valor = Rs!Codigo
Valor = Rs("Codigo").Value
Valor = Rs.Fields(IndiceColumna).Value

Es decir, se accede a cada campo y se coloca su valor en cada control en los que quieras mostrar un registro.

Un ejemplo más resumido

Supongamos que tenemos 2 TextBox, TxApellido y TxNombre y deseamos recuperar los datos de una persona (Tabla persona) y mostrarlo

Dim Sql as String
Dim Rs as New ADODB.Recordset

Sql ="Select Apellido,Nombres From Persona Where IdPersona = 1"
Rs.Open Sql, Conn,AdOpenStatic
If Rs.RecordCount <> 0 Then
' Si encuentra datos
TxApellido.Text = Rs!Apellido
TxNombres.Text = Rs!Nombres
End if

Espero que se entienda mejor