Sql Server a Access

16/11/2006 - 15:40 por Rodrigo Pizarro | Informe spam
Como puedo pasar datos de sql server a access con un dataset?

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion
16/11/2006 - 16:19 | Informe spam
"Rodrigo Pizarro" wrote in message
news:%23P$
Como puedo pasar datos de sql server a access con un dataset?



Creando dos DataAdapters: El primero un SqlDataAdapter que use una
conexión a SqlServer, y el segundo un OleDbDataAdapter que use una conexión
a Access. Puedes crearlos los dos con el diseñador gráfico de Visual Studio.
Una vez tengas los dos DataAdapters, haces un Fill con el primero para
llenar el DataSet desde SqlServer, y un Update con el segundo para grabar el
dataset en access.
Respuesta Responder a este mensaje
#2 Jesús López
16/11/2006 - 17:01 | Informe spam
Este código inserta todos los registros de una tabla de SQL Server en una
tabla de Access existente con la misma estructura. Para ello usa un dataset
y dos dataadapters:


Public Sub ExportSqlTableToAccess(ByVal sourceConnection As
SqlConnection, ByVal destinationConnection As OleDbConnection, ByVal
tableName As String)
Dim sqlAdapter As New SqlDataAdapter("SELECT * FROM " & tableName,
sourceConnection)
sqlAdapter.AcceptChangesDuringFill = False
Dim ds As New DataSet()
sqlAdapter.Fill(ds, tableName)

Dim oleAdapter As New OleDbDataAdapter("SELECT * FROM " & tableName,
destinationConnection)
Dim cmdBuilder As New OleDbCommandBuilder(oleAdapter)
oleAdapter.Update(ds, tableName)

End Sub

El truco está en sqlAdapter.AcceptChangesDuringFill = False. Con esto todos
los registros cargados desde SQL Server quedan marcados como Added. Así,
cuando se llama a oleAdapter.Update se insertan todos los registros en la
tabla de access.

Esta técnica es válida mientras no sean muchos los registros a exportar, ya
que primero carga todos los registros en el dataset, lo que consume memoria
y luego se ejecuta una instrucción insert por cada registro en el dataset. O
sea, que es bastante ineficiente, puede tardar mucho y consumir muchos
recursos si son muchos los registros a exportar.

Lo más eficiente sería exportar los datos de SQL Server a un archivo de
texto plano. Esto podría hacerse utilizando la herramienta de línea de
comandos de SQL Server "bcp.exe" o por programación usando un SqlDataReader
y un StreamWriter. Y luego importar los datos a Access usando una única
consulta de datos anexados similar a esta:

"INSERT INTO Table1 SELECT name, recdate, num, num2 FROM [Table1#txt] IN
'D:\VB.Net Projects\DBtest\bin' 'Text;';"

Este método es del orden de 40 veces más rápido que el de los Dataset +
DataAdapters.

Aquí tienes un ejemplo de como importar un archivo de texto plano a una
tabla de Access:

http://www.kelbli.net/kb1/AdoNetContest.html

Saludos:

Jesús López



"Rodrigo Pizarro" escribió en el mensaje
news:%23P$
Como puedo pasar datos de sql server a access con un dataset?


Respuesta Responder a este mensaje
#3 Rodrigo Pizarro
16/11/2006 - 18:02 | Informe spam
OK, Muchas Gracias

"Jesús López" escribió en el mensaje
news:
Este código inserta todos los registros de una tabla de SQL Server en una
tabla de Access existente con la misma estructura. Para ello usa un
dataset y dos dataadapters:


Public Sub ExportSqlTableToAccess(ByVal sourceConnection As
SqlConnection, ByVal destinationConnection As OleDbConnection, ByVal
tableName As String)
Dim sqlAdapter As New SqlDataAdapter("SELECT * FROM " & tableName,
sourceConnection)
sqlAdapter.AcceptChangesDuringFill = False
Dim ds As New DataSet()
sqlAdapter.Fill(ds, tableName)

Dim oleAdapter As New OleDbDataAdapter("SELECT * FROM " &
tableName, destinationConnection)
Dim cmdBuilder As New OleDbCommandBuilder(oleAdapter)
oleAdapter.Update(ds, tableName)

End Sub

El truco está en sqlAdapter.AcceptChangesDuringFill = False. Con esto
todos los registros cargados desde SQL Server quedan marcados como Added.
Así, cuando se llama a oleAdapter.Update se insertan todos los registros
en la tabla de access.

Esta técnica es válida mientras no sean muchos los registros a exportar,
ya que primero carga todos los registros en el dataset, lo que consume
memoria y luego se ejecuta una instrucción insert por cada registro en el
dataset. O sea, que es bastante ineficiente, puede tardar mucho y consumir
muchos recursos si son muchos los registros a exportar.

Lo más eficiente sería exportar los datos de SQL Server a un archivo de
texto plano. Esto podría hacerse utilizando la herramienta de línea de
comandos de SQL Server "bcp.exe" o por programación usando un
SqlDataReader y un StreamWriter. Y luego importar los datos a Access
usando una única consulta de datos anexados similar a esta:

"INSERT INTO Table1 SELECT name, recdate, num, num2 FROM [Table1#txt] IN
'D:\VB.Net Projects\DBtest\bin' 'Text;';"

Este método es del orden de 40 veces más rápido que el de los Dataset +
DataAdapters.

Aquí tienes un ejemplo de como importar un archivo de texto plano a una
tabla de Access:

http://www.kelbli.net/kb1/AdoNetContest.html

Saludos:

Jesús López



"Rodrigo Pizarro" escribió en el mensaje
news:%23P$
Como puedo pasar datos de sql server a access con un dataset?






Respuesta Responder a este mensaje
#4 Rodrigo Pizarro
16/11/2006 - 18:25 | Informe spam
MUCHAS GRACAS, FUNCIONO DE MARAVILLAS!!!!


"Jesús López" escribió en el mensaje
news:
Este código inserta todos los registros de una tabla de SQL Server en una
tabla de Access existente con la misma estructura. Para ello usa un
dataset y dos dataadapters:


Public Sub ExportSqlTableToAccess(ByVal sourceConnection As
SqlConnection, ByVal destinationConnection As OleDbConnection, ByVal
tableName As String)
Dim sqlAdapter As New SqlDataAdapter("SELECT * FROM " & tableName,
sourceConnection)
sqlAdapter.AcceptChangesDuringFill = False
Dim ds As New DataSet()
sqlAdapter.Fill(ds, tableName)

Dim oleAdapter As New OleDbDataAdapter("SELECT * FROM " &
tableName, destinationConnection)
Dim cmdBuilder As New OleDbCommandBuilder(oleAdapter)
oleAdapter.Update(ds, tableName)

End Sub

El truco está en sqlAdapter.AcceptChangesDuringFill = False. Con esto
todos los registros cargados desde SQL Server quedan marcados como Added.
Así, cuando se llama a oleAdapter.Update se insertan todos los registros
en la tabla de access.

Esta técnica es válida mientras no sean muchos los registros a exportar,
ya que primero carga todos los registros en el dataset, lo que consume
memoria y luego se ejecuta una instrucción insert por cada registro en el
dataset. O sea, que es bastante ineficiente, puede tardar mucho y consumir
muchos recursos si son muchos los registros a exportar.

Lo más eficiente sería exportar los datos de SQL Server a un archivo de
texto plano. Esto podría hacerse utilizando la herramienta de línea de
comandos de SQL Server "bcp.exe" o por programación usando un
SqlDataReader y un StreamWriter. Y luego importar los datos a Access
usando una única consulta de datos anexados similar a esta:

"INSERT INTO Table1 SELECT name, recdate, num, num2 FROM [Table1#txt] IN
'D:\VB.Net Projects\DBtest\bin' 'Text;';"

Este método es del orden de 40 veces más rápido que el de los Dataset +
DataAdapters.

Aquí tienes un ejemplo de como importar un archivo de texto plano a una
tabla de Access:

http://www.kelbli.net/kb1/AdoNetContest.html

Saludos:

Jesús López



"Rodrigo Pizarro" escribió en el mensaje
news:%23P$
Como puedo pasar datos de sql server a access con un dataset?






Respuesta Responder a este mensaje
#5 Rodrigo Pizarro
16/11/2006 - 20:27 | Informe spam
Hola Jesus,

