none
Base de datos Access 2013 con Visual Studio 2010 RRS feed

  • Pregunta

  • Buenos días, mis saludos cordiales a la comunidad.

    Presento un inconveniente con la base de datos de mi proyecto. Hice el modelado en access 2013 y la guarde en la carpeta Debug de mi proyecto, luego guarde al abrir el proyecto y realizar la conexión con la misma ella me pregunto si deseaba hacer una copia respaldo en la carpeta del proyecto tal cual era la recomendación de muchos. Mi inconveniente son los siguientes:

    1.- Cuando ingreso registros nuevos desde el proyecto estos los toma perfectamente e incluso al realizar las consultas, éstas son visualizadas en el formulario respectivo, pero al salir del proyecto estos datos no están.

    2.- Si realizo una modificación de los datos en cualquier registro, lo mismo ocurre, dichas modificación son tomadas, pero al salir del proyecto el registro queda como si no lo hubiese tocado.

    3.- Por ultimo realice una comparación en las fechas de la base de datos de la de Debug con la del proyecto y la que estaba en la carpeta degug estaba más actualizada por lo que asumí que el proyecto tomaba los datos de ahí, realice una modificación en las tablas de la base de datos al incluir un campo nuevo en una de sus tablas. Al abrir el proyecto no veía este campo en la tabla que había sido modificada.

    Agradezco la mayor colaboración en este sentido y que puedo estar haciendo mal en todo esto pata tomar acciones... Gracias de antemano por la ayuda prestada.

    lunes, 18 de junio de 2018 12:34

Respuestas

  • "Gregorio_77" escribió:

    > Hice el modelado en access 2013 y la guarde en la carpeta Debug de mi proyecto,
    > luego guarde al abrir el proyecto y realizar la conexión con la misma ella me
    > pregunto si deseaba hacer una copia respaldo en la carpeta del proyecto tal
    > cual era la recomendación de muchos. Mi inconveniente son los siguientes:
    >
    > 1.- Cuando ingreso registros nuevos desde el proyecto estos los toma perfectamente
    > e incluso al realizar las consultas, éstas son visualizadas en el formulario
    > respectivo, pero al salir del proyecto estos datos no están.
    >
    > 3.- Por ultimo realice una comparación en las fechas de la base de datos de la de
    > Debug con la del proyecto y la que estaba en la carpeta degug estaba más actualizada
    > por lo que asumí que el proyecto tomaba los datos de ahí, realice una modificación
    > en las tablas de la base de datos al incluir un campo nuevo en una de sus tablas.
    > Al abrir el proyecto no veía este campo en la tabla que había sido modificada.

    Hola, Gregorio:

    No has indicado la cadena de conexión que estás utilizando en tu proyecto para conectarte con la base de datos de Access 2013, pero por lo que describes en el contenido de tu mensaje, tiene toda la pinta que estás utilizando la base de datos alojada en la carpeta Debug, por tanto, no es de extrañar que ésta se encuentre más actualizada que la base de datos alojada en la carpeta del proyecto.

    El "problema" (por llamarlo de alguna manera) se encuentra en que has agregado el archivo de base de datos a tu proyecto, por lo que cada vez que ejecutes tu aplicación DENTRO DEL IDE de Visual Studio, por defecto se copiará SIEMPRE a la carpeta de resultados (Debug o Release, de acuerdo a la configuración que tengas activa) el archivo de base de datos existente en la carpeta del proyecto, sobrescribiendo todos los cambios que hayas efectuado en la existente en la carpeta Debug.

    Te comento que esto solamente ocurre cuando ejecutas tu aplicación desde el propio IDE de Visual Studio, no si ejecutas directamente tu aplicación fuera de Visual Studio.

    Ahora, la pregunta sería, ¿con cual de las dos bases de datos deseas en realidad trabajar? ¿Con la existente en la carpeta del proyecto o con la existente en la carpeta Debug o Release?

    Si es con la base de datos existente en la carpeta del proyecto, tan solo basta con EXCLUIR DEL PROYECTO (no eliminar del proyecto) la referencia al archivo de base de datos del proyecto, y modificar el parámetro Data Source de la cadena de conexión, para indicar la ruta completa donde se encuentra el archivo de la base de datos de Access que vas a utilizar en tu aplicación.

    ¿Que deseas mantener la base de datos en el proyecto y trabajar con la existente en la carpeta Debug? Entonces tendrás que modificar las propiedades del elemento del proyecto que hace referencia a la base de datos de Access e indicarle que solamente se copie a la carpeta de salida (Debug o Release) solamente si la base de datos del proyecto es posterior a la existente en dicha carpeta de salida.

    Para modificar las propiedades de la base de datos, haz lo siguiente.

    1º) Selecciona el archivo de base de datos en la ventana Explorador de Soluciones.

    2º) Pulsar la tecla F4 para abrir la ventana Propiedades.

    3º) Dirígete a la propiedad Copiar en el directorio de resultados, y le especificas el valor Copiar si es posterior.

    4º) Verificar también que el valor Acción de compilación se encuentre en Ninguna.

    Así es como entiendo que deberías de quedar configurado el elemento del proyecto que hace referencia a tu base de datos de Access:


    Si estableces el valor Copiar si es posterior, esto quiere decir que si realizas alguna modificación, por muy pequeña que esta sea, en la base de datos existente en la carpeta de proyecto, cuando vuelvas a ejecutar tu aplicación desde el IDE de Visual Studio, se sobrescribirá sin previo aviso el archivo de base de datos existente en la carpeta de salida (Debug o Release).

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.


    lunes, 18 de junio de 2018 15:59
    Moderador
  • "Gregorio_77" escribió:

    > Mi intención es en todo momento es guardar en la base de datos ubicada en la
    > carpeta Debug, ahora bien la ruta que hago para la llamada es la siguiente;
    >
    > "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + My.Computer.FileSystem.CurrentDirectory +
    > "\CEDIMAPRI.accdb;Persist Security Info=True;Jet OLEDB:Database Password=contraseña"
    >
    > no estoy seguro pero creo que ésta ruta hace referencia a la carpeta debug.

    Al estar utilizando el valor devuelto por la propiedad CurrentDirectory, en principio puede que se tome la ruta de la carpeta Debug al ser el directorio de trabajo actual, pero no quiere decir que en el transcurso de la ejecución de tu aplicación dicho directorio sea siempre el mismo.

    Debes de tener en cuenta que la propiedad My.Computer.FileSystem.CurrentDirectory en realidad hace referencia al valor de la variable  Environment.CurrentDirectory, que es la variable de entorno que establece y devuelve la ruta de acceso completa del directorio de trabajo actual, que mientras que no se modifique, será la ruta de la carpeta que contiene el ejecutable de tu aplicación, por tanto, si estás ejecutando tu aplicación desde el IDE de Visual Studio, será la ruta de la carpeta Debug o Release, de acuerdo a la configuración que actualmente tengas activa.

    Si tu intención es utilizar la base de datos de Access que se encuentra en la misma carpeta que contiene el ejecutable de tu aplicación, sea la carpeta Debug, Release, MiCarpeta, o como se llame la misma, la verdad que es suficiente con especificar en el parámetro Data Source solamente el nombre del archivo de Access:

       ...;Data Source=CEDIMAPRI.accdb;...

    ¿Que deseas especificar explícitamente la ruta completa del ejecutable que inició tu aplicación? Entonces mejor será que utilices el valor de la propiedad Application.StartupPath tal y como indico a continuación:

         Dim cadenaConexion As String = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                                        "Jet OLEDB:Database Password=contraseña;" & _
                                        "Data Source=" & IO.Path.Combine(Application.StartupPath, "CEDIMAPRI.accdb")

    Te comento que si estás utilizando el proveedor Microsoft.ACE.OLEDB.12.0, no es necesario que en la cadena de conexión incluyas el parámetro Persist Security Info, porque al consultar el valor de la propiedad ConnectionString de un objeto OleDbConnection una vez abierta la conexión, ésta SIEMPRE te va a devolver el valor de la contraseña de la base de datos, con independencia que el valor del parámetro sea True o False.


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    • Marcado como respuesta Gregorio_77 jueves, 21 de junio de 2018 21:18
    miércoles, 20 de junio de 2018 7:16
    Moderador

