none
actualizar dataset tipado con varias tablas .NET

    Question

  • Holaa!

    Tengo una duda "existencial"

    Estoy programando en visual basic studio .Net, y quiero hacer una gestion de clientes, tengo una tabla clientes y asociada a esta tabla otras tablas como tipo_Iva, Banco, Forma_Pago y alguna más. Entonces en la pantalla de gestión cliente quiero poner todos los campos de la tabla de cliente y se tienen que mostrar también algunos campos de sus tablas relacionadas, como nombre_banco, Nombre_Forma_de_pago, que pertenecen a las otras tablas.

    Entonces estoy pensando en dos posibilidades, la que hasta ahora me sale, pero no se si es la forma más elegante de hacerla, que es crear un DataSet tipado por cada tabla, entonces tengo en el formulario tengo que tener todos los dataset de las tablas aunque no quiera modificar los datos de las tablas relacionadas, en este caso tengo muchos dataset y por cada dataset tengo que hacer fill según el código del cliente, en este caso el dataset de cliente crea automáticamente el comando update y puedo actualizarlo sin problema.

     

    El otro modo es hacer un dataset con una consulta en la que capturo ya todos los valores de cliente y los valores asociados que me intersan de las otras tablas, en este caso solo tengo un dataset tipado con varias tablas dentro, pero el problema es que no me crea el comando update automáticamente, y si se lo meto "a pelo" me da un error en ejecución el update que dice " error de parametro _?24 no tiene valor predeterminado".

    Entonces la duda es cual es mejor sistema? es correcta la segunda opción? como se tendría que crear el comando update sólo para la tabla cliente?

    Espero vuestra ayuda.

    Gracias.

    Thursday, October 21, 2010 10:25 AM

All replies

  • hola

    Entonces la duda es cual es mejor sistema? es correcta la segunda opción? como se tendría que crear el comando update sólo para la tabla cliente?

    lo que sucede es que al utilizar una query que imagino incluye JOIN entre varias tablas no podras actualizarla ya que un comando UPDATE o INSERT solo impactan contra una tabla a la vez, es logico que no genere estos comandos

    para que el DataSet tipado genere automaticamente esto un datatable solo puede referenciar una tabla, como lo tenias al principio

    lo que podrias hacer son dos DataSet, uno que sea de solo lectura la cargar la info del formulario, y otro para la actualizacion

    solo que el volcado de los datos de la pantalla a este segundo dataset sera manual, o mejor dicho deberas programarlo explciitamente, buscando el registro del cliente he impactando los cambios del usuario, o si se agrega un nuevo cliente deberas inser el registro nuevo en el dataset y al final hacer el Update(), por ahi no es tan automatico pero de esta forma tendrias un medio para recuperar la informacion completa y otro para actualizarla

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Thursday, October 21, 2010 11:35 AM
  • Gracias por responder!

    Y no puedo hacer un update sólo de la tabla Clientes aunque tenga el dataset con varias tablas utilizando Join?

    porque aunque no me lo ha creado automáticamente, le he añadido copiando en el editor la misma cadena de update que me había creado automáticamente otro dataset que tenía solo de la tabla clientes. En ese caso al principio me deba un error a la hora de hacer Update que era "error parametro_24 no tiene valor predeterminado" esto lo soluciné comparando los dos dataset, el de clientes solo y el de clientes con varias tablas, me di cuenta que unos parámetros había que poner null por defecto , los puse todos y se solucionó, pero ahora me da otro error, me dice "error de concurrencia que modifico 0 de los 1 registros" y no actualiza, por eso me plantee si estaba intentando hacer una cosa muy rara o imposible. Se te ocurre como solucionarlo?

    Tu solución me parece acertada, pero en ese caso, que es mejor tu solucion o tener un dataset por cada tabla, y hacer un fill de cada una de ellas según el código del cliente?

    Yo quería evitar tener 5 dataset y hacer fill de cada una de ellas, me parecía más elegante tener todo en un dataset, y luego sólo actualizar los campos del cliente, porque los demás solo son informativos.

    El Código de update que meto es el mismo que me genera el dataset clientes:

    UPDATE  CLIENTE
    SET       CODCLI = ?, NOMBRE = ?, NOMBRECOM = ?, DNI = ?, CP = ?, DIRECCION = ?, TFNO = ?, MOVIL = ?, EMAIL = ?, OBS = ?, FP = ?, CONTACTO = ?, 
               DIAPAGO1 = ?, DIAPAGO2 = ?, DIAPAGO3 = ?, DTO = ?, CODBANCO = ?, NUMCUENTA = ?, DIRECBANCO = ?, FAX = ?, FAMILIA = ?, IVA = ?
    WHERE   (CODCLI = ?) AND (? = 1 AND NOMBRE IS NULL OR
               NOMBRE = ?) AND (? = 1 AND NOMBRECOM IS NULL OR
               NOMBRECOM = ?) AND (? = 1 AND DNI IS NULL OR
               DNI = ?) AND (? = 1 AND CP IS NULL OR
               CP = ?) AND (? = 1 AND DIRECCION IS NULL OR
               DIRECCION = ?) AND (? = 1 AND TFNO IS NULL OR
               TFNO = ?) AND (? = 1 AND MOVIL IS NULL OR
               MOVIL = ?) AND (? = 1 AND EMAIL IS NULL OR
               EMAIL = ?) AND (? = 1 AND FP IS NULL OR
               FP = ?) AND (? = 1 AND CONTACTO IS NULL OR
               CONTACTO = ?) AND (? = 1 AND DIAPAGO1 IS NULL OR
               DIAPAGO1 = ?) AND (? = 1 AND DIAPAGO2 IS NULL OR
               DIAPAGO2 = ?) AND (? = 1 AND DIAPAGO3 IS NULL OR
               DIAPAGO3 = ?) AND (? = 1 AND DTO IS NULL OR
               DTO = ?) AND (? = 1 AND CODBANCO IS NULL OR
               CODBANCO = ?) AND (? = 1 AND NUMCUENTA IS NULL OR
               NUMCUENTA = ?) AND (? = 1 AND DIRECBANCO IS NULL OR
               DIRECBANCO = ?) AND (? = 1 AND FAX IS NULL OR
               FAX = ?) AND (? = 1 AND FAMILIA IS NULL OR
               FAMILIA = ?) AND (? = 1 AND IVA IS NULL OR
               IVA = ?)

    Puedes ayudarme?

    Gracias.

    Friday, October 22, 2010 7:45 AM