Visual Basic.NET - pasar registros de una BD acces a otra BD acces

 
Vista:
Imágen de perfil de Fco. Javier Medrano Salez
Val: 16
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

pasar registros de una BD acces a otra BD acces

Publicado por Fco. Javier Medrano Salez (94 intervenciones) el 29/07/2020 03:04:12
Hola maestros:
quiero que al pulsar un botón el programa agarra uno por uno los registros de una base de datos acces y los ponga en otra base de datos acces. Ni idea del código. Alguien me puede ayudar?
Gracias
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
Imágen de perfil de Phil Rob
Val: 2.985
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

pasar registros de una BD acces a otra BD acces

Publicado por Phil Rob (843 intervenciones) el 29/07/2020 07:53:45
Hola,

Penso que tienes que hacer :

Abrir dos conexiones (Conex1 y Conex2), cada con su ConnectionString
Una consulta (SELECT) con Conex1 para leer un registro de la DB fuente
Un comando (INSERT) con Conex2 para escribir el registro en la DB destino

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
Imágen de perfil de Fco. Javier Medrano Salez
Val: 16
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

pasar registros de una BD acces a otra BD acces

Publicado por Fco. Javier Medrano Salez (94 intervenciones) el 29/07/2020 19:06:33
hola Phil Rob
lo voy a intentar. 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
Imágen de perfil de Wilfredo Patricio Castillo
Val: 1.528
Plata
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

pasar registros de una BD acces a otra BD acces

Publicado por Wilfredo Patricio Castillo (708 intervenciones) el 30/07/2020 00:59:06
Hay un par de cosas a tener en cuenta:

1.- Las tablas ya existen en la otra base de datos?.
Sino existen lo podrías hacer con un SELECT INTO, Si ya existe la tabla, lo puedes hacer con un INSERT INTO

2.- Cuántas veces al dia se hará ese proceso?.

Analiza bien la dituación y nos comentas

.Saludos cordiales,
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
Imágen de perfil de Fco. Javier Medrano Salez
Val: 16
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

pasar registros de una BD acces a otra BD acces

Publicado por Fco. Javier Medrano Salez (94 intervenciones) el 30/07/2020 03:29:48
hola Wil
la BD origen tiene una tabla alumnos con 20 campos, la BD destino tiene una tabla alumnos con 5 campos
de la base de datos 1 solo agarro 5 campos que son los que coloco en la BD2 que ya los tiene establecidos igualitos.
el procedimiento solo se haría una vez al año.
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
Imágen de perfil de Wilfredo Patricio Castillo
Val: 1.528
Plata
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

pasar registros de una BD acces a otra BD acces

Publicado por Wilfredo Patricio Castillo (708 intervenciones) el 30/07/2020 05:40:23
Si ya existe, pero con menos campos entonces, tu solución sería con un INSERT INTO, eso siempre y cuando los demás campos no sean requerido u obligatorios, sino pues podría dar problemas.

Cualquier duda al respecto me puedes escribir.

Saludos cordiales,
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
Imágen de perfil de Phil Rob
Val: 2.985
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

pasar registros de una BD acces a otra BD acces

Publicado por Phil Rob (843 intervenciones) el 30/07/2020 07:57:07
Hola amigos,

Pienso que si no existe la tabla destino, y que no deben ser modificar los datos, un SELECT … INTO … es mejor solucione.

En otros casos, pienso que es mejor hacer las dos instrucciones, una tras otra. Este permite de verificar y modificar si necesario, los datos durante el paso.

Leer registro fuente
Verificar / modificar datos (si necesario)
Escribir registro destino.

Buenas mañanas,

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
Imágen de perfil de Phil Rob
Val: 2.985
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

pasar registros de una BD acces a otra BD acces

Publicado por Phil Rob (843 intervenciones) el 30/07/2020 08:19:46
Continuación …

Debo corregir m mensaje anterior porque pienso que SELECT INTO no es posible con DB diferentes!

Un comando SQL es ejecutada con un conexión, unida a una sola DB con su ConnectionString que describe la conexión con UNA base de datos.

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
Imágen de perfil de Fco. Javier Medrano Salez
Val: 16
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

pasar registros de una BD acces a otra BD acces

Publicado por Fco. Javier Medrano Salez (94 intervenciones) el 30/07/2020 23:03:02
Voy a intentar con variables.
Cargo los datos a las variables y las guardo en la segunda BD.
ojala funcione
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
Imágen de perfil de Carlos
Val: 116
Ha aumentado su posición en 7 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

pasar registros de una BD acces a otra BD acces

Publicado por Carlos (40 intervenciones) el 31/07/2020 00:16:15
Muy buenas:

Por si le vale de ayuda, en mi planteamiento efectuado en este foro, sobre Rapidez de Grabación, hago eso mismo, paso de una Tabla de Access a otra Tabla de Sqlite, el planteamiento quiero pensar que es el mismo.

1º con la primera conexión accedes a la Tabla de la 1ª Base de Datos
aqui mediante variables coges los valores que te interesen
2º con la segunda accedes a la otra tabla
aqui unicamente debes de efectuar un INSERT para añadir el registro que tienes en esas variables.

