Access - De excell a access

 
Vista:

De excell a access

Publicado por krlos (10 intervenciones) el 07/06/2005 21:56:34
Este codigo puede ser de ayuda aunque agradezco su co laboracion haber si alguien sabe como hacer para que me permita seguir ejecutandolo ya que si repite una hora no se quiere ejecutar.

Mi idea es de que agrege datos a una tabla donde tengo 10,000 registros...

Private Sub cmdExcel_Click()
Dim Conexion As ADODB.Connection, _
rstExcel As ADODB.Recordset, _
rstaccess As Recordset, _
strArchivo As String, _
strTabla As String, _
strSQL As String
'Variables para usar DAO
Dim dbs As Database
Set dbs = CurrentDb
'rstAccess As ADODB.Recordset
On Error GoTo cmdExcel_Click_TratamientoErrores
Set rstaccess = dbs.OpenRecordset("PREDESPACHO2", dbOpenTable)
' asigno la ruta del libro Excel
strArchivo = Application.CurrentProject.Path & "\Prueba.xls"
' asigno el nombre de la hoja o rango a abrir,
' si quieres leer un rango con nombre, pon el nombre del rango en vez del de la hoja y borra-> & "$"
strTabla = "Predespacho" & "$"

Set Conexion = New ADODB.Connection
Set rstExcel = New ADODB.Recordset

' abro la conexión con la hoja de calculo
Conexion.Provider = "Microsoft.Jet.OLEDB.4.0"
Conexion.ConnectionString = "Data Source=" & strArchivo & ";Extended Properties=""Excel 8.0;HDR=Yes;"""
Conexion.CursorLocation = adUseClient
Conexion.Open

' abro el Recordset
With rstExcel
.ActiveConnection = Conexion
.CursorLocation = adUseClient
.CursorType = adOpenStatic
.LockType = adLockReadOnly
.Open "SELECT * FROM [" & strTabla & "]", , , , adCmdText
End With

' abro el recordset de la tabla
' si el recordset Excel no está vacío, inserto los datos en la tabla
If Not rstExcel.BOF And Not rstExcel.EOF Then
Do While Not rstExcel.EOF

' buscas el registro,
' si no existe lo insertas y si existe lo editas
If rstaccess.NoMatch Then
rstaccess.AddNew
Else
rstaccess.Edit
End If
rstaccess!hora = rstExcel!hora
rstaccess!FECHA = rstExcel!FECHA
rstaccess!CD = rstExcel!CD
rstaccess.Update
rstExcel.MoveNext
Loop
End If

' cierro los recordsets y la conexión con la hoja
If Not rstExcel Is Nothing Then
rstExcel.Close
Set rstExcel = Nothing
End If

If Not rstaccess Is Nothing Then
rstaccess.Close
Set rstaccess = Nothing
End If
Set Conexion = Nothing
Set dbs = Nothing

cmdExcel_Click_Salir:
On Error GoTo 0
Exit Sub

cmdExcel_Click_TratamientoErrores:

MsgBox "Error " & Err.Number & " en proc. cmdExcel_Click de Documento VBA Form_frmLeerExcelSinExcel (" & Err.Description & ")", vbOKOnly + vbCritical
GoTo cmdExcel_Click_Salir
End Sub

Agradezco su colaboracion...

Original por Rickhunters y emilio..
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:De excell a access

Publicado por Rick Hunter (263 intervenciones) el 08/06/2005 18:24:04
Que vido mi cuate, oye, te falta una línea donde dice:

' buscas el registro,
rstaccess.seek "=", rstexcel!HORA
' si no existe lo insertas y si existe lo editas
If rstaccess.NoMatch Then

En esta Línea esta todo el truco de lo que te conteste en el correo, se cambia ma o menos así:

' buscas el registro,
rstaccess.seek "=", rstexcel!HORA, rstexcel!FECHA
' si no existe lo insertas y si existe lo editas
If rstaccess.NoMatch Then

Lo demas queda iguanas, pero en la tabla debes crear el indice así como lo hicimos la vez pasada, ahora solo modificalo, agrega la FECHA debajo de la hora y LISTO!!

Ojala y te quede un mucho mas claro.
SALUDOS!!
Desde Coahuila, Mexico
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:De excell a access

Publicado por krlos (10 intervenciones) el 08/06/2005 20:23:55
se coloca como llave la hora y fecha hora primarykey lo unico es que odena por hora luego por fecha si hubiera una forma que se ordene por fecha luego hora si hay una forma para hacerlo me decis por favor.

esto queda asi

