Los Foros de ASPTutor.com
Home | Perfil | Registrarse | Temas Activos | Miembros | Buscar | FAQ
Usuario:
Password:
 Todos los Foros
 ASP
 INSERT INTO ASP
 Foro Bloqueado  Tema Bloqueado


Autor Temas
bettycues
Starting Member


7 Posts
Mensajes - 04 Apr 2008 :  12:17:35  Ver Perfil  Enviar Email
Hola a todos:

Os explico

Tengo una pagina web para administrar una base de datos.

La base de datos es sobre libros, con lo cual las tablas de la base son:

Libros->id_libro, nombre, id_autor
Autor->id_autor, autor

Tengo un formulario para insertar nuevos libros.

En el formulario tenemos la opcion de elegir el autor, con un combobox, o insertar un nuevo autor, aparte de insertar un nuevo libro

Formulario insertar

<blue><table align="center">
<tr><td>&nbsp;</td></tr>
<tr><td>&nbsp;</td></tr>
<TR>
<td>Selecciona apellido del autor</td>
<td><select name="autor2">
<option selected value=""></option>
<%
do while not rs2.eof
%>
<option value="<%=rs2("id_autor")%>" id="<%=rs2("id_autor")%>"><%=rs2("autor")%></option>
<%rs2.movenext
loop
%>
</select></td></tr>
<tr>
<td>Si no existe el autor, introduzca el nombre y el apellido</td><td><input name="autor" type="text"></td>
</tr>

<tr>
<td>Introduzca el número de libro</td>
<td><input name="id_libro" type="text"></td>
</tr>

<tr>
<td>Introduzca el Nombre del libro</td>
<td><input name="Nombre" type="text"></td>
</tr>

<tr>
<td colspan="2" align="center"><input type="submit" name="Submit" value="Insertar"></td>
</tr>
<tr><td colspan="2">&nbsp;</td></tr>
<tr><td colspan="2" align="center"><a href="verlibro.asp">ATRAS</a></td></tr>

</table>
</blue>

Mi problema es que si el autor no esta creado, hago el insert into para crearlo, pero al intentar crear el libro con esa id de autor no se como puedo pasar los datos.

He hecho un insert into para crear el autor, un select para coger el id de ese autor y otro insert into para crear el libro con el id_autor.

Formulario 2

<blue>
<%if Request.QueryString("autor")="" then
strSQL = "INSERT INTO AUTOR (autor) Values('" & Request.QueryString("autor") & "')"
Set RS = Conn.Execute(strSQL)
strSQL2= "select id_autor where autor.id_autor=" & request.QueryString("autor") &""
set rs2 = Conn.execute(strSQL2)
strSQL3 = "INSERT INTO Libro ( id_libro, libro, id_autor ) Values('" & Request.QueryString("id_libro") & "','" & Request.QueryString("nombre") & "', id_autor )SELECT Libro.id_libro, Libro.libro, Libro.id_autor FROM Autor INNER JOIN Libro ON Autor.id_autor = Libro.id_autor"
set rs3 = Conn.execute(strSQL3)
%>
</blue>

En realidad, queria poner el id_autor creado, en una variable para poder utilizarlo en la segunda sql Insert Into

Me podriais dar alguna idea de cual es la mejor forma para hacer los dos insert into?¿?????

Muchas gracias a todos y un saludo

AYER HOY MAÑANA Y SIEMPRE

buho_nero
Moderator

España
1316 Posts
Posted - 07 Apr 2008 :  09:32:12  Ver perfil  Enviar e-mail
Para un diseño resistente tienes que tener en cuenta la concurrencia, lo que te lleva a las transacciones.

La consulta que se debería hacer sería:

SELECT TOP 1 id_autor FROM Autor ORDER BY id_autor desc

Lo que pasa es que si tienes varios usuarios concurrentes puede pasar que una nueva inserción de autor, de un usuario, pueda colarse entre la inserción y el select de otro, con lo que tu consulta de la clave sería errónea.

Para un diseño robusto debes encapsularlo todo en una transacción, no es nada complicado, seguro que puedes encontrar manuales por ahí.

Algunas veces toca trabajar con librerías que no tienen un sistema de transaccíones, y hay que hacer unas historias bastante enrrevesadas; la idea es generar en tiempo de ejecución una "clave única" (lo mas usado es el tiempo en milis) que meterías en la tabla de autores y así podrías hacer el SELECT posterior a la inserción.

Inicio Pagina

bettycues
Starting Member


7 Posts
Posted - 07 Apr 2008 :  12:08:41  Ver perfil  Enviar e-mail
Hola

Gracias por la respuesta. La verdad es que solo va a ser utilizado por un usuario, asiq no tendremos problemas de ese tipo.

Voy a probar lo que me has dicho...

Muchas gracias de todas formas

AYER HOY MAÑANA Y SIEMPREInicio Pagina

luz peña
Starting Member

Chile
8 Posts
Posted - 17 Apr 2008 :  22:53:41  Ver perfil  Enviar e-mail
te recomendaria que hiciera tres tablas uno para autor otro para libro y un tercero que una los tres. despues juega con la vase llenando el formulario y que el terce formulario tome los dato de los otro dos bueno espero que me entienda o sino pideme que te espesifique mas

Inicio Pagina

   
 Foro Bloqueado  Tema Bloqueado
Ir a:
Los Foros de ASPTutor.com Los Foros de ASPTutor.com
Ir al principio de la Página

 Imprimir Tema
 

Descargas de manuales¦ Ejemplos de código ¦ Artículos mas visitados ¦ Envía tu articulo ¦ Foros ¦
  Libro de visitas ¦Crea un enlace con ASPTutor 
 

    © 2001-Hasta hoy  Pedro Rufo Martín  contactar