Saludos desde Algeciras
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
Imágen de perfil de Fco. Javier Medrano Salez
Val: 16
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

pasar registros de una BD acces a otra BD acces

Publicado por Fco. Javier Medrano Salez (94 intervenciones) el 02/08/2020 03:28:14
Gracias Carlos
no entiendo bien el uso de @param1 en tu ejemplo.
puedes poner ejemplo aqui?

1
2
3
4
5
6
7
8
dim var1 as string
 For Each row As DataRow In Ds.Tables(0).Rows
var1= row.Item("nombre").ToString()
Dim comm As OleDbCommand = conexion2.CreateCommand
Dim sql1 As String = "INSERT INTO exalumnos (nombre) VALUES (' " & nombre & '")"
comm.CommandText = sql1
comm.ExecuteNonQuery()
next
tengo esto y me sale error "el operador & no está definido por los tipos..."
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
Imágen de perfil de Carlos
Val: 116
Ha aumentado su posición en 7 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

pasar registros de una BD acces a otra BD acces

Publicado por Carlos (40 intervenciones) el 02/08/2020 08:45:33
My buenas:
Uso

La principal diferencia entre la variable y el parámetro en SQL es su uso. Una variable en SQL ayuda a mantener un solo valor de datos de un tipo específico, mientras que un parámetro en SQL ayuda a intercambiar datos entre funciones y procedimientos almacenados.
Conclusión

En conclusión, la principal diferencia entre la variable y el parámetro en SQL es que la variable ayuda a mantener un solo valor de datos de un tipo específico, mientras que el parámetro ayuda a intercambiar datos entre procedimientos y funciones almacenados..

Es por esto que en mi codigo,(aconsejado por otros usuarios) uso las siguientes intrucciones

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
'Aqui asigno a las variables los valores de la Tabla Origen
 
cManual = DGTabla.Rows(x).Cells(0).Value.ToString
cFecha = DGTabla.Rows(x).Cells(1).Value.ToString
cUsuario = DGTabla.Rows(x).Cells(3).Value.ToString
cMotivo = DGTabla.Rows(x).Cells(4).Value.ToString
cExplica = DGTabla.Rows(x).Cells(5).Value.ToString
cExplica = Replace(cExplica, "'", "")
cOpen = DGTabla.Rows(x).Cells(6).Value.ToString
 
Try
 
    sql = "INSERT INTO Hist_Expte (Id_Expediente, FechaRgto,Usuario,Motivo,Explica,Open_Close) VALUES(@param1, @param2, @param3,@param4, @param5, @param6)"
 
'Aqui le dijo como ha de guardar en la Tabla destino, como puedes ver @param1 le asigno cManual, etc....
    Dim cmdGuardar As SQLiteCommand = New SQLiteCommand(sql, conn)
    cmdGuardar.Parameters.AddWithValue("@param1", cManual)
    cmdGuardar.Parameters.AddWithValue("@param2", cFecha)
    cmdGuardar.Parameters.AddWithValue("@param3", cUsuario)
    cmdGuardar.Parameters.AddWithValue("@param4", cMotivo)
    cmdGuardar.Parameters.AddWithValue("@param5", cExplica)
    cmdGuardar.Parameters.AddWithValue("@param6", cOpen)
'Ejecutamos la sentencia sql para guardar el registro
    cmdGuardar.ExecuteNonQuery()
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
Imágen de perfil de Fco. Javier Medrano Salez
Val: 16
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

pasar registros de una BD acces a otra BD acces

Publicado por Fco. Javier Medrano Salez (94 intervenciones) el 02/08/2020 20:10:02
Voy a intentar Carlos
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
Imágen de perfil de Fco. Javier Medrano Salez
Val: 16
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

pasar registros de una BD acces a otra BD acces

Publicado por Fco. Javier Medrano Salez (94 intervenciones) el 02/08/2020 21:44:00
no encuentro el Imports para el SQLiteCommand
tengo: Imports System.Data.SqlClient
pero dice que el SQLiteCommand "no está definido el tipo"
Alguna importación que tenga que hacer?
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
Imágen de perfil de Carlos
Val: 116
Ha aumentado su posición en 7 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

pasar registros de una BD acces a otra BD acces

Publicado por Carlos (40 intervenciones) el 02/08/2020 22:50:13
Muy buenas:
el import es

Imports System.Data.SQLite -----> esta es para Sqlite

deberas de añadirlo en las referencias del proyecto

Saludos de 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
Imágen de perfil de Fco. Javier Medrano Salez
Val: 16
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

pasar registros de una BD acces a otra BD acces

Publicado por Fco. Javier Medrano Salez (94 intervenciones) el 02/08/2020 23:23:40
se me olvida comentar que yo paso los datos de una BD ACCES a otra BD ACCES
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
Imágen de perfil de Phil Rob
Val: 2.985
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

pasar registros de una BD acces a otra BD acces

Publicado por Phil Rob (843 intervenciones) el 03/08/2020 12:39:06
Hola,

