problema con el ado y la ubicacion de la base de datos
estoy trabajando con un programa y utilizo el ado, hasta ahora todo iba bien hasta que el usuario quiere, poder localizar la base de datos en acces, en la red, yo siempre habia trabajado en maquinas locales por facor, hay alguna forma de lograr esto en tiempo de ejecucion y si pudieras poner un codigo mejos
saludos
saludos
hola dradana... puedes usar una variable string como ruta de tu bd en lugar de poner una ruta especifica
por ejemplo en un form de cofiguracion sacar la ruta actual de la bd
pro ejemplo
en un modulo declarar
public Rutabd as string
en un form con un comondialog
private buscarbd
cd.showopen
rutabd=cd.filename
end sub
ahora cada ves que te conectes a tu bd solo cambia la ruta qeu tienes por rutabc
bueno, esto es solo un ejemplo, de ahi te puedes basar para sacar el modulo a como tu lo quieras
si necesitas algo no dudes en escribir qeu para eso esta el foro y tambien puedes escribirme, que si puedo te hecho una manito
suerte
por ejemplo en un form de cofiguracion sacar la ruta actual de la bd
pro ejemplo
en un modulo declarar
public Rutabd as string
en un form con un comondialog
private buscarbd
cd.showopen
rutabd=cd.filename
end sub
ahora cada ves que te conectes a tu bd solo cambia la ruta qeu tienes por rutabc
bueno, esto es solo un ejemplo, de ahi te puedes basar para sacar el modulo a como tu lo quieras
si necesitas algo no dudes en escribir qeu para eso esta el foro y tambien puedes escribirme, que si puedo te hecho una manito
suerte
hola, yo lo uso asi y anda bárbaro, asi cargas la base desde donde se ejecuta la aplicación..
si, querés sustitui el App.path por una variable hacia la ruta, donde este la base.. y si la quiere buscar, usa un commondialog
strCon = "DSN=MS Access;DBQ="
strCon = strCon & App.Path "Data.mdb;DriverId=25;FIL=MS Access;MaxBufferSize=512;PageTimeout=5;PWD=XXX;UID=admin;"
With cnCon
.ConnectionString = strCon
.ConnectionTimeout = 10
'No sirve si la base está en uso
.Open
End With
Espero te sirva, un saludo
si, querés sustitui el App.path por una variable hacia la ruta, donde este la base.. y si la quiere buscar, usa un commondialog
strCon = "DSN=MS Access;DBQ="
strCon = strCon & App.Path "Data.mdb;DriverId=25;FIL=MS Access;MaxBufferSize=512;PageTimeout=5;PWD=XXX;UID=admin;"
With cnCon
.ConnectionString = strCon
.ConnectionTimeout = 10
'No sirve si la base está en uso
.Open
End With
Espero te sirva, un saludo
OYE ME DICES QUE SI LA BASE DE DATOS ESTA EN USO NO SIRVE Y SI NECESITO QUE OTRO ADO SE CONECTE Y ENCUANTRA LA BASE DE DATOS EN USO QUE HAGO, POR OTRO LADO DECLARANDO TODO ESTO EN LOS CODIGOD SUPONGO QUE NECESITAREMOS DECLARAR LA TABLA DONDE VAMOS A TRABAJAR Y NO SE COMO HACER ESO
GRACIAS
GRACIAS
Como te mencionaron antes, utiliza el CommonDialog para ubicar la ruta hacia tu base de datos.
Usa dicha ruta en tu rutina de conexion ...
Respecto a las tablas no tienes que redefinir nada...
Dim oConn As ADODB.Connection
Dim oRecordset As ADODB.Recordset
Private Sub Form_Load()
On Error GoTo Cambiar_Proveedor
Set oConn = New Connection
oConn.Provider = "Microsoft.Jet.OLEDB.3.51" ' <- Access 97 !!
oConn.Properties("Data Source").Value = cRuta_MDB
oConn.Properties("Password").Value = "xxx"
Intentar_Conexion:
oConn.Open
On Error GoTo 0 ' Resumimos el tratamiento normal de errores
Set oRecordset = New Recordset
oRecordset.Open "Tabla1", oConn, adOpenKeyset, adLockOptimistic
If Not oRecordset.BOF Then
oRecordset.MoveFirst
Do While Not oRecordset.EOF
lstUsuarios.AddItem oRecordset.Fields("Campo1") & vbCr
oRecordset.MoveNext
Loop
End If
Exit Sub
Cambiar_Proveedor:
' Si se genero error al tratar de abrir con Access 97
' entonces prueba tratando de abrir con Access 2000
If oConn.Provider = "Microsoft.Jet.OLEDB.3.51" Then
Set oConn = New Connection
oConn.Provider = "Microsoft.Jet.OLEDB.4.0" '<- Access 2000 !!
oConn.Properties("Data Source").Value = cRuta_MDB
oConn.Properties("Password").Value = "xxx"
GoTo Intentar_Conexion
End If
' Si ya se cambio a Access 2000 y persiste el error entonces
' notificamos al usuario y cerramos la forma ...
MsgBox "Error( " & Err.Number & ") !!" & vbCrLf & _
Err.Description
Unload Me
End Sub
Usa dicha ruta en tu rutina de conexion ...
Respecto a las tablas no tienes que redefinir nada...
Dim oConn As ADODB.Connection
Dim oRecordset As ADODB.Recordset
Private Sub Form_Load()
On Error GoTo Cambiar_Proveedor
Set oConn = New Connection
oConn.Provider = "Microsoft.Jet.OLEDB.3.51" ' <- Access 97 !!
oConn.Properties("Data Source").Value = cRuta_MDB
oConn.Properties("Password").Value = "xxx"
Intentar_Conexion:
oConn.Open
On Error GoTo 0 ' Resumimos el tratamiento normal de errores
Set oRecordset = New Recordset
oRecordset.Open "Tabla1", oConn, adOpenKeyset, adLockOptimistic
If Not oRecordset.BOF Then
oRecordset.MoveFirst
Do While Not oRecordset.EOF
lstUsuarios.AddItem oRecordset.Fields("Campo1") & vbCr
oRecordset.MoveNext
Loop
End If
Exit Sub
Cambiar_Proveedor:
' Si se genero error al tratar de abrir con Access 97
' entonces prueba tratando de abrir con Access 2000
If oConn.Provider = "Microsoft.Jet.OLEDB.3.51" Then
Set oConn = New Connection
oConn.Provider = "Microsoft.Jet.OLEDB.4.0" '<- Access 2000 !!
oConn.Properties("Data Source").Value = cRuta_MDB
oConn.Properties("Password").Value = "xxx"
GoTo Intentar_Conexion
End If
' Si ya se cambio a Access 2000 y persiste el error entonces
' notificamos al usuario y cerramos la forma ...
MsgBox "Error( " & Err.Number & ") !!" & vbCrLf & _
Err.Description
Unload Me
End Sub
