Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-08-2008
einarcito einarcito is offline
Miembro
 
Registrado: may 2008
Posts: 101
Poder: 16
einarcito Va por buen camino
insercion en multiples tablas

hola:
como hago para insertar datos en multiples tablas?? ovbiamente relacionadas con una clave. como seria en este caso la sentencia , estoy usando sql server 2000...
me podrian escribir un ejemplito??? gracias
Responder Con Cita
  #2  
Antiguo 30-08-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Aunque el tema ya se contesto aqui, me parece que todavía no te queda claro.
Para hacer un insert en varias tablas es lo mismo que en una.
No importa si están relacionadas o no, esto solo afectara a la hora de relacionar la información, pero para mostrarla, no para insertarla o modificarla.
Ahora, para insertar lo que se necesita es:
1- Tener un query.
2- Hacer una sentencia sql.
3- Grabar la informacion.

El paso 3 se puede hacer, o bien directo, osea que se insertara pero no se veran los resultados en el form o viéndolos, me explico con este comando (ExecSQL) se hace directo y simplemente abriendo el query se hace visible.
Veamos que usa la sentencia sql:
las palabras Instert Into, seguido por el nombre de la tabla, entre paréntesis (Los campos que se quieren insertar de esa tabla) a continuacion la palabra Values y entre parentesis los (datos que quieres insertar).
Veamos un ejemplo:
El Query: Query1
La tabla: Tabla1
Los Campos: Id, Nombre, Apellido.
La Información: Edit1, Edit2, Edit3.
Ahora insertaremos en esa tabla:
Código Delphi [-]
Query1.SQL.Text := 'Insert Into Tabla1 (Id, Nombre, Apellido) '+
                          'Values (' +Edit1.Text+', '+Edit2.Text+', '+Edit3.Text')'
Query1.ExecSQL; // aqui la informacion se graba.
// Si quisieramos ver la informacion en algun dbgrid etc, abriríamos el query directamente, con (Query1.Open) en vez de (Query1.ExecSQL).
Ejemplo de dos o mas tablas:
El Query: Query1 (uno solo)
Las tablas: Tabla1, tabla2
Los Campos: tabla1(Id, Nombre, Apellido), tabla2(Id, telefono1,telefono2).
La Información: Edit1, Edit2, Edit3, Edit4, edit5.
Ahora insertaremos en las tablas:
Código Delphi [-]
// tabla1
Query1.SQL.Text := 'Insert Into Tabla1 (Id, Nombre, Apellido) '+
                          'Values (' +Edit1.Text+', '+Edit2.Text+', '+Edit3.Text')'
Query1.ExecSQL;
// tabla2
Query1.SQL.Text := 'Insert Into Tabla2 (Id, Telefono1, Telefono2) '+
                          'Values (' +Edit1.Text+', '+Edit4.Text+', '+Edit5.Text')'
Query1.ExecSQL;
// y asi sucesivamente.
Como ves el campo ID esta relacionado en las dos tablas y la información esta en el Edit1.
Espero que te quede mas claro y te sirva.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #3  
Antiguo 30-08-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Solo una aclaración, que a mi modo de ver no estaría demás, si me lo permiten:

Cuando se trata de insertar en tablas relacionadas deben hacerse según el orden de dependencias:

1. Insertar en tabla maestro
2. Insertar en tabla esclava

Esto es así, pues lo exige la integridad referencial.

Y no olvidar que el valor a insertar y que forma de enlace entre ambas tablas debe ser el mismo. Es decir que si por ejemplo, en la tabla maestro se inserta un registro con ID igual a 1234, al insertar un registro "esclavo" correspondiente a dicho "maestro", ese mismo valor de ID debe ser ingresado en la clave foranea.

El compañero Caral muestra un ejemplo en el que hay dos campos ID. Uno de ellos es para la tabla1 y otro para la tabla2. Si tabla2 es la tabla dependiente ese ID debe ser la clave foránea y contar con su propia clave primaria (Normalmente hablar de ID hace alusión a la clave primaria).