Este es el codigo que he utilizado para mis pruebas con el problema "Rapidez en Grabación" de Carlos. He copiado 100000 registros en 88 segundos.
Tienes que que escribes las 2 cadenas de conexiones, y naturalmente, tienes que ajustar los nombres des los campos según tu DB.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
Private Sub CopiarTablaAccessEnAccess2()
    Dim ComandoSQL As String = ""
    Dim ConsultaSQL As String = ""
    Dim MiComando As New OleDbCommand
 
    Dim MiDataTabla As New DataTable
 
    ConexionAccess2.ConnectionString = CadenaConexionParaAccess2  ' ConnectionString para DB destino
    ConexionAccess2.Open()   ' Para ExecuteNonQuery, es necesario de abrir la conexión.
    ConexionAccess1.ConnectionString = CadenaConexionParaAccess1  ' ConnectionString para DB fuente
    'ConexionAccess1.Open()   ' Para Adapter, no es necesario de abrir la conexión.
 
    ConsultaSQL = "SELECT Id_Expediente, FechaRgto, Id_Usuario, Motivo, Explica, Open_Close FROM Hist_Expte"
 
    Dim MiAdapter As OleDbDataAdapter = New OleDbDataAdapter(ConsultaSQL, ConexionAccess1)
    MiAdapter.Fill(MiDataTabla)
 
    ComandoSQL = "INSERT INTO Hist_Expte (Id_Expediente, FechaRgto, Id_Usuario, Motivo, Explica, Open_Close) VALUES (@param1, @param2, @param3,@param4, @param5, @param6)"
 
    MiComando.Connection = ConexionAccess2
    MiComando.CommandType = CommandType.Text
    MiComando.CommandText = ComandoSQL
 
    For I As Integer = 0 To MiDataTabla.Rows.Count - 1
 
        MiComando.Parameters.AddWithValue("@param1", MiDataTabla.Rows(I).Item(0))
        MiComando.Parameters.AddWithValue("@param2", MiDataTabla.Rows(I).Item(1))
        MiComando.Parameters.AddWithValue("@param3", MiDataTabla.Rows(I).Item(2))
        MiComando.Parameters.AddWithValue("@param4", MiDataTabla.Rows(I).Item(3))
        MiComando.Parameters.AddWithValue("@param5", MiDataTabla.Rows(I).Item(4))
        MiComando.Parameters.AddWithValue("@param6", MiDataTabla.Rows(I).Item(5))
 
        MiComando.ExecuteNonQuery()
        MiComando.Parameters.Clear()
 
    Next
 
    MiAdapter.Dispose()
    MiComando.Dispose()
    ConexionAccess2.Close()
    ConexionAccess2.Dispose()
 
    ConexionAccess1.Dispose()
    '       MessageBox.Show("Registros copiados")
 
End Sub

Espero que este te ayudará ...
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
Imágen de perfil de Fco. Javier Medrano Salez
Val: 16
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

pasar registros de una BD acces a otra BD acces