Todas las respuestas

  • "Gregorio_77" escribió:

    > Hice el modelado en access 2013 y la guarde en la carpeta Debug de mi proyecto,
    > luego guarde al abrir el proyecto y realizar la conexión con la misma ella me
    > pregunto si deseaba hacer una copia respaldo en la carpeta del proyecto tal
    > cual era la recomendación de muchos. Mi inconveniente son los siguientes:
    >
    > 1.- Cuando ingreso registros nuevos desde el proyecto estos los toma perfectamente
    > e incluso al realizar las consultas, éstas son visualizadas en el formulario
    > respectivo, pero al salir del proyecto estos datos no están.
    >
    > 3.- Por ultimo realice una comparación en las fechas de la base de datos de la de
    > Debug con la del proyecto y la que estaba en la carpeta degug estaba más actualizada
    > por lo que asumí que el proyecto tomaba los datos de ahí, realice una modificación
    > en las tablas de la base de datos al incluir un campo nuevo en una de sus tablas.
    > Al abrir el proyecto no veía este campo en la tabla que había sido modificada.

    Hola, Gregorio:

    No has indicado la cadena de conexión que estás utilizando en tu proyecto para conectarte con la base de datos de Access 2013, pero por lo que describes en el contenido de tu mensaje, tiene toda la pinta que estás utilizando la base de datos alojada en la carpeta Debug, por tanto, no es de extrañar que ésta se encuentre más actualizada que la base de datos alojada en la carpeta del proyecto.

    El "problema" (por llamarlo de alguna manera) se encuentra en que has agregado el archivo de base de datos a tu proyecto, por lo que cada vez que ejecutes tu aplicación DENTRO DEL IDE de Visual Studio, por defecto se copiará SIEMPRE a la carpeta de resultados (Debug o Release, de acuerdo a la configuración que tengas activa) el archivo de base de datos existente en la carpeta del proyecto, sobrescribiendo todos los cambios que hayas efectuado en la existente en la carpeta Debug.

    Te comento que esto solamente ocurre cuando ejecutas tu aplicación desde el propio IDE de Visual Studio, no si ejecutas directamente tu aplicación fuera de Visual Studio.

    Ahora, la pregunta sería, ¿con cual de las dos bases de datos deseas en realidad trabajar? ¿Con la existente en la carpeta del proyecto o con la existente en la carpeta Debug o Release?

    Si es con la base de datos existente en la carpeta del proyecto, tan solo basta con EXCLUIR DEL PROYECTO (no eliminar del proyecto) la referencia al archivo de base de datos del proyecto, y modificar el parámetro Data Source de la cadena de conexión, para indicar la ruta completa donde se encuentra el archivo de la base de datos de Access que vas a utilizar en tu aplicación.

    ¿Que deseas mantener la base de datos en el proyecto y trabajar con la existente en la carpeta Debug? Entonces tendrás que modificar las propiedades del elemento del proyecto que hace referencia a la base de datos de Access e indicarle que solamente se copie a la carpeta de salida (Debug o Release) solamente si la base de datos del proyecto es posterior a la existente en dicha carpeta de salida.

    Para modificar las propiedades de la base de datos, haz lo siguiente.

    1º) Selecciona el archivo de base de datos en la ventana Explorador de Soluciones.

    2º) Pulsar la tecla F4 para abrir la ventana Propiedades.

    3º) Dirígete a la propiedad Copiar en el directorio de resultados, y le especificas el valor Copiar si es posterior.

    4º) Verificar también que el valor Acción de compilación se encuentre en Ninguna.

    Así es como entiendo que deberías de quedar configurado el elemento del proyecto que hace referencia a tu base de datos de Access:


    Si estableces el valor Copiar si es posterior, esto quiere decir que si realizas alguna modificación, por muy pequeña que esta sea, en la base de datos existente en la carpeta de proyecto, cuando vuelvas a ejecutar tu aplicación desde el IDE de Visual Studio, se sobrescribirá sin previo aviso el archivo de base de datos existente en la carpeta de salida (Debug o Release).

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.


    lunes, 18 de junio de 2018 15:59
    Moderador
  • Buenas noches Enrrique, muchas gracias por tus aportes.

    Mi intención es en todo momento es guardar en la base de datos ubicada en la carpeta Debug, ahora bien la ruta que hago para la llamada es la siguiente;

    "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + My.Computer.FileSystem.CurrentDirectory + "\CEDIMAPRI.accdb;Persist Security Info=True;Jet OLEDB:Database Password=contraseña"

    no estoy seguro pero creo que ésta ruta hace referencia a la carpeta debug.

    Hice un capture de pantalla de la base de datos

    "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + My.Computer.FileSystem.CurrentDirectory + "\CEDIMAPRI.accdb;Persist Security Info=True;Jet OLEDB:Database Password=contraseña"



    miércoles, 20 de junio de 2018 0:12
  • "Gregorio_77" escribió:

    > Mi intención es en todo momento es guardar en la base de datos ubicada en la
    > carpeta Debug, ahora bien la ruta que hago para la llamada es la siguiente;
    >
    > "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + My.Computer.FileSystem.CurrentDirectory +
    > "\CEDIMAPRI.accdb;Persist Security Info=True;Jet OLEDB:Database Password=contraseña"
    >
    > no estoy seguro pero creo que ésta ruta hace referencia a la carpeta debug.

    Al estar utilizando el valor devuelto por la propiedad CurrentDirectory, en principio puede que se tome la ruta de la carpeta Debug al ser el directorio de trabajo actual, pero no quiere decir que en el transcurso de la ejecución de tu aplicación dicho directorio sea siempre el mismo.

    Debes de tener en cuenta que la propiedad My.Computer.FileSystem.CurrentDirectory en realidad hace referencia al valor de la variable  Environment.CurrentDirectory, que es la variable de entorno que establece y devuelve la ruta de acceso completa del directorio de trabajo actual, que mientras que no se modifique, será la ruta de la carpeta que contiene el ejecutable de tu aplicación, por tanto, si estás ejecutando tu aplicación desde el IDE de Visual Studio, será la ruta de la carpeta Debug o Release, de acuerdo a la configuración que actualmente tengas activa.

    Si tu intención es utilizar la base de datos de Access que se encuentra en la misma carpeta que contiene el ejecutable de tu aplicación, sea la carpeta Debug, Release, MiCarpeta, o como se llame la misma, la verdad que es suficiente con especificar en el parámetro Data Source solamente el nombre del archivo de Access:

       ...;Data Source=CEDIMAPRI.accdb;...

    ¿Que deseas especificar explícitamente la ruta completa del ejecutable que inició tu aplicación? Entonces mejor será que utilices el valor de la propiedad Application.StartupPath tal y como indico a continuación:

         Dim cadenaConexion As String = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                                        "Jet OLEDB:Database Password=contraseña;" & _
                                        "Data Source=" & IO.Path.Combine(Application.StartupPath, "CEDIMAPRI.accdb")

    Te comento que si estás utilizando el proveedor Microsoft.ACE.OLEDB.12.0, no es necesario que en la cadena de conexión incluyas el parámetro Persist Security Info, porque al consultar el valor de la propiedad ConnectionString de un objeto OleDbConnection una vez abierta la conexión, ésta SIEMPRE te va a devolver el valor de la contraseña de la base de datos, con independencia que el valor del parámetro sea True o False.


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    • Marcado como respuesta Gregorio_77 jueves, 21 de junio de 2018 21:18
    miércoles, 20 de junio de 2018 7:16
    Moderador
  • Excelente, ya me lee la base de datos y guarda los registros excelentemete bien.

    Gracias por el apoyo

    jueves, 21 de junio de 2018 21:19