none
Consulta Maestro - Detalle RRS feed

  • Debate general

  • Buenas Noches tengo una pregunta;

    Cuando se hace un formulario que este consta de cabecera(Maestro) y sus detalles si la persona se equivoca en ingresar un dato es correcto o no que se pueda modificar? o si lo ingreso ya queda alli.

    Lo digo porque un maestro - detalle tiene una relacion por cierto codigo 

    si tengo algo asi (imagen) donde rcodigo es parte del maestro pero lo contiene el detalle esa es la relación y el cccodigo viene hacer el de autoincremento de los detalles la pregunta es que si deseara modificar algo del 1801002 (rcodigo) modificaria a todos los demas  q contienen 1801002. 

    Debo agregar otro codigo para poder hacer dicha edicion? o no es correcto hacer ediciones en este tipo de situaciones.

    Esta tabla es una informacion que me han proporcionado para adaptar a un formulario entonces estoy analizando ese punto.

    Es modificable el detalle o la cabecera o ambos?

    Saludos y Gracias

    Espero me haya dejado entender

    sábado, 3 de marzo de 2018 3:07

Todas las respuestas

  • Hola:

    SI no te he entendido mal, lo que te interesa es que cada vez que cambies un código '1801002' te lo cambie en todos, es así?. Si es afirmativo, tendrías que hacer una instrucción sql de tipo update, para que cuando le indiques en el where de la misma el código, te lo cambie en todos los códigos que sean 1801002.

    "... WHERE rcodigo = '1801002'"

    Ese 1801002 se lo tendrías que pasar como parámetro, ya que puede ser diferente cada vez.

    rcodigo = @rcodigo

    "... WHERE rcódigo = @rcodigo

    Solo te faltaría asignar el valor que tiene que llevar rcódigo, el cual podrías obtenerlo de la modificación que haces en el datagridview.

    Puedes asignar al parámetro rcodigo, la variable que contenga el código a modificar.

    En principio eso seróa lo necesario.

    Un saludo.

    Gemma

    sábado, 3 de marzo de 2018 6:58
  • Hola:

    SI no te he entendido mal, lo que te interesa es que cada vez que cambies un código '1801002' te lo cambie en todos, es así?. Si es afirmativo, tendrías que hacer una instrucción sql de tipo update, para que cuando le indiques en el where de la misma el código, te lo cambie en todos los códigos que sean 1801002.

    "... WHERE rcodigo = '1801002'"

    Ese 1801002 se lo tendrías que pasar como parámetro, ya que puede ser diferente cada vez.

    rcodigo = @rcodigo

    "... WHERE rcódigo = @rcodigo

    Solo te faltaría asignar el valor que tiene que llevar rcódigo, el cual podrías obtenerlo de la modificación que haces en el datagridview.

    Puedes asignar al parámetro rcodigo, la variable que contenga el código a modificar.

    En principio eso seróa lo necesario.

    Un saludo.

    Gemma

    Buenos Dias lo que estoy preguntando es si es correcto aceptar que se haga modificaciones a algo que es cabera - detalle

    Porque cuando modificas algo suponga quiero modificar solo la fila 1801002-01 pero su rcodigo  lo contiene otras filas mas entonces pienso que se van a modificar las demas filas que contienen ese valor, o deberia tomar 1801002-01 ese valor para modificar y no el otro?

    sábado, 3 de marzo de 2018 14:00
  • La respuesta corta es:  Sí, es permisible editar tanto el maestro como el detalle bajo circunstancias normales.

    ¿Hizo usted la base de datos de donde se muestra eso?  Si lo hizo o si ha examinado las tablas, verá que la tabla maestro tiene una clave primaria, que es ese consecutivo que usted tiene ahí como 1801002.  Luego la tabla detalle tiene un campo de clave foránea que almacena valores como esos.  Pero realmente alterar el valor en la tabla detalle de este campo de clave foránea no aterará el valor en el maestro.  Además, una instrucción UPDATE que cambie dicho valor puede hacerlo exactamente en un único registro de la tabla detalle, así que los demás pueden perfectamente, no verse afectados.


    Jose R. MCP
    Code Samples

    domingo, 4 de marzo de 2018 2:07
    Moderador
  • OK. Y si quiero buscar y traer los datos al form desde una vista relacionada por el codigo 1801002? lo he intentado de la forma forma que busco ese codigo en el datagridview y al darle doble click se vean pero me sale justo un problema de codigo y no se pues como ese valor es parte de la cabecera y se repite para cada detalle creo esta generando problemas pues al parecer no sabe cual escoger de las filas que debo hacer?

    Por ejemplo busco el 1801002 y me da que tiene 5 detalles 01,02,03,04,05 lo que quiero es que la seleccionar la fila esta se vaya al formulario estoy usando eso:

    CCustodia.txtCodCadena.Text = dgvCadCustodia.Item(0, e.RowIndex).Value

    ...

    que valor es el que deberia escoger para editar tomando en cuenta que esta vista viene de 3 tablas

    en la sentencia WHERE Columna=@Columna

    Tabla1 consta de CodigoCadena

    Tabla2 CodigoCadena y CodigoMuestra

    Tabla3 CodigoCadena y CodigoMuestra




    domingo, 4 de marzo de 2018 15:32
  • Tal vez lo que usted necesita es un repaso de claves foráneas porque el asunto es relativamente sencillo.  Tal vez lo que tiene es un problema de concepto.  Repasemos.

    La relación más común es "0 a muchos".  Un registro de una tabla puede tener cero o más registros relacionados de otra tabla.

    En T-SQL:

    Create Table tblMaestros
    (
        ID int Not Null Identity(1, 1) Primary Key Clustered
        , ...
    );
    
    Create Table tblDetalles
    (
        ID int Not Null Identity(1, 1) Primary Key Clustered
        , MaestroID int Null Constraint FK_tblDetalles_MaestroDebeExistir Foreign Key References tblMaestros(ID)
        , ...
    );
    
    --Y si el detalle a su vez tiene detalles...
    Create Table tblDetallesDetalles
    (
        ID int Not Null Identity(1, 1) Primary Key Clustered
        , DetalleID int Null Constraint FK_tblDetallesDetalles_MaestroDebeExistir Foreign Key References tblDetalles(ID)
        , ...
    );
    

    Nótese cómo el segundo nivel de detalles solamente tiene clave foránea a la tabla de detalles.  No necesito el identificador del maestro en este segundo nivel.

    Entonces una consulta que obtenga todos los detalles de un maestro particular:

    Select
        *
    From
        tblDetalles
    Where
        MaestroID = @idMaestro;

    Y una consulta que obtenga los detalles de un detalle:

    Select
        *
    From
        tblDetallesDetalles
    Where
        DetalleID = @idDetalle;

    Entonces si usted tiene una grilla llena con registros maestros y quiere mostrar una sub-grilla de detalles cuando se le hace doble clic a un registro en la grilla de maestros, corre la primera consulta, donde @idMaestro sería el identificador del maestro seleccionado en la grilla.

    Eso devolverá únicamente aquellos detalles que tengan el id del maestro seleccionado.  Pueden ser cero o más.  ¿Le queda claro?  ¿Resuelve esto sus dudas?


    Jose R. MCP
    Code Samples

    domingo, 4 de marzo de 2018 23:35
    Moderador
  • Ok. Aun no lo hago pero ya lo tomare en cuenta
    martes, 6 de marzo de 2018 1:43
  • Hola webjose disculpe  si yo tuviera una tabla maestro detalle que a  la vez  esos detalles tengan otros detalles  como podría insertarles datos  a las tres  tablas  en una misma  consulta?
    domingo, 28 de febrero de 2021 13:43