Publicado por Fco. Javier Medrano Salez (94 intervenciones) el 07/08/2020 02:32:31
hola amigos Phil, Carlos
no sé en qué parte de mi código está el error, el problema es que después de correr el programa abro la DB exalumnos y !no ha grabado nada!
en el código no marca ningún error
el programa corre bien, implemente no graba en la segunda DB

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
Private Sub procederindexar()
    conectaalumnos()
    conectaalumnos2()
    defineciclo()
    '''crea carpeta con el ciclo pasado
    FileIO.FileSystem.CreateDirectory("\\subdirector\est22\exalumnos\" + cicloesc)
    Dim grad() As String = {"3° A", "3° B", "3° C", "3° D", "3° E"}
    Dim nombre, curp, lugar, nac, padre, madre, dom, sex, foto As String
    Dim tel1, tel2, tecnologia, adeudos, lugardenac, grupo As String
    Dim promgral As Double
    Dim fechanac As Date
    Dim x As Integer
    Dim ComandoSql As String = ""
    x = 0
    '''pasa las fotos de tercer grado a exalumnos
    Do While x < 6
        Dim cadenasql As String = ("SELECT * FROM alumnos WHERE grado = '" + grad(x) + "'")
        Dim adaptador As New OleDbDataAdapter(cadenasql, conexion)
        adaptador.Fill(Ds1)
        For Each row As DataRow In Ds1.Tables(0).Rows
            foto = row.Item("foto").ToString()
            On Error Resume Next
            Dim Origen As String = "\\subdirector\est22\fotos\" + foto
            Dim Destino As String = "\\subdirector\est22\exalumnos\" + cicloesc + "\" + foto
            FileIO.FileSystem.MoveFile(Origen, Destino)
        Next
        Ds1.Clear()
        x += 1
    Loop
    x = 0
    ''' borra de tabla alumnos a terceros grados y da de alta en bd exalumnos   ''' ESTA PARTE DE CODIGO ES LA QUE NO FUNCIONA
    Do While x < 6
        Dim cadenasql As String = ("SELECT nombre,grado,curp,fechanac,lugardenac,sexo,nacionalidad,padre,madre,domicilio,lugar,telefono,tecnologia,adeudos,PromGral,telefono2 FROM alumnos WHERE grado = '" + grad(x) + "'")
 
        Dim adaptador2 As OleDbDataAdapter = New OleDbDataAdapter(cadenasql, conexion)
        adaptador2.Fill(Ds)
 
        ComandoSql = "INSERT INTO exalumnos (nombre,grupo,curp,fechanac,lugardenac,padre,domicilio,lugar,tel,sexo,nacionalidad,tecnologia,PromGral,adeudos,ciclo,madre,tel2) VALUES (@param1, @param2, @param3,@param4, @param5, @param6,@param7, @param8, @param9,@param10, @para11, @param12,@param13, @param14, @param15, @param16, @param17)"
 
        MiComando.Connection = conexion2
        MiComando.CommandType = CommandType.Text
        MiComando.CommandText = ComandoSql
 
        For I As Integer = 0 To Ds.Rows.Count - 1
            MiComando.Parameters.AddWithValue("@param1", Ds.Rows(I).Item(0))
            MiComando.Parameters.AddWithValue("@param2", Ds.Rows(I).Item(1))
            MiComando.Parameters.AddWithValue("@param3", Ds.Rows(I).Item(2))
            MiComando.Parameters.AddWithValue("@param4", Ds.Rows(I).Item(3))
            MiComando.Parameters.AddWithValue("@param5", Ds.Rows(I).Item(4))
            MiComando.Parameters.AddWithValue("@param6", Ds.Rows(I).Item(5))
            MiComando.Parameters.AddWithValue("@param7", Ds.Rows(I).Item(6))
            MiComando.Parameters.AddWithValue("@param8", Ds.Rows(I).Item(8))
            MiComando.Parameters.AddWithValue("@param9", Ds.Rows(I).Item(9))
            MiComando.Parameters.AddWithValue("@param10", Ds.Rows(I).Item(10))
            MiComando.Parameters.AddWithValue("@param11", Ds.Rows(I).Item(11))
            MiComando.Parameters.AddWithValue("@param12", Ds.Rows(I).Item(12))
            MiComando.Parameters.AddWithValue("@param13", Ds.Rows(I).Item(15))
            MiComando.Parameters.AddWithValue("@param14", Ds.Rows(I).Item(21))
            MiComando.Parameters.AddWithValue("@param15", cicloesc)
            MiComando.Parameters.AddWithValue("@param16", Ds.Rows(I).Item(27))
            MiComando.Parameters.AddWithValue("@param17", Ds.Rows(I).Item(28))
            MiComando.ExecuteNonQuery()
            MiComando.Parameters.Clear()
        Next
        x += 1
    Loop
    MsgBox("Terminé de Indexar registros...")
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
Imágen de perfil de Carlos
Val: 116
Ha aumentado su posición en 7 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

pasar registros de una BD acces a otra BD acces

Publicado por Carlos (40 intervenciones) el 07/08/2020 10:44:51
Muy buenas:

He visto tu código fuente y observo lo siguiente:

1
Dim cadenasql As String = ("SELECT nombre,grado,curp,fechanac,lugardenac,sexo,nacionalidad,padre,madre,domicilio,lugar,telefono,tecnologia,adeudos,PromGral,telefono2 FROM alumnos WHERE grado = '" + grad(x) + "'")

Has probado con esto

1
Dim cadenasql As String = ("SELECT nombre,grado,curp,fechanac,lugardenac,sexo,nacionalidad,padre,madre,domicilio,lugar,telefono,tecnologia,adeudos,PromGral,telefono2 FROM alumnos WHERE grado ='" & grad(x) &"')

Ya me diras algo
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
Imágen de perfil de Phil Rob
Val: 2.985
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

pasar registros de una BD acces a otra BD acces

Publicado por Phil Rob (843 intervenciones) el 07/08/2020 12:17:06
Hola,

Si cometo error, la partial de tu código que es utile para copiar de una DB hasta otra DB es :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
''' borra de tabla alumnos a terceros grados y da de alta en bd exalumnos   ''' ESTA PARTE DE CODIGO ES LA QUE NO FUNCIONA
Do While x < 6
    Dim cadenasql As String = ("SELECT nombre,grado,curp,fechanac,lugardenac,sexo,nacionalidad,padre,madre,domicilio,lugar,telefono,tecnologia,adeudos,PromGral,telefono2 FROM alumnos WHERE grado = '" + grad(x) + "'")
 
    Dim adaptador2 As OleDbDataAdapter = New OleDbDataAdapter(cadenasql, conexion)
    adaptador2.Fill(Ds)
 
    ComandoSql = "INSERT INTO exalumnos (nombre,grupo,curp,fechanac,lugardenac,padre,domicilio,lugar,tel,sexo,nacionalidad,tecnologia,PromGral,adeudos,ciclo,madre,tel2) VALUES (@param1, @param2, @param3,@param4, @param5, @param6,@param7, @param8, @param9,@param10, @para11, @param12,@param13, @param14, @param15, @param16, @param17)"
 
    MiComando.Connection = conexion2
    MiComando.CommandType = CommandType.Text
    MiComando.CommandText = ComandoSql
 
    For I As Integer = 0 To Ds.Rows.Count - 1
        MiComando.Parameters.AddWithValue("@param1", Ds.Rows(I).Item(0))
        MiComando.Parameters.AddWithValue("@param2", Ds.Rows(I).Item(1))
        MiComando.Parameters.AddWithValue("@param3", Ds.Rows(I).Item(2))
        MiComando.Parameters.AddWithValue("@param4", Ds.Rows(I).Item(3))
        MiComando.Parameters.AddWithValue("@param5", Ds.Rows(I).Item(4))
        MiComando.Parameters.AddWithValue("@param6", Ds.Rows(I).Item(5))
        MiComando.Parameters.AddWithValue("@param7", Ds.Rows(I).Item(6))
        MiComando.Parameters.AddWithValue("@param8", Ds.Rows(I).Item(8))
        MiComando.Parameters.AddWithValue("@param9", Ds.Rows(I).Item(9))
        MiComando.Parameters.AddWithValue("@param10", Ds.Rows(I).Item(10))
        MiComando.Parameters.AddWithValue("@param11", Ds.Rows(I).Item(11))
        MiComando.Parameters.AddWithValue("@param12", Ds.Rows(I).Item(12))
        MiComando.Parameters.AddWithValue("@param13", Ds.Rows(I).Item(15))
        MiComando.Parameters.AddWithValue("@param14", Ds.Rows(I).Item(21))
        MiComando.Parameters.AddWithValue("@param15", cicloesc)
        MiComando.Parameters.AddWithValue("@param16", Ds.Rows(I).Item(27))
        MiComando.Parameters.AddWithValue("@param17", Ds.Rows(I).Item(28))
        MiComando.ExecuteNonQuery()
        MiComando.Parameters.Clear()
    Next
    x += 1
Loop

No veo error en este código pero me pregunto porque ejecutas este código en una cicla While ?
Comprendo que debes leer una vez la DB1 para llenar la DataTable Ds.
Después, debes escribir en la DB2 tan veces que existen lineas en Ds, asi : For I As Integer = 0 To Ds.Rows.Count - 1.

Pero no comprendo la cicla While. Quizá es la fuente de tu problema ...
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
Imágen de perfil de Phil Rob
Val: 2.985
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

pasar registros de una BD acces a otra BD acces

Publicado por Phil Rob (843 intervenciones) el 07/08/2020 19:35:41
Continuation :

Leyendo tu código un segunda vez, veo que haces la lectura de los registros en une cicla While para obtener los valores de grad(x) con x que cambiar de 0 hasta 5. No comprendo los resultados que obtienes.
Para leer todo registros con estos valores de grad(X), la consulta debería parecer como :

1
"SELECT * FROM alumnos WHERE grado >= 0 AND grado < 5"

o

1
"SELECT * FROM alumnos WHERE grado >= '" & grad(0) & "'" AND grado < '" & grad(5)'"

Y atención, si grado es un tipo numérico, no tiens que escribir los ' (single quote).

Una ejecución de la consulta da todos resultados, no es necesaria la cicla While.

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
Imágen de perfil de Fco. Javier Medrano Salez
Val: 16
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

pasar registros de una BD acces a otra BD acces

Publicado por Fco. Javier Medrano Salez (94 intervenciones) el 08/08/2020 03:38:48
perdón Phil
me faltó incluir que grad es una variable multidimensional que tiene 6 grupos: {3A.3B,3C,3D,3E,3F}
y el ciclo while es para que primero pase a los alumnos de 3A, luego a los de 3B y así sucesivamente
Sugerencia para no incluir el while? o sea, que llene la cabla con TODOS los alumnos de tercer grado.
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
Imágen de perfil de Fco. Javier Medrano Salez
Val: 16
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

pasar registros de una BD acces a otra BD acces

Publicado por Fco. Javier Medrano Salez (94 intervenciones) el 08/08/2020 03:44:39
Creo que no es el problema carlos
he probado a cambiar los signos de + por & y nada
sigue igual, corre bien, pero no graba nada en la DB exalumnos

mis conexiones
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Public Sub conectaalumnos()
    Try
        conexion.ConnectionString = ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\subdirector\est22\est22.accdb;")
        conexion.Open()
    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try
End Sub
 
Public Sub conectaalumnos2()
    Try
        conexion2.ConnectionString = ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\subdirector\est22\exalumnos.accdb;")
        conexion2.Open()
    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try
End Sub

Alguna otra sugerencia?
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
Imágen de perfil de Phil Rob
Val: 2.985
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

pasar registros de una BD acces a otra BD acces

Publicado por Phil Rob (843 intervenciones) el 08/08/2020 17:50:16
Hola Javier,

Querería que envias me un partial o todo del DB (puedes cambiar los nombres para confidencialidad).
Querería ver la tabla alumnos con sus datos y su esquema. Tambien gustaría me ver la tabla exalumnos.

Miraria como ejecutar tu codigo ...
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
Imágen de perfil de Carlos
Val: 116
Ha aumentado su posición en 7 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

pasar registros de una BD acces a otra BD acces

Publicado por Carlos (40 intervenciones) el 08/08/2020 23:49:23
Muy buenas:

Me puedes decir donde está definida la variable cicloesc y que valor tiene y de donde lo obtiene

MiComando.Parameters.AddWithValue("@param15", cicloesc)

En vez de usar el Do while .... Loop, soy mas partidario de For Next, a continuación te mando como quedaria, pero sigo sin saber que es cicloesc

For x as integer=0 to Ubound(Array de Cursos)

Dim cadenasql As String = ("SELECT nombre,grado,curp,fechanac,lugardenac,sexo,nacionalidad,padre,madre,domicilio,lugar,telefono,tecnologia,adeudos,PromGral,telefono2 FROM alumnos WHERE grado = '" + grad(x) + "'")

Dim adaptador2 As OleDbDataAdapter = New OleDbDataAdapter(cadenasql, conexion)
adaptador2.Fill(Ds)

ComandoSql = "INSERT INTO exalumnos (nombre,grupo,curp,fechanac,lugardenac,padre,domicilio,lugar,tel,sexo,nacionalidad,tecnologia,PromGral,adeudos,ciclo,madre,tel2) VALUES (@param1, @param2, @param3,@param4, @param5, @param6,@param7, @param8, @param9,@param10, @para11, @param12,@param13, @param14, @param15, @param16, @param17)"

MiComando.Connection = conexion2
MiComando.CommandType = CommandType.Text
MiComando.CommandText = ComandoSql

For I As Integer = 0 To Ds.Rows.Count - 1
MiComando.Parameters.AddWithValue("@param1", Ds.Rows(I).Item(0))
MiComando.Parameters.AddWithValue("@param2", Ds.Rows(I).Item(1))
MiComando.Parameters.AddWithValue("@param3", Ds.Rows(I).Item(2))
MiComando.Parameters.AddWithValue("@param4", Ds.Rows(I).Item(3))
MiComando.Parameters.AddWithValue("@param5", Ds.Rows(I).Item(4))
MiComando.Parameters.AddWithValue("@param6", Ds.Rows(I).Item(5))
MiComando.Parameters.AddWithValue("@param7", Ds.Rows(I).Item(6))
MiComando.Parameters.AddWithValue("@param8", Ds.Rows(I).Item(8))
MiComando.Parameters.AddWithValue("@param9", Ds.Rows(I).Item(9))
MiComando.Parameters.AddWithValue("@param10", Ds.Rows(I).Item(10))
MiComando.Parameters.AddWithValue("@param11", Ds.Rows(I).Item(11))
MiComando.Parameters.AddWithValue("@param12", Ds.Rows(I).Item(12))
MiComando.Parameters.AddWithValue("@param13", Ds.Rows(I).Item(15))
MiComando.Parameters.AddWithValue("@param14", Ds.Rows(I).Item(21))
MiComando.Parameters.AddWithValue("@param15", cicloesc)
MiComando.Parameters.AddWithValue("@param16", Ds.Rows(I).Item(27))
MiComando.Parameters.AddWithValue("@param17", Ds.Rows(I).Item(28))
MiComando.ExecuteNonQuery()
MiComando.Parameters.Clear()
Next I

Next x

Saludos y espero lo resuelvas
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
Imágen de perfil de Fco. Javier Medrano Salez
Val: 16
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

pasar registros de una BD acces a otra BD acces

Publicado por Fco. Javier Medrano Salez (94 intervenciones) el 09/08/2020 18:16:39
Gracias Carlos

esta función la tengo en un módulo, de acá invoco "cicloesc"

1
2
3
4
5
6
7
8
9
10
11
Public Sub defineciclo()
    Dim año, mes As Integer
    año = Year(Now)
    mes = Month(Now)
    Select Case mes
        Case Is = 1, 2, 3, 4, 5, 6, 7
            cicloesc = año - 1 & " - " & año
        Case Is = 8, 9, 10, 11, 12
            cicloesc = año & " - " & año + 1
    End Select
End Sub

es para definir el ciclo escolar en el que estamos según el mes del año.
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
Imágen de perfil de Fco. Javier
Val: 16
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

pasar registros de una BD acces a otra BD acces

Publicado por Fco. Javier (94 intervenciones) el 09/08/2020 18:58:10
Hola Phil
estas son mis BD
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
Imágen de perfil de Carlos
Val: 116
Ha aumentado su posición en 7 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

pasar registros de una BD acces a otra BD acces

Publicado por Carlos (40 intervenciones) el 09/08/2020 19:31:46
Hola Francisco:

No quiero ser purista, pero esa funcion Defineciclo() no devuelve nada, y no sabemos el ambito de la variable, podrias parar la aplicación en este punto

MiComando.Parameters.AddWithValue("@param16", Ds.Rows(I).Item(27))

y mira ver que valor te está devolviendo la variable cicloesc, entiendo que el resto está bien, y sino te graba el registro solo queda ver los valores que les pasa por parametros, y si admite valores Null, en todos sus campo la Base Receptora de los datos.

Tambien para salir de dudas por hacer una prueba pasale unos registros fijos y así vemos si los crea en la BD receptora, que los crea ya sabes que son los parametros (sus valores), y sino lo crea la verdad algo raro debe de tener la BD.

Yo la función defineciclo() la escribiria de dos formas

1
2
3
4
5
6
7
8
9
10
Function defineciclo()
Dim año As Integer=Year(Now)
Dim mes as Integer=Month(Now)
Public cicloesc as string=""
If mes <8 then
cicloesc = año - 1 & " - " & año
else
cicloesc = año & " - " & año + 1
Endif
End Sub

La otra forma seria

1
2
3
4
5
6
7
8
9
10
11
Function defineciclo(ByVal Fecha as datetime) as String
Dim año As Integer=Year(Fecha)
Dim mes as Integer=Month(Fecha)
Public cicloesc as string=""
If mes <8 then
cicloesc = año - 1 & " - " & año
else
cicloesc = año & " - " & año + 1
Endif
Return cicloesc
End Sub

Saludos de 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
Imágen de perfil de Phil Rob
Val: 2.985
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

pasar registros de una BD acces a otra BD acces

Publicado por Phil Rob (843 intervenciones) el 09/08/2020 21:54:46
Hola Javier,


He mirado rápidamente tus DB y puedo afirmar que no es bien de escribir los codigos para copiar los datos en ciclas WHILE.

Hoy, es demasiado tarde para me, intentaré de escribir los codigos para copiar de DB1 a DB2 mañana en la tarde.

Buenas noches,
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
Imágen de perfil de Fco. Javier
Val: 16
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

pasar registros de una BD acces a otra BD acces

Publicado por Fco. Javier (94 intervenciones) el 09/08/2020 22:38:32
Hola Phil, Carlos
¡Descubri el error!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
For I As Integer = 0 To Ds.Rows.Count - 1
        MiComando.Parameters.AddWithValue("@param1", Ds.Rows(I).Item(0)) 'nombre
        MiComando.Parameters.AddWithValue("@param2", Ds.Rows(I).Item(1)) ' grupo
        MiComando.Parameters.AddWithValue("@param3", Ds.Rows(I).Item(2)) ' curp
        MiComando.Parameters.AddWithValue("@param4", Ds.Rows(I).Item(3)) ' fechanac
        MiComando.Parameters.AddWithValue("@param5", Ds.Rows(I).Item(4)) ' lugardenac
        MiComando.Parameters.AddWithValue("@param6", Ds.Rows(I).Item(7)) ' padre
        MiComando.Parameters.AddWithValue("@param7", Ds.Rows(I).Item(9)) ' domicilio
        MiComando.Parameters.AddWithValue("@param8", Ds.Rows(I).Item(10)) ' lugar
        MiComando.Parameters.AddWithValue("@param9", Ds.Rows(I).Item(11)) ' tel
        MiComando.Parameters.AddWithValue("@param10", Ds.Rows(I).Item(5)) ' sexo
        MiComando.Parameters.AddWithValue("@param11", Ds.Rows(I).Item(6)) ' nacionalidad
        MiComando.Parameters.AddWithValue("@param12", Ds.Rows(I).Item(12)) ' tecnologia
        MiComando.Parameters.AddWithValue("@param13", Ds.Rows(I).Item(14)) ' promgral
        MiComando.Parameters.AddWithValue("@param14", Ds.Rows(I).Item(13)) 'adeudos
        MiComando.Parameters.AddWithValue("@param15", cicloesc) ' ciclo
        MiComando.Parameters.AddWithValue("@param16", Ds.Rows(I).Item(8)) ' madre
        MiComando.Parameters.AddWithValue("@param17", Ds.Rows(I).Item(15)) 'tel2
        MiComando.ExecuteNonQuery()
        MiComando.Parameters.Clear()
    Next
Next y

Resulta que estaba invocando campos de la BD original (alumnos) en la parte del código de arriba, el error es que los parámetros debían ser de la Tabla que abrí (Ds) por esa razón no coincidían los tipos.
Corrí el programa y suerte! ya pasó los datos de la BD 1 a la BD 2
GRACIAS¡
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Carlos
Val: 116
Ha aumentado su posición en 7 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

pasar registros de una BD acces a otra BD acces

Publicado por Carlos (40 intervenciones) el 09/08/2020 23:54:04
Muy buenas:

Me alegra saber que ya lo has resuelto.

saludos y por aqui nos tiene para lo que haga falta
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
Imágen de perfil de Phil Rob
Val: 2.985
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

pasar registros de una BD acces a otra BD acces

Publicado por Phil Rob (843 intervenciones) el 10/08/2020 11:32:07
Hola Javier,

Felicitaciones ¡

Veo que no mas utilizas la cicla WHILE… pero la has reemplazada por una cicla FOR … jajaja ¡!!

Este es el código con una sola lectura de la DB initial (sin WHILE ni FOR) y la escritura de la DB destino como en mis códigos anteriores :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
Private Sub BJavier_Click(sender As Object, e As EventArgs) Handles BJavier.Click
 
    Dim ComandoSQL As String = ""
    Dim ConsultaSQL As String = ""
    Dim MiComando As New OleDbCommand
 
    Dim Ds As New DataTable
    ' !!! Las cadenas de conexion para mi PC
    CadenaConexionParaAccess2 = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\Tmp\DB_Javier\CopiarDB_DB_A_DB_B\DataBase\exalumnos.accdb;"
    CadenaConexionParaAccess1 = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\Tmp\DB_Javier\CopiarDB_DB_A_DB_B\DataBase\est22.accdb;"
    ConexionAccess2.ConnectionString = CadenaConexionParaAccess2
    ConexionAccess2.Open()
    ConexionAccess1.ConnectionString = CadenaConexionParaAccess1
    'ConexionAccess1.Open()
 
    '  Dim grad() As String = {"3° A", "3° B", "3° C", "3° D", "3° E"}
    Dim StrGrad As String = "'3°%'"
 
    '        ConsultaSQL = "SELECT nombre,grado,curp,fechanac,lugardenac,sexo,nacionalidad,padre,madre,domicilio,lugar,telefono,tecnologia,adeudos,PromGral,telefono2 FROM alumnos WHERE grado LIKE " & StrGrad & " ORDER BY grado"
    ConsultaSQL = "SELECT * FROM alumnos WHERE grado LIKE " & StrGrad
 
    Dim MiAdapter As OleDbDataAdapter = New OleDbDataAdapter(ConsultaSQL, ConexionAccess1)
    MiAdapter.Fill(Ds)
 
    ComandoSQL = "INSERT INTO exalumnos (nombre,grupo,curp,fechanac,lugardenac,padre,domicilio,lugar,tel,sexo,nacionalidad,tecnologia,PromGral,adeudos,ciclo,madre,tel2) VALUES (@param1, @param2, @param3,@param4, @param5, @param6,@param7, @param8, @param9,@param10, @para11, @param12,@param13, @param14, @param15, @param16, @param17)"
    MiComando.Connection = ConexionAccess2
    MiComando.CommandType = CommandType.Text
    MiComando.CommandText = ComandoSQL
 
    For I As Integer = 0 To Ds.Rows.Count - 1
 
        MiComando.Parameters.AddWithValue("@param1", Ds.Rows(I).Item("nombre"))
        MiComando.Parameters.AddWithValue("@param2", Ds.Rows(I).Item("grado"))  ' ??? grado o grupo (grupo no existe en DB1)
        MiComando.Parameters.AddWithValue("@param3", Ds.Rows(I).Item("curp"))
        MiComando.Parameters.AddWithValue("@param4", Ds.Rows(I).Item("fechanac"))
        MiComando.Parameters.AddWithValue("@param5", Ds.Rows(I).Item("lugardenac"))
        MiComando.Parameters.AddWithValue("@param6", Ds.Rows(I).Item("padre"))
        MiComando.Parameters.AddWithValue("@param7", Ds.Rows(I).Item("domicilio"))
        MiComando.Parameters.AddWithValue("@param8", Ds.Rows(I).Item("lugar"))
        MiComando.Parameters.AddWithValue("@param9", Ds.Rows(I).Item("telefono")) ' ??? tel o telefono (tel no existe en DB1)
        MiComando.Parameters.AddWithValue("@param10", Ds.Rows(I).Item("sexo"))
        MiComando.Parameters.AddWithValue("@param11", Ds.Rows(I).Item("nacionalidad"))
        MiComando.Parameters.AddWithValue("@param12", Ds.Rows(I).Item("tecnologia"))
        MiComando.Parameters.AddWithValue("@param13", Ds.Rows(I).Item("promgral"))
        MiComando.Parameters.AddWithValue("@param14", Ds.Rows(I).Item("adeudos"))
        MiComando.Parameters.AddWithValue("@param15", cicloesc)
        MiComando.Parameters.AddWithValue("@param16", Ds.Rows(I).Item("madre"))
        MiComando.Parameters.AddWithValue("@param17", Ds.Rows(I).Item("telefono2"))  ''' misma
        MiComando.ExecuteNonQuery()
        MiComando.Parameters.Clear()
 
    Next
 
    MiAdapter.Dispose()
    MiComando.Dispose()
    ConexionAccess2.Close()
    ConexionAccess2.Dispose()
 
    ConexionAccess1.Dispose()
    '       MessageBox.Show("Registros copiados")
End Sub
 
Function cicloesc() As String   ' He rescrito este funcione para mi codigo (pienso que es mejor como)
    Dim año As Integer = Year(Now)
    Dim mes As Integer = Month(Now)
    If mes < 8 Then
        cicloesc = año - 1 & " - " & año
    Else
        cicloesc = año & " - " & año + 1
    End If
End Function

Que tenga un buen diá

ExAlumnos
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
Imágen de perfil de Fco. Javier
Val: 16
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

pasar registros de una BD acces a otra BD acces

Publicado por Fco. Javier (94 intervenciones) el 11/08/2020 02:12:12
Hola Phil
Gracias, eres grande!
voy a implementar tus arreglos a mi código
aclaro que soy novato e inexperto.
Otra vez 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