Actualizar BD Access desde fichero Excel

16/02/2005 - 21:37 por alba | Informe spam
Hola, saludos al grupo.

Vamos por partes:

Tengo una BD en Access con muchas tablas en un servidor. Una de las tablas
tiene unos 20000 registros y está formada por 4 campos (3 numéricos y 1
memo); el campo memo puede tener muchos caracteres.

Los datos con los que actualizo la BD me los dan en un fichero Excel que
tiene una media de 6000 registros con los mismos campos que la BD.

Bien, hasta aquí todo el proceso de actualización de la BD la hacía de forma
manual en un ordenador y luego subía la BD al servidor, pero quería
automatizarlo y para ello había pensado en realizar una página que solicite
el fichero Excel y actualice la BD y realice las tareas de mantenimiento
(eliminación de registros antiguos y compactación).

Buscando información sobre el tema me encuentro que se puede acceder al
fichero Excel y sacar los datos. Esta es la solución (me dije) pero
realizando las pruebas me encuentro con los siguientes problemas:

1.- Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
[Microsoft][Controlador ODBC Excel] El campo es demasiado pequeño para
aceptar la cantidad de datos que intenta agregar. Intente insertar o pegar
menos datos.

Es decir, que no puedo leer todos los registros por culpa de la cantidad de
caracteres que hay en uno de los campos de la hoja. Si en lugar de ser texto
fuera numérico me visualiza todos los registros. Lamentablemente esto no lo
puedo remediar, dicho campo no puedo tocarlo.

2.- Si en lugar de encontrarse los datos en la Hoja1 se encuentra en otra o
tiene otro nombre, cómo le digo en qué hoja están.

3.- Imagino que antes de hacer nada (actualizar la BD Access) tengo que
subir completamente el fichero Excel ¿no?, para ello cómo pongo un botón que
abra el contenido del ordenador del cliente y éste pueda indicar qué fichero
tiene los datos que debe actualizar en el servidor.

¿Alguna solución a este problema en ASP?

alba
 

Leer las respuestas

#1 Valdov
17/02/2005 - 00:03 | Informe spam
En cuanto a tu punto 3 ok, yo tambien haria que el usuario indicara
solamente que archivo de excel es.

Después, para leer los datos de la hoja de excel:

dim AdoCon, AdoRs, StrQuery,ConAcc,RsAcc
Const adCmdText = &H0001
Const adOpenStatic = 3


set AdoCon=server.CreateObject("ADODB.Connection")
set AdoRs=server.CreateObject("ADODB.Recordset")


AdoCon.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&
Server.MapPath("./Archivo.xls")&";Extended Properties=""Excel
8.0;HDR=Yes;IMEX=1""")

StrQuery="Select * From [Hoja1$] "

AdoRs.Open StrQuery,AdoCon,adOpenStatic,adCmdText

if not(AdoRs.Eof and AdoRs.Bof) then
'Aca abres conexion con Access y en un ciclo vas metiendo los datos del
excel a la base de datos de access.

AdoRs.MoveFirst

set ConAcc=server.createobject("AdoDb.Connection")
ConAcc.Open(.open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" &
Server.MapPath("bd.mdb")))

While Not AdoRs.Eof
strQuery="Insert Into tabla (Campo1,Campo2) Values ('"&
AdoRs.Fields(0) &"','"& AdoRs.Fields(1) &"')"

Set RsAcc=server.createobject("AdoDb.Recordset")

RsAcc.open strquery,Conacc,adOpenStatic,adCmdText

set RsAcc=nothing

AdoRs.MoveNext
Wend

ConAcc.Close

Set ConAcc=Nothing


end if

AdoCon.Close

Set AdoCon=nothing

- Lo del nombre de la hoja tambien lo puedes pasar como parametro.
-Y en cuanto al error, pues no hay más que el tamaño de los campos, tal vez
sean espacios vacios usa rtrim() para quitarlos




Valdov

Id en Msn Messenger:


"alba" wrote in message
news:X9OQd.19383$
Hola, saludos al grupo.

Vamos por partes:

Tengo una BD en Access con muchas tablas en un servidor. Una de las tablas
tiene unos 20000 registros y está formada por 4 campos (3 numéricos y 1
memo); el campo memo puede tener muchos caracteres.

Los datos con los que actualizo la BD me los dan en un fichero Excel que
tiene una media de 6000 registros con los mismos campos que la BD.

Bien, hasta aquí todo el proceso de actualización de la BD la hacía de


forma
manual en un ordenador y luego subía la BD al servidor, pero quería
automatizarlo y para ello había pensado en realizar una página que


solicite
el fichero Excel y actualice la BD y realice las tareas de mantenimiento
(eliminación de registros antiguos y compactación).

Buscando información sobre el tema me encuentro que se puede acceder al
fichero Excel y sacar los datos. Esta es la solución (me dije) pero
realizando las pruebas me encuentro con los siguientes problemas:

1.- Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
[Microsoft][Controlador ODBC Excel] El campo es demasiado pequeño para
aceptar la cantidad de datos que intenta agregar. Intente insertar o pegar
menos datos.

Es decir, que no puedo leer todos los registros por culpa de la cantidad


de
caracteres que hay en uno de los campos de la hoja. Si en lugar de ser


texto
fuera numérico me visualiza todos los registros. Lamentablemente esto no


lo
puedo remediar, dicho campo no puedo tocarlo.

2.- Si en lugar de encontrarse los datos en la Hoja1 se encuentra en otra


o
tiene otro nombre, cómo le digo en qué hoja están.

3.- Imagino que antes de hacer nada (actualizar la BD Access) tengo que
subir completamente el fichero Excel ¿no?, para ello cómo pongo un botón


que
abra el contenido del ordenador del cliente y éste pueda indicar qué


fichero
tiene los datos que debe actualizar en el servidor.

¿Alguna solución a este problema en ASP?

alba


Preguntas similares