Posteado por: andre223 en: Noviembre 4, 2008
ADO te permite resolver el problema de manera sencilla, para eso tiernes que utilizar el objeto Command para la manipulación de procedimientos almacenados (Se puede hacer con cualquier otro objeto, como son connection o recordset, pero no ofrecen tanta funcionalidad cmo command para los procemientos almacenados, en especial para el uso de parametros).
Dim conn As ADODB.Connection
Dim cmd As ADODB.Command
Dim rs As ADODB.Recordset
Private Sub Command1_Click()
Dim constring As String
connstring = “Provider=SQLOLEDB;Data Source=localhost;User Id=sa;Password=;Connect Timeout=3;network library=dbmssocn;”
Set conn = New ADODB.Connection
conn.ConnectionString = connstring
conn.Open
Set cmd = New ADODB.Command
cmd.ActiveConnection = conn
cmd.CommandType = adCmdStoredProc
cmd.CommandText = “sp_server_info”
Set rs = cmd.Execute
While Not rs.EOF
Debug.Print rs.Fields(0) & Chr(9) & rs.Fields(1) & Chr(9) & rs.Fields(2)
rs.MoveNext
Wend
‘Para trabajar con parametros creas un objeto Parameter y lo atachas al Command actual.
Set prm1 = cmd.CreateParameter(“dbname”, adBSTR, adParamInput, 10, “master”)
cmd.Parameters.Append prm1
cmd.CommandText = “sp_helpdb”
Set rs = cmd.Execute
While Not rs.EOF
Debug.Print rs.Fields(0) & Chr(9) & rs.Fields(1) & Chr(9) & rs.Fields(2)
rs.MoveNext
Wend
End Sub
Posteado por: andre223 en: Octubre 3, 2008
Utilice la propiedad de filtro de ADO y el método de clonación. Así, se puede encontrar el marcador correcto en el clon sin que ello afecte a las filas que están visibles en el conjunto de registros.
Un ejemplo de código que muestra este método siguiente:
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
'Create a variable for the Cloned Recordset.
Dim clone_rs As ADODB.Recordset
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
With cn
.ConnectionString = "PROVIDER=SQLOLEDB;" & _
"DATA SOURCE=<server>;" & _
"USER ID=<uid>;" & _
"PASSWORD=<pwd>;" & _
"INITIAL CATALOG=<init_cat>"
.Open
End With
With rs
.CursorLocation = adUseClient
.CursorType = adOpenStatic
.LockType = adLockBatchOptimistic
.ActiveConnection = cn
.Open "select * from authors"
End With
'A clone recordset has some benefits :
' - Very little overhead, it is only an object variable containning a
' reference to the original recordset.
' - It does not require another round trip to the server.
' - It maintains separate but shareable bookmarks with the original.
' - Closing and filtering clones does not affect the original or
' other clones.
'Create a clone of the recordset.
Set clone_rs = Rs.Clone
'Apply a filter to the clone using the criteria passed in.
clone_rs.Filter = "state = 'CA' AND city = 'Oakland'"
If clone_rs.EOF Or clone_rs.BOF Then
'If criteria not found move to EOF; just as ADO's Find
rs.MoveLast
rs.MoveNext
Else
'If found, move the Recordset's bookmark to the same location as the
'clone's bookmark.
rs.Bookmark = clone_rs.Bookmark
End If
clone_rs.Close
Set clone_rs = Nothing
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
End Sub
fuente: http://support.microsoft.com/kb/195222/es
Posteado por: andre223 en: Octubre 2, 2008
| Definición del tipo de Cerrojo |
Entendemos como cerrojo el tipo de bloqueo que efectuaremos en la base de datos cuando modifiquemos un recordset, a fin de evitar que dos o mas usuarios accedan a modificar un mismo registro a la vez.
El tipo de cerrojo lo definiremos mediante la propiedad LockType, los posibles valores son:
| Denominación | valor | Caracteristicas |
| adLockReadOnly | 1 | Es el defecto; no permite al usuario modificar los datos de la tabla. |
| dLockPessimistic | 2 | Cuando se abra la tabla nadie mas podrá hacerlo, este modo nos asegura la plena integridad de los datos. |
| adLockOptimistic | 3 | Cierra la tabla a los demás usuarios cuando se invoque al método Update del objeto recordset; de este modo la Base de datos quedará bloqueada menos tiempo que con el método anterior. |