Duditas sobre Conexión SQL (ADODB)

Iniciado por Shadow, 10 Noviembre 2011, 11:40 AM

0 Miembros y 1 Visitante están viendo este tema.

Shadow

Hola Gente!;
Tengo unas dudas con respecto a una conexión segura, segura en el sentido que solo quiero hacer una lectura de datos, y que en caso de un error no escriba nada o que pase algo raro.  :S


DECLARO LAS VARIABLES.

Dim Cn As New ADODB.Connection
Dim rst As New ADODB.Recordset


ME CONECTO:

Cn.Open "provider=sqloledb.1;Server=mssql.yo;User ID=webtests;Password=1234;Persist Security Info=True;Database=inv"


1.- De esta forma solo me conectaría y leería?

rst.Open "Select * From PC", Cn, adOpenDynamic, adLockReadOnly 



2.- en caso de querer agregarle un Where para filtrar datos... como debería ser asi?:


rst.Open "Select * From PC  Where 'empresa' = "Intel", Cn, adOpenDynamic, adLockReadOnly 


3.- Podría pasar algo malo si no cierro un recordset?


Gracias de antemano.


Sh@doW

seba123neo

primero no declares las variables nunca como "As New", primero hacele el As y despues el Set variable = New objeto

esto esta mal

Código (vb) [Seleccionar]
rst.Open "Select * From PC  Where 'empresa' = "Intel", Cn, adOpenDynamic, adLockReadOnly

deberia ser:

Código (vb) [Seleccionar]
rst.Open "Select * From PC Where empresa ='Intel'", Cn, adOpenDynamic, adLockReadOnly  

leete un manual de SQL siempre viene bien.

y no cerrar un recordset no es malo, pero si despues lo abris de nuevo debes cerrarlo antes de abrirlo (pero solo si esta abierto antes), para eso podes usar la propiedad .State del recordset, para saber si esta abierto o cerrado.

saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

Shadow

Gracias seba123neo!

Si después de postear me puse a leer algo, nunca le di pelota y ahora que me hace falta, pues recurrí a ustedes. ^^

Y puedo preguntar porque no debería Nunca declararlas como "As New"? No es óptimo?

un saludo y gracias nuevamente!
Sh@doW

BlackZeroX

si ocupas

Set variable = New objeto

al final cuando ya no la uses

Set variable = Nothing

Dulces Lunas!¡.
The Dark Shadow is my passion.

seba123neo

Cita de: Shadow en 11 Noviembre 2011, 09:58 AM
Y puedo preguntar porque no debería Nunca declararlas como "As New"? No es óptimo?

exacto no es optimo, mira una cita de la pagina de el guile que habla sobre esto, mejor explicado imposible:

CitarBuenas normas de conducta con los objetos:

La forma que acabamos de ver de crear un objeto es la más recomendable. El porqué es que así sólo reservamos espacio real cuando vamos a usar el objeto. Me explico: Veamos otras formas de declarar/asignar variables de objetos:

Dim miNombre As Object
Set miNombre = New cNombre

Esta sería la forma de crear un objeto del que no sabemos que clase será. En nuestro caso, es un desperdicio de código (interno del VB) y recursos (no demasiados) que no es necesario. Cuando se usa una variable declarada As Object, el Visual Basic no sabe, hasta que se está ejecutando, de que clase será y reserva unas líneas (ocultas) de código para poder hacer su trabajo cuando esté ejecutándose el programa.


Dim miNombre As New cNombre


De esta forma, al mismo tiempo que declaramos la clase, le indicamos al VB que en cuanto ejecute el módulo en el que se encuentra la declaración, cree el objeto. Aunque ese objeto nunca se use, se creará en memoria y ahí estará hasta que se destruya... ¿Desperdicio de recursos? Más bien sí.

Pero tanto esta última forma como la primera, es la más rápida y menos consumidora de código interno y recursos o tiempo que el Visual necesita para crear objetos.

Esto es por la sencilla razón que ya le estamos indicando cómo va a ser ese objeto y por tanto él sabe cómo es y cuanto necesitará para albergarlo... por supuesto, esto sólo se puede hacer con objetos que actualmente hay en las referencias o en nuestro proyecto.

¿Qué método usar para declarar variables de objetos?

Si sabemos el tipo de antemano, usaremos el primer método:


Dim miNombre As cNombre

Cuando queramos usarlo, sólo debemos asignarlo mediante SET y ya estará disponible.

Habrá ocasiones, la mayoría, en que se necesite usar el NEW junto con la declaración, un caso es para usar colecciones, ya que no se comporta de igual forma. La razón de este "extraño" comportamiento, al menos en forma práctica, la teórica te la dejo a ti, para que profundices con los manuales del Visual Basic, es que al usarlo sin NEW sólo tenemos una copia "fija" de esa variable. Por otro lado, con NEW obtendremos una nueva copia después de destruir la copia anterior. Esto lo verás prácticamente en el código de ejemplo para probar todo esto.

otra cita de internet, que explica bien esto:

CitarIf you're working in VB classic (6.0), try not to declare your new object variables like this:

Dim obj As New Class

This is a slow way to program. Everywhere you use the variable obj, VB will check if it's already been instantiated or not. This slows down your program. Instead, declare the variable without the New keyword, and instantiate it separately in a sensible place.

Dim obj As Class
Set obj = New Class

You may find out that it did not make sense to go object-oriented. If this happens, just revert back to your original module. You did take a backup copy, didn't you?

saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson