Estimado pepino
Es un grave error y una muy mala práctica hacer lo más práctico, debes de hacer lo adecuado (lo correcto) para el caso que se te presenta. Por ello, es importante que tenga antes muy claro el requerimiento del cliente o el caso que se te presenta. Y siempre, primero, parte o apóyate en el fundamento teórico. En ese sentido paso a tratar de darte respuesta a tu pregunta.
Tú preguntas ¿Cuál es el mejor? y, la respuesta es relativa porque estas invocando desde un lenguaje anfitrión (VB6) a un lenguaje invitado (Transact-SQL).
Así que analicemos brevente lo que pasa en cada lengua:
1. En el lenguaje anfitrión:
1.1 Haciendo uso del método Execute del objeto Connection de ADO (estoy asumiendo que estas usando ADO).
Cuando invocas el método Excute, este implícitamente te retorna un objeto Recordset de solo lectura hacia adelante, por ello es muy rápido. Por ejemplo lo puedes usar para retornar los valores de un Combox.
Ahora, si este código lo estas invocando desde dentro el mismo Form (Frm_Pacientes) no es necesario que lo invoques
Set rs = cn.Execute("SELECT * FROM pacientes")
Set MshPacientes.DataSource = rs
1.2. Haciendo uso del método Open del objeto Recordset de ADO.
Cuando necesites tener un mayor control sobre el objeto Recordset, lo más adecuado es invocar al método Open del objeto Recordset. Por ejemplo quieres mostrar los datos paginados en un Grid.
Para este código, aplica el mismo comentario anterior para el Form, pero adicionalmente estoy usando With para invocar solo 2 veces al objeto Recordset, cuanto menos veces lo invoques es más óptimo.
With rs
.Open "SELECT * FROM expediente", cn, 1, 1
Set MsExpedientes.DataSource = rs
.Close
End With
2. En el lenguaje invitado
Es aquí donde hay grande HORRORES “errores”, basándote en la teoría de base de datos el llamar a una sentencia SQL como esta SELECT * FROM expediente tiene un costo de ejecución muy alto.
Cuando estés desarrollando sentencias SQL siempre revisa su plan de ejecución y busca alternativas para hacer que el costo del plan de ejecución sea el menor. Hasta con tablas de no más de 2000 registro puedes encontrar mejoras sustanciales en los tiempos de respuesta cuando recompones tu sentencia SQL, como hacerlo una forma es evitando usar el * en la composición del query SQL, en su lugar pon el nombre del o los campos que necesitas invocar y asegúrate de crear los índices adecuados y necesario, no te excedas en crear índices puesto que le pegaras al plan de ejecución. Recuerda que debes refrescar las estadísticas de la base de datos antes de volver a revisar el plan de ejecución.
Saludos, desde algún lugar de Lima-Perú