Private Sub cmdExcel_Click()
Dim Conexion As ADODB.Connection, _
rstExcel As ADODB.Recordset, _
rstaccess As Recordset, _
strArchivo As String, _
strTabla As String, _
strSQL As String
'Variables para usar DAO en vez de ADO
Dim dbs As Database
Set dbs = CurrentDb
'rstAccess As ADODB.Recordset
On Error GoTo cmdExcel_Click_TratamientoErrores
Set rstaccess = dbs.OpenRecordset("PREDESPACHO", dbOpenTable)
rstaccess.Index = "PrimaryKey"
' asigno la ruta del libro Excel
strArchivo = Application.CurrentProject.Path & "\Prueba.xls"
' asigno el nombre de la hoja o rango a abrir,
' si quieres leer un rango con nombre, pon el nombre del rango en vez del de la hoja y borra-> & "$"
strTabla = "Predespacho" & "$"

Set Conexion = New ADODB.Connection
Set rstExcel = New ADODB.Recordset

' abro la conexión con la hoja de calculo
Conexion.Provider = "Microsoft.Jet.OLEDB.4.0"
Conexion.ConnectionString = "Data Source=" & strArchivo & ";Extended Properties=""Excel 8.0;HDR=Yes;"""
Conexion.CursorLocation = adUseClient
Conexion.Open

' abro el Recordset
With rstExcel
.ActiveConnection = Conexion
.CursorLocation = adUseClient
.CursorType = adOpenStatic
.LockType = adLockReadOnly
.Open "SELECT * FROM [" & strTabla & "]", , , , adCmdText
End With

' abro el recordset de la tabla
' comentarizo para usar DAO en vez de ADO
'strSQL = "SELECT Hora, Fecha, CND "
'strSQL = strSQL & "FROM Predespacho "

'Set rstaccess = New ADODB.Recordset

'With rstaccess
' .ActiveConnection = CurrentProject.Connection
' .CursorLocation = adUseClient
' .CursorType = adOpenDynamic
' .LockType = adLockOptimistic
'End With

'rstaccess.Open strSQL

' si el recordset Excel no está vacío, inserto los datos en la tabla
If Not rstExcel.BOF And Not rstExcel.EOF Then
Do While Not rstExcel.EOF

' buscas el registro,
rstaccess.Seek "=", rstExcel!hora, rstExcel!fecha
' si no existe lo insertas y si existe lo editas
If rstaccess.NoMatch Then
rstaccess.AddNew
Else
rstaccess.Edit
End If
rstaccess!hora = rstExcel!hora
rstaccess!fecha = rstExcel!fecha
rstaccess!CD = rstExcel!CD
rstaccess.Update
rstExcel.MoveNext
Loop
End If

' cierro los recordsets y la conexión con la hoja
If Not rstExcel Is Nothing Then
rstExcel.Close
Set rstExcel = Nothing
End If

If Not rstaccess Is Nothing Then
rstaccess.Close
Set rstaccess = Nothing
End If
Set Conexion = Nothing
Set dbs = Nothing

cmdExcel_Click_Salir:
On Error GoTo 0
Exit Sub

cmdExcel_Click_TratamientoErrores:

MsgBox "Error " & Err.Number & " en proc. cmdExcel_Click de Documento VBA Form_frmLeerExcelSinExcel (" & Err.Description & ")", vbOKOnly + vbCritical
GoTo cmdExcel_Click_Salir
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:De excell a access

Publicado por Rick Hunter (263 intervenciones) el 09/06/2005 01:02:05
Pos es tan sencillo que nomas debes invertir el orden de los campos, es decir poner primero la fecha, luego la hora y claro esta que la clausula del SEEK deberá ir entonces:

' buscas el registro,
rstaccess.Seek "=", rstExcel!fecha, rstExcel!hora
' si no existe lo insertas y si existe lo editas
If rstaccess.NoMatch Then

Y con eso.

SALUDOS!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:De excell a access

Publicado por krlos (10 intervenciones) el 09/06/2005 17:16:23
Con lo que decis deberia hacerlo pero no sigue lo mismo me coloca todas las horas en orden de primero luego fechas en su orden quizas hay algo mas que mirar en el codigo o algo sencillo por alli pero no lo veo...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:De excell a access

Publicado por krlos (10 intervenciones) el 10/06/2005 16:44:19
Listo cree otra tabla y otro forms con el comando con su codigo y listo un saludo........

Carlos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:De excell a access

Publicado por Gustavo A. (1 intervención) el 19/08/2005 00:33:01
Holas!!

saben.. discupen lo moroso... pero leyendo esto, me quedo una duda...
como coloco los rangos en la consulta SQL??

' abro el Recordset
With rstExcel
.ActiveConnection = Conexion
.CursorLocation = adUseClient
.CursorType = adOpenStatic
.LockType = adLockReadOnly
.Open "SELECT * FROM [" & strTabla & "]", , , , adCmdText
End With

ya que la he probado.. y no me resulta.. me tira un error que dice que el valor de strTabla no es un nombre valido

Yo le asigno a strTabla el valor "Productos!A1"

Gracias por la ayuda!!!

:)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar