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

Preguntas similare

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


Respuesta Responder a este mensaje
#2 alba
18/02/2005 - 19:42 | Informe spam
He tenido que restablecer el grupo para poder ver la respuesta, gracias
Valdov por responder.

Me pondré a ello enseguida.

Pero sobre el punto 3, he estado mirando el componente que me permite el
servidor y es ASPsmartUpload (http://www.aspsmart.com) y preparando un
algoritmo de uso:

subir fichero()
mientras fichero no subido
mensaje("espera mientras sube el fichero")
(espera)
finmientras
tratar fichero()
borrar fichero()

Para ello tendría:

formulario:
<form method="post" enctype="multipart/form-data"
action="/scripts/aspSmartUpload/upload.asp">
<input type="file" name="fichero">
<input type="submit">
</form>

¿Cómo le digo dónde está el fichero, se puede abrir un "explorador" para
recorrer las carpetas y dar con el fichero en cuestion? El nombre del
fichero no es siempre el mismo.

upload.asp:
<%
Dim myUpload
Dim intCount

Set myUpload = Server.CreateObject("aspSmartUpload.SmartUpload")
myUpload.Upload
intCount = myUpload.Save("/xlstemp/fichero")
Response.Write(intCount & " fichero(s) subido(s)")
%>

Hasta que el fichero no termine de subir se supone que no me sale el mensaje
"fichero(s) subido(s)" ¿no?

Y por último:

<%
dim fs
Set fs=Server.CreateObject("Scripting.FileSystemObject")
if fs.FileExists("/xlstemp/fichero") then
fs.DeleteFile("/xlstemp/fichero")
end if
set fs=nothing
%>

(he estado mrando lo que me permite el servidor creo que el borrado lo
tendré que hacer via FTP pues no se porque me da que no va a permitilo).

alba
Respuesta Responder a este mensaje
#3 alba
19/02/2005 - 15:46 | Informe spam
¿Cómo le digo dónde está el fichero, se puede abrir un "explorador" para
recorrer las carpetas y dar con el fichero en cuestion? El nombre del
fichero no es siempre el mismo.



Sobre este tema ya se como se hace.

alba
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida