SQL Server - DTS importando datos fantasmas!! Ayúdenme

 
Vista:

DTS importando datos fantasmas!! Ayúdenme

Publicado por Dennis (6 intervenciones) el 29/05/2007 00:27:23
Hola.

En mi trabajo tenermos un sistema en Visual Basic que usa DTS de SQL 2000 Sever. Uno de los formularios tiene como tarea extraer datos de un archivo en Excel e importarlos a unas tablas en SQL haciendo uso de un objeto DTS.Package el cual se conecta a un DTS almacenado en el servidor.

Lo que hacemos primero es borrar todo el contenido del archivo Excel y luego copiamos los nuevos datos y grabamos . Pero al momento de usar el DTS para importar los nuevos datos, sucede algo extraño: El DTS no importa los nuevos datos a las tablas sino los datos que ya habían sido borrados.

Es como si el DTS tuviera los viejos datos en algun archivo excel temporal y se negara a importar los nuevos datos.

¿Alguna idea de por qué sucede esto y cómo lo puedo solucionar?
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:DTS importando datos fantasmas!! Ayúdenme

Publicado por Isaías (3308 intervenciones) el 29/05/2007 02:08:35
Esta algo refuscada la explicacion, entiendo por un lado que tienes DTS que leen una hoja Excel y lo suben a una tabla SQL SERVER, que por alguna razon, el DTS, no importa los nuevos datos, aunque aseguras que hay nuevos datos en el excel, ¿Es asi?
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:DTS importando datos fantasmas!! Ayúdenme

Publicado por Es correcto, Isaías (6 intervenciones) el 29/05/2007 15:22:04
El DTS tiene como misión traspasar los datos de una hoja excel a una tabla SQL.
Siempre usamos la misma hoja de Excel. Primero borramos los datos que estén ahí para luego llenarla con datos nuevos esperando que sean estos datos los que el DTS importe a SQL, pero en vez de importar los datos recién copiados importa aquellos que ya habíamos borrado.

Una nota importante. Cuando ejecuto el DTS desde el Entreprise Manager no ocurre esto, solo cuando lo ejecuto desde Visual Basic.

El proceso es simple:
Antes de hacer el traspaso de datos, el DTS primero elimina la tabla, luego la crea y entonces traspasa los datos nuevos.

Como primero la elimina, es lógico pensar que los datos que estaban ahí (o sea los datos antigüos) desaparezcan, pero NO. Después de que acaba todo el proceso esos mismos datos siguen ahí, como si se hubieran quedado flotando en alguna parte mientras la tabla era destruída para luego volver a ella una vez que esta fuera reconstruida.

Realmente extraño. ¿Alguna Idea?
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:DTS importando datos fantasmas!! Ayúdenme

Publicado por Isaías (3308 intervenciones) el 29/05/2007 17:24:21
¿Como es que "destruyes" los datos de la tabla?
¿Como es que BORRAS los datos de la hoja excel?
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:DTS importando datos fantasmas!! Ayúdenme

Publicado por Creo que ya sé la causa (6 intervenciones) el 29/05/2007 17:46:14
Los datos del Excel se copiaban primero a una tabla temporal. Luego otro proceso que no tiene nada que ver aquí copiaba los datos de la temporal a distintas tablas de la base de datos del sistema. Los datos de Excel se borraban primero simplemente seleccionándolos y presionando Supr.
El proceso que hace el DTS es:
- Destruir la tabla temporal mediante una tarea. (junto con los datos antigüos que ahí prodría haber)
- Volver a construir la tabla (ahora vacía)
- Traspasar la información de la hoja de excel a la temporal

Lo que he averiguado (creo yo) mediante un experimento que hice es que el código de Visual Basic que ejecuta el DTS desde el sistema, simplemente no lo está ejecutando.
Por lo tanto la tabla temporal nunca se destruye haciendo que los datos antigüos permanezcan ahí y cuando el proceso de carga se activaba copiaba los datos que había en la temporal, la cual nunca había sido destruída y reemplazada por datos nuevos por la sencilla razón de que el DTS nunca se ejecutó como todos pensaban.

Estoy casi seguro de que eso es lo que está pasado.
Lo que comprueba que los datos no tiene almas que penan alrededor de los DTS :)

Ahora solo tengo que averiguar porqué el código de Visual Basic que se encarga de ejecutar el DTS no lo está haciendo.

El código es este:

Dim vDTS As New dts.Package2
vDTS.LoadFromSQLServer GSNomSvr, "UserDTS", "UserDTS", DTSSQLStgFlag_Default, , ,, "DTS_CLARO_CARGA_CARTERA2"
vDTS.Connections(1).DataSource = TxtArchivo
vDTS.Connections(3).DataSource = TxtArchivo
vDTS.Execute
vDTS.UnInitialize
Set vDTS = Nothing

"UserDTS" es un inicio de sesión y usuario que hemos creado en el SQL.
El nombre del DTS es "DTS_CLARO_CARGA_CARTERA2"
"GSNomSvr " es una variable que contiene el nombre de nuestro servidor.
"TxtArchivo" Contiene la ruta al archivo Excel de origen

Gracias.
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:DTS importando datos fantasmas!! Ayúdenme

Publicado por Isaías (3308 intervenciones) el 29/05/2007 19:42:34
No mencionas como estas destruyendo los datos de la tabla "temporal", supongo que es con un TRUNCATE TABLE.

Ahora bien, mucha gente comete el "error" de hacer desarrollos en VB para "subir" informacion hacia SQL Server, si este es tu caso, te recomiendo que leas sobre OpenDataSource, para leer informacion en una hoja excel y manipularla como una tabla de SQL Server.

SELECT *
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions
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:DTS importando datos fantasmas!! Ayúdenme

Publicado por Dennis (6 intervenciones) el 29/05/2007 20:49:03
Gracias por la respuesta .
Pero porqué consideras que las aplicaciones que suben datos a una base en SQL son un error?
Bueno, en todo caso ingresé a una página web que tu le recomendaste a alguien más (www.sqldts.com, creo) ahí encontré buenos ejemplos que implementé.
Gracias a esos ejemplos me pude dar cuenta de que parte de DTS era la que fallaba. Asi es que volví a hacer el DTS y ahora todo funciona bien.

Gracias por todo.
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:DTS importando datos fantasmas!! Ayúdenme

Publicado por Isaías (3308 intervenciones) el 30/05/2007 00:46:14
Dennis

DTS, es una herramienta para la IMPORTACION / EXPORTACION de datos, tomando como base SQL SERVER.

Para "subir" datos a una tabla de SQL SERVER, que se encuentran en Excel, es mucho mas facil utlizar el OPENDATASOURCE, como te lo indique.

INSERT INTO tutabla
SELECT *
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions
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:DTS importando datos fantasmas!! Ayúdenme

Publicado por Dennis (6 intervenciones) el 30/05/2007 15:29:49
Traté de ejecutar esta sentencia desde el Query Analizer:

SELECT *
INTO MITABLA
FROM
OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\PRUEBA.xls";User ID=sa;Password=;Extended
properties=Excel 5.0')...xactions

que se parece a la que me diste, pero me salió este error:

"Could not create an instance of OLE DB provider 'Microsoft.Jet.OLEDB.4.0'.
OLE DB error trace [Non-interface error: CoCreate of DSO for Microsoft.Jet.OLEDB.4.0 returned 0x80040154]."

En realidad yo usaba el OpenDataSource, pero dejé de hacerlo por los constantes mensajes de error que recibía.

Otra cosa de la que me dí cuenta (corrígeme si me equivoco) es que para que el OpenDataSource funcione, el archivo que quieres impotar al SQL tiene que estar en el disco duro del servidor y no de cualquier otra máquina en la red.
Te dijo esto porque hace tiempo cuando estaba implementando un procedimiento de carga de clientes usé el OpenDataSource (o fue el OpenRowSet?... no lo recuerdo) y no me funcionó hasta que copié el archivo origen al disco duro del servidor.

Ah por cierto tengo el Access instalado asi es que el motor Jet sí está en mi máquina (o tiene que estar en el servidor?)

Dennis
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:DTS importando datos fantasmas!! Ayúdenme

Publicado por Isaías (3308 intervenciones) el 31/05/2007 01:14:59
Si el usuario que ejecuta la instruccion, tiene los PERMISOS suficientes donde se encuentra el archivo, solo cambia el path como sigue:

="\\myequipo\mycarpeta\PRUEBA.xls";User ID=sa;Password=;Extended
properties=Excel 5.0')...xactions
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