Muchas Gracias por tu ayuda, utilice el procedimiento ExportSqlTableToAccess
claro le tuve que hacer algunos ajustes, el tamaño maximo de registro a
exportar son 600 registros y se demoro como 3 segundos en realizaro,

bueno te comento mi gran problema, lo que pasa es que tengo que imprimir
ordenes de trabajo en un formulario continuo que cada hoja es la mitad del
tamaño carta, esto funciona correctamente en un equipo con windows 98, una
impresora matriz de punto y un tamaño de papel personal (14 cm X 21.6 cm),
la aplicacion es un visual 6 con crystal 8 y una base de datos access,
intente hacer que esto funcionara en mi aplicacion .net, tengo win xp
profesional instale la impresora por el puerto LPT1 y le instale los
DRIVERS IBM pro -printer III, en el servidor de impresion cree un tamaño de
"Orden de Trabajo", cree el Report de la Orden de trabajo y lo logro
imprimir. pero mi problemaes que no existe forma de que la impresion no se
corra. las primeras 10 salen ok, pero despues empieza progresivamente a
correrse la impresion, probe con todos los ajustes habidos y por haber tanto
en margenes del report y margenes en el servidor de impresion, por lo tanto
y me duele reconocerlo he sido por primera vez derrotado, no he logrado la
solucion que queria, por lo tanto opte por seguir imprimiento con la
aplicacion que esta funcionando ahora. y por eso mi necesidad de tener que
exportar los registros aun MDB.

Bueno muchas gracias por tu ayuda.

Saludos

Rodrigo Pizarro
Stgo-Chile



"Jesús López" escribió en el mensaje
news:%
¿Cual de los dos métodos usaste? ¿Cuantos registros tenías que insertar?

Saludos:

Jesús López



"Rodrigo Pizarro" escribió en el mensaje
news:
MUCHAS GRACAS, FUNCIONO DE MARAVILLAS!!!!


"Jesús López" escribió en el mensaje
news:
Este código inserta todos los registros de una tabla de SQL Server en una
tabla de Access existente con la misma estructura. Para ello usa un
dataset y dos dataadapters:


Public Sub ExportSqlTableToAccess(ByVal sourceConnection As
SqlConnection, ByVal destinationConnection As OleDbConnection, ByVal
tableName As String)
Dim sqlAdapter As New SqlDataAdapter("SELECT * FROM " & tableName,
sourceConnection)
sqlAdapter.AcceptChangesDuringFill = False
Dim ds As New DataSet()
sqlAdapter.Fill(ds, tableName)

Dim oleAdapter As New OleDbDataAdapter("SELECT * FROM " &
tableName, destinationConnection)
Dim cmdBuilder As New OleDbCommandBuilder(oleAdapter)
oleAdapter.Update(ds, tableName)

End Sub

El truco está en sqlAdapter.AcceptChangesDuringFill = False. Con esto
todos los registros cargados desde SQL Server quedan marcados como Added.
Así, cuando se llama a oleAdapter.Update se insertan todos los registros
en la tabla de access.

Esta técnica es válida mientras no sean muchos los registros a exportar,
ya que primero carga todos los registros en el dataset, lo que consume
memoria y luego se ejecuta una instrucción insert por cada registro en el
dataset. O sea, que es bastante ineficiente, puede tardar mucho y
consumir muchos recursos si son muchos los registros a exportar.

Lo más eficiente sería exportar los datos de SQL Server a un archivo de
texto plano. Esto podría hacerse utilizando la herramienta de línea de
comandos de SQL Server "bcp.exe" o por programación usando un
SqlDataReader y un StreamWriter. Y luego importar los datos a Access
usando una única consulta de datos anexados similar a esta:

"INSERT INTO Table1 SELECT name, recdate, num, num2 FROM [Table1#txt] IN
'D:\VB.Net Projects\DBtest\bin' 'Text;';"

Este método es del orden de 40 veces más rápido que el de los Dataset +
DataAdapters.

Aquí tienes un ejemplo de como importar un archivo de texto plano a una
tabla de Access:

http://www.kelbli.net/kb1/AdoNetContest.html

Saludos:

Jesús López



"Rodrigo Pizarro" escribió en el mensaje
news:%23P$
Como puedo pasar datos de sql server a access con un dataset?










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