none
Introducir en la bd (POO) RRS feed

  • Pregunta

  • Hola estoy haciendo una aplicación de una registradora PTV, y me dicen que tengo que crear clientes en un formulario

    Donde guardo los clientes registrado. Todo esto es orientado a objetos y conectado con base de datos en (Access)

    Os muestro las clases donde vamos hacer nuestra aplicación en orientado a objetos.

    Tenemos GESTION_BD (nos conectamos a la base de datos), ACCIONES(esta se encargará de de los eventos que ejecute el usuario) y SERVICES(Esta clase se encargará de trabajar con bases de datos, guardar, editar  y eliminar etc...)

    Buenos aquí os dejo la programación que tengo. si me pudieran echar una mano que estoy estudiando. Gracias

     

     

    Imports System.Data.OleDb.OleDbConnection

    Imports System.Data

    Imports System.Data.OleDb

     

    Namespace GestionBD

        Public Class GestionSQL

           

            Public oConexion As New OleDbConnection()

            Public oDataAdapter As OleDbDataAdapter

            Public oDataSet As DataSet

            Friend CadConn$

     

            Public Sub openConnection()

                'CREACIÓN DEL OBJETO DE CONEXIÓN

     

                'Declaramos la cadena de conexión apuntando a la carpeta Bin del proyecto

                oConexion.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _

                                             "Data source=\REGISTRADORA.mdb;"

     

                Try

                    oConexion = New OleDbConnection(CadConn)

                Catch ex As Exception

                    NivelError = "Crítico"

                    excepcion = " Error al conectar con datos"

                    descripcion = ex.Message

                    ExToString = ex.ToString

                End Try

                'abrir conexion

                oConexion.Open()

            End Sub

     

     

    'Esta clase se encarga de realizar los eventos que ejecute el usuario sobre la pantalla.

        'Ejemplo:

        'Si presiona el botón guardar, guardará los datos introducidos por el usuario sobre la pantalla y

        'llamará a la clase ServicioCliente para que lo guarde en la base de datos.

     

     

    Imports PANTALLA.AltaCliente

     

    Namespace ACCIONES

        Public Class AccionesAltaCliente ‘aquí temos al boton de introducir datos

     

            Private altaCliente As New PANTALLA.AltaCliente

     

            ' CONSTRUCTOR DE LA CLASE

            Public Sub New(ByVal altacliente As AccionesAltaCliente)

                Me.altaCliente = New PANTALLA.AltaCliente

            End Sub

            Public Sub guardarCliente()

                Try

                    altaCliente.getServiceCliente().saveCliente(altaCliente.getTxtNombre())

                    altaCliente.getTxtApellido1()

                    altaCliente.getTxtApellido2()

                    altaCliente.getTxtDNI()

                    altaCliente.getTxTlfParticular()

                    altaCliente.getTxTlfMovil()

                    altaCliente.getTxtCodPostal()

                Catch ex As Exception

                    MsgBox(ex.Message.ToString)

                End Try

            End Sub

     

        End Class

    End Namespace

     

     

     

     

    'Esta clase se encargará de trabajar con bases de datos

        '(guardar, eliminar, modificar... ect)

     

    Imports GESTION_BD.GestionBD.GestionSQL

     

     

    Namespace SERVICES ‘aqui tenemos la consulta de nuestro nuevo cliente

     

        Public Class ServicesCliente

     

    Public Sub saveCliente(ByVal nombre As String, ByVal primerApellido As String, _

                                   ByVal segundoApellido As String, ByVal dni As String, _

                                   ByVal tlfParticular As String, ByVal tlfMovil As String, _

                                   ByVal direccion As String, ByVal codPostal As String)

     

                Try

                    Dim oDataRow As DataRow

                    oDataRow = oDataSet.Tables("CLIENTE").NewRow

     

                    oGestionSQL.oConexion.Open()

                    Dim consulta As String

                    consulta = "INSERT INTO CLIENTE VALUES ("

                    consulta += "" + nombre + ""

                    consulta += "" + primerApellido + ""

                    consulta += "" + segundoApellido + ""

                    consulta += "" + dni + ""

                    consulta += "" + tlfParticular + ""

                    consulta += "" + tlfMovil + ""

                    consulta += "" + direccion + ""

                    consulta += "" + codPostal + ")"

     

                    oGestionSQL.executeSql(consulta)

     

                Catch ex As Exception

                    MsgBox("Error al introducir un cliente")

                End Try

     

            End Sub

     

        End Class

    End Namespace

    Private Sub btnAñadir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAñadir.Click

     

    'INTRODUCIMOS LOS DATOS EN LA BD

        accionesAltaCliente.guardarCliente()

     

    End Sub


    Matiasg
    • Cambiado Enrique M. Montejo jueves, 18 de agosto de 2011 14:07 acceso a datos (De:Lenguaje VB.NET)
    miércoles, 17 de agosto de 2011 11:30

Todas las respuestas

  • Hasta aqui, puede estar todo bien, salvo la llamada a SaveCliente, que la veo incorrecta (yo creo que lo que querias poner es todos los altaCliente.get*() separados por comas, para pasarselos como parametros a la funcion SaveCliente).

    Ahora bien, tu pregunta cual es? En ese codigo tenias problemas?, quieres implementar alguna accion diferente y no sabes por donde empezar? No entiendes algo de lo que hace tu metodo? Se un poquito mas concreto y te podremos dar alguna pista.

    Si lo que estas haciendo es una practica de programacion para alguna asignatura, mi consejo es que intentes "pegarte" un poquito con el codigo, probar alternativas, e intentar saber por que funcionan (o no) las cosas. Asi podremos ayudarte mejor y podras comprender el por qué de todo ;)

    miércoles, 17 de agosto de 2011 11:48
  • Hola Carles

    sí, perdona la pregunta era "poder guardar ó añadir datos en la bd en el formulario Alta Cliente". como ves es solo los datos personales.

    1. mi pre gunta es = "poder guardar ó añadir datos en la bd en el formulario Alta Cliente"
    2. quieres implementar alguna accion diferente = no
    3. ¿entiendes algo de lo que hace tu metodo? = si
    4. es una practica de programacion para alguna asignatura = si

    es solo para que ayuden para comprender mas las cosas y a sí cojer mas conocimiento y asimilar el porque.

     

    gracias Carles vila

    saludos Matías


    Matiasg
    miércoles, 17 de agosto de 2011 14:54
  • algo no me quedo claro la clase AccionesAltaCliente  dodne la defines ? este en el propio proyecto Windows Applicatin o esta en un del tipo Class Libary

    mas que nad alo planteo porque hay una linea extraña

    Private altaCliente As New PANTALLA.AltaCliente

    de casualidad eta no sera la instancia del formulario, no ?

    porque si es asi eso esta incorrecto, proque asi no estas enviando la info del forma que visualzias sino que es una instancia nueva que no tiene datos

    deberias desde el form desde el evento btnAñadir_Click para los datos, pero la clase AccionesAltaCliente no denerias tener referencia alguna a el formulario debria trabajr simrep con datos simples

    [N-Tier] – Desarrollo en capas - Ejemplo Facturacion - parte 2

    veras que desde la presentaicon se cargan objetos simples, aqui para hacerlo facil use dataset tipado, pero peude hacerlo tambien con clases y se lo pasas a la siguiente capa, pero la clase AccionesAltaClienteno deberia tener referencia a un form o controles de presentacion, sino que deberia recibir datos simples, colecciones, clases, dataset tipados, tipos int, string, etc simrpe la info no el control

     

    saludios


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    miércoles, 17 de agosto de 2011 15:15
  • Hola,

    A mi lo que no me ha quedado claro es...

    ¿Donde cierras la conexion a las base de datos? o_O

    Saludos!!


    MCP Senior Analyst - http://www.secondnug.com/
    viernes, 19 de agosto de 2011 8:25
    Moderador
  • hola Javier,

    no hace falta cerrar la conexion, pero se le pondria oConexion.Close().

    lo si me pudiera ayudar es sobre el metodo de guardarCliente() porque me parece que esta mal de la clase AccionesClientes y puede ser el motivo a la hora de guardar datos.

    la verdad es que al intoducir datos en le formulario cliente no veo que guarde datos, ni tengo ningun error por try, catch ... que me indique que pasa, es como si no estuviese conectado la base de datos.

    saludos!!!


    Matiasg
    sábado, 20 de agosto de 2011 14:58
  • Hola,

    ¿No hace falta cerrar la conexion? o_O

    Cunado subas eso a produccion y se conecten 50 usuarios y a ninguno le cierres la conexion... veras lo que pasa.

    Prero bueno, a mi me extreña incluso que compile. el metodo guadar cliente lo tienes asi:

        Public Sub guardarCliente()

                Try

                    altaCliente.getServiceCliente().saveCliente(altaCliente.getTxtNombre())

                    altaCliente.getTxtApellido1()

                    altaCliente.getTxtApellido2()

                    altaCliente.getTxtDNI()

                    altaCliente.getTxTlfParticular()

                    altaCliente.getTxTlfMovil()

                    altaCliente.getTxtCodPostal()

                Catch ex As Exception

                    MsgBox(ex.Message.ToString)

                End Try

            End Sub

    (Es un Copy-Paste que conste)

    Pero sin embargo el metodo saveCliente tiene esta firma:

    Public Sub saveCliente(ByVal nombre As String, ByVal primerApellido As String, _

                                   ByVal segundoApellido As String, ByVal dni As String, _

                                   ByVal tlfParticular As String, ByVal tlfMovil As String, _

                                   ByVal direccion As String, ByVal codPostal As String)

    ¿Como es posible si quiera que compile si has llamado al metodo saveCliente con un unico parametro?

    Me temo que nos han copiado el codigo de manera incompleta, con lo que no podemos ayudarte mucho.

    Un saludo.


    MCP Senior Analyst - http://www.secondnug.com/
    lunes, 22 de agosto de 2011 6:00
    Moderador
  • Hola Matias,

     

    A simple vista te diria que la sentencia de Inserción está mal. Cada campo deberia ir separado por una coma y no veo que tu lo hagas.

    Por otro lado, yo haría caso a Javier, y pondria un Connection.Close, o mejor aun usaria un bloque Using 

    Y por ultimo te recomendaria utilizar parametros en lugar de concatenar los valores para evitar los ataques de Inyeccion de SQL.

     

    Un saludo


    Javier Torrecilla
    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi Blog: Jtorrecilla
    Enlace a Faq de Winforms en Ingles Muy bueno
    TabControl con Mejoras
    lunes, 22 de agosto de 2011 6:00
    Moderador
  • pondria un Connection.Close, o mejor aun usaria un bloque Using

    coincido totalmente

    el tema es que para esto vas a tener que deshacerte de tu clase GestionSQL,  se que la has creado para ayudarte pero termian perjudicando al codigo

    define la cadena de conecion en el App.config y toma desde ahi el valor que usarias en el SqlConnection, en el link que proporcione lo hago de esta forma si quiers ver como aplicarlo

    aqui tambien lo explico

    Archivos de Configuración - Una introducción (1/3)

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    lunes, 22 de agosto de 2011 6:20
  • Hola Leandro:

    ¿Qué son las key de las que hablas?¿para que sirven como se implementan?

    Gracias. Un saludo



    Héctor Van Moji

    sábado, 26 de enero de 2013 12:21