una mano con conexiones ADO

Iniciado por 4D1cTo, 13 Febrero 2008, 12:54 PM

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

4D1cTo

estoy realizando un programa en basic pero necesito ayuda con las conexiones

necesito agregar , modificar y poder eliminar datos

para cada accion necesito un recordset verdad ? y por supuesto una conexion que supongo que sera la misma para todos en este caso AdoConexion

Dim AdoConexion As ADODB.Connection

para agregar los registros tendria que crear un sql

sql = "Insert Into TABLA (campo1,campo2,campo3)" _
    & "Values ('" & campo1.Text & "'," & campo2.Text & "'" & campo3.Text & "')"

lalaRecordset.Open sql, AdoConexion, adOpenDynamic, adLockOptimistic


estaria bien de esa forma el agregar ?

para modificar seria algo como

sql = "Update TABLA SET campo1 = campo1.txt,campo2 = campo2.txt WHERE condicion"

lalaRecordset.Open sql, AdoConexion, adOpenDynamic, adLockOptimistic


en este caso seria recordset.open ? o .execute ?

y para el eliminar
sql = "DELETE * FROM TABLA WHERE condicion"

lalaRecordset.Open sql, AdoConexion, adOpenDynamic, adLockOptimistic


aca open ? execute ? me da error al querer eliminar registros que estan relacionados , de que otra forma puede hacerse ?


[ Linux Registered User #348950 ]

Hans el Topo

para esto se suele utilizar un recordset una conexion y un command

abres conexiones

asignas conexion a comand y recordser

'para enviar consultas
cmd.commandtext= "sentencia
'para ejecutarlas
set recordset= cmd.execute
'luego para actualizar base de datos, usease todo lo que no sean selects
conexion.execute "sentencia"



ya ta
 

4D1cTo

no entendi mucho , no estoy muy familiarizado con estas conexiones como veras

lo unico que entendi es que solo se usa open para consultas de tipo select
para delete o update se usa execute
[ Linux Registered User #348950 ]

cassiani

Citarnecesito agregar , modificar y poder eliminar datos

Mira te muestro OTRA forma de hacerlo...

Investiga un poco sobre el Adodc, este objeto lo podes enlazar con la base de datos, tabla, etc.

Para agregar un registro nuevo a la tabla, usas:
Adodc1.Recordset.AddNew

Para eliminar un registro, usas:
Adodc1.Recordset.Delete adAffectCurrent


Para actualizar los datos:
Private Sub CmdAceptar_Click()
    Adodc1.Recordset.Update 'Actualizas los cambios
    Adodc1.Refresh 'Refrescas el ado
End Sub


Y para cancelar cualquier acción:
Private Sub CmdCancelar_Click()
    Adodc1.Recordset.Cancel 'Cancelando
    Adodc1.Refresh 'Refrescando
End Sub


Podes tener los texbox's enlazados a cada campo de la tabla, a través del Ado.

Prueba a ver que tal, ¡S4lu2!


4D1cTo

#4
no conocia esa forma , lo que pasa es que en el trabajo solo trabajmos con ADO

esto seria un complemento al ADO ? o seria otra forma de enlazar base de datos con vb ?
gracias
[ Linux Registered User #348950 ]

cassiani

Cita de: 4D1cTo en 13 Febrero 2008, 15:48 PM
no conocia esa forma , lo que pasa es que en el trabajo solo trabajmos con ADO

esto seria un complemento al ADO ? o seria otra forma de enlazar base de datos con vb ?
gracias


??? :xD... la seguda, existen varias formas para acceder a una base de datos e interactuar con sus registos... el ejemplo anterior, es una de ella...

Investiga un poco y te seguimos ayudando.

¡S4lu2!

Hans el Topo

Cita de: 4D1cTo en 13 Febrero 2008, 15:48 PM
no conocia esa forma , lo que pasa es que en el trabajo solo trabajmos con ADO

esto seria un complemento al ADO ? o seria otra forma de enlazar base de datos con vb ?
gracias

no te recomiendo trabajar con controles, lo que inicialmente parece una senda despejada se acaba convirtiendo en una trampa mortal
 

black_jjk

Estoy de acuerdo con no usar controles enlazados, la verdad es que son un tanto limitantes y a la hora de establecer la conexión y los enlaces es un martirio, por otra parte si quieres mostrar diferente información en un mismo objeto como un FlexGrid...

Yo también te recomiendo que te pongas a estudiar pues esto de las bases de datos no es tan sencillo como praece y si trabajas de eso pues...
En una de esas borras información importante y ...

Pero ya esta bueno de sermones que esto se trata de ayurnos:

El código que sigue yo declaro en un módulo de manera pública para luego invocarlo desde donde me venga en gana, solo ten cuidado con el alcance de tus variables:


Public MC As ADODB.Connection
Public MR As Recordset
Public XSQL As String


Ahora abrimos la conexión:


Public Function AbreBase()
Set MC = Nothing
Set MC = New ADODB.Connection
MC.Provider = "Microsoft OLE DB Provider for ODBC Drivers"
MC.ConnectionString = "Persist Security Info=False;Data Source="& TU_CONEXION & ";User ID="& TU_USUARIO & ";password=" & TU_PASSWORD" & ";Data Provider=MSDASQL.1"
MC.Mode = adModeReadWrite
MC.Open
End Function


Ahora una función para Ejecutar tus consultas SQL:


Function Ejecuta(Consulta As String)
Set MR = New Recordset
MR.Open Consulta, MC
End Function


Vale?, si quieres también la puedes hacer pública o introducirla en el Form que te venga en gana y ejecutarla localmente.
Bueno y el XSQL ya sabes para que sirve XD;

Por último:


Private Sub Buscar_Click()
XSQL = "SELECT(*) FROM tuTabla WHERE tuCondición"
Ejecuta XSQL
'?> Y esto es por si tu consulta no produce resultados no te mande error!!
If MR.EOF And MR.BOF Then
  MsgBox("No se encontrarón resultados"
Else
  MR.MoveFirst
  While Not(MR.EOF)
  TU_OBJETO = MC.Fields(0).value
  TU_OBJETO = MC.Fields(1).value
  TU_OBJETO = MC.Fields(...).value
  TU_OBJETO = MC.Fields(N).value
End IF
End Sub


Vale espero que sigas el consejo que te hemos dado y estudies; lo del Fields(X) es para que no se te olvide que vas a identificar los campos con el número de subindice, por lo que si tu tabla tiene 50 campos y seleccionas todo usando "SELECT (*)" tendrás los Fields(0)-Fields(49), y si usas una consulta más especifica y especificas los campos que quieres seleccionar siempre serán N-1 para tus Fields a la hora de ejecutar tu código, espero que te sirva.
::)