Recuerden que para garantizar la referencia de una relación 1 a M se necesita de:
1. Un campo "ID" en tabla maestra que sea clave primaria.
2. Un campo "ID" en tabla esclava que sea clave primaria, para identificar a un registro esclavo de otro.
3. Un campo "FID" en tabla esclava que sea clave foranea. Este se unirá al ID de la tabla maestra para formar la relación.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #4  
Antiguo 30-08-2008
einarcito einarcito is offline
Miembro
 
Registrado: may 2008
Posts: 101
Poder: 16
einarcito Va por buen camino
muchas gracias a caral y a delphiusss buenos consejos para realziar la practica ya lo he resuelto al problema, muchas graciassss ahora una ultima pregunta, me conviene q mi tabla 1 en el id(pk) sea de tipo auto incremente y la (fk) de la tabla 2 tmb?? porq si no lo definiera asi me daria error cunado quisiera ingresar un datos con el mismo id... TENKUUU
Responder Con Cita
  #5  
Antiguo 30-08-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por einarcito Ver Mensaje
muchas gracias a caral y a delphiusss buenos consejos para realziar la practica ya lo he resuelto al problema, muchas graciassss ahora una ultima pregunta, me conviene q mi tabla 1 en el id(pk) sea de tipo auto incremente y la (fk) de la tabla 2 tmb?? porq si no lo definiera asi me daria error cunado quisiera ingresar un datos con el mismo id... TENKUUU
Nunca en mi vida vi un FK que sea autoincremental. Razonandolo un poco... ¿como va a adivinar el motor a que registro maestro le pertenece? Si el campo FK de la tabla esclava es autoincremental tendrás un gran y divino lio de cocos: registros esclavos asociados a registros maestros posiblemente inexistentes.

Un ejemplo:
1. Ingresas un registro maestro: PK = 1.

Necesitas ingresar a dicho registro maestro tres esclavos. Veamos añadimos:
1. Agreamos el primer registro: PK = ?, FK = 1
2. Agregamos el segundo registro. OK = ? + ?, FK = 2 ¡Error! No se ha encontrado un registro correspondiente en la tabla maestra.

Un campo ID no necesariamente debe ser incremental. Por ello el signo de preguntas.

Como debes intuir, depende de otras cuestiones, necesidades y en ciertos casos por el gusto de cada uno.

Si empleas autoincrementales no debes agregar en la consulta dicho campo. El motor solito se encarga de asignarle valor.

Como dice el amigo Caral: No importa si están o no relacionadas. Si no estan relacionadas las tablas mediante PK y FK, el motor no protesta. Protesta en caso de que SI estén relacionadas y se rompa el principio de integridad referencial. ¿Está ahora más claro? Espero que si.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #6  
Antiguo 30-08-2008
einarcito einarcito is offline
Miembro
 
Registrado: may 2008
Posts: 101
Poder: 16
einarcito Va por buen camino
mas claro que el aguaaaaaaaa!!!!! muchas gracias
Responder Con Cita
  #7  
Antiguo 02-09-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por einarcito Ver Mensaje
mas claro que el aguaaaaaaaa!!!!! muchas gracias
Disculpa, he estado fuera estos días.
No pude sentir un poco de preocupación por el tema... ¿Realmente se entendió lo que quise decir? No tengo problemas en explicar mejor el tema.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Consultas Múltiples theloren07 Conexión con bases de datos 11 12-07-2007 15:24:32
insercion en ado vroa74 Conexión con bases de datos 1 28-03-2007 00:13:27
insercion en GDB vroa74 Conexión con bases de datos 1 22-03-2007 11:09:39
Multiples instancias Phacko Varios 1 07-09-2004 15:40:25
multiples registros azaagh Conexión con bases de datos 8 10-06-2004 02:45:55


La franja horaria es GMT +2. Ahora son las 12:09:37.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi