Foros del Web » Programando para Internet » ASP Clásico »

Insert en dos tablas simultaneamente.

Estas en el tema de Insert en dos tablas simultaneamente. en el foro de ASP Clásico en Foros del Web. Haber no se bien como explicarme, espero me haga entender tengo que hacer lo siguiente tengo que mandar a grabar en dos tablas algo asi ...
  #1 (permalink)  
Antiguo 01/10/2007, 14:03
 
Fecha de Ingreso: junio-2007
Mensajes: 253
Antigüedad: 16 años, 10 meses
Puntos: 0
Pregunta Insert en dos tablas simultaneamente.

Haber no se bien como explicarme, espero me haga entender tengo que hacer lo siguiente tengo que mandar a grabar en dos tablas algo asi como cabecera y detalle, pero me esta dando problemas, es decir se guarda la cabecera todo bien se genera el codigo automunerico por ejemplo codigo_cabecera=50, pero cuando envia a grabar el detalle no me esta guardando en ese codigo me esa insertando en el codigo_cabecera anterior es decir codigo_cabecera=49, aqui les dejo mi codigo espero me puedan ayudar, de verdad estoy desesperado con este problema:

/* Aqui llama al detalle */

<form name="actual" method="post" action="procesa.asp">
<table width="95%" border="0" cellspacing="5" cellpadding="0">

<tr>
<td width="60%" align="left" valign="middle">Otra Fecha :</td>
<td width="5%"> <select name="dia" >
<option value="0">D&iacute;a</option>
<% Dim I
For I = 1 To 30
%>
<option value="<%=(I)%>"> <%=(I)%></option>
<%
next
%>
</select>
<select name="mes" >
<option value="0">Mes</option>
<% Dim M
For M = 1 To 12
%>
<option value="<%=(M)%>"> <%=(M)%></option>
<%
next
%>
</select>
<select name="anio" >
<option value="0">A&ntilde;o</option>
<% Dim J
For J = 2007 To 2020
%>
<option value="<%=(J)%>"> <%=(J)%></option>
<%
next
%>
</select>
</td>
</tr>
<tr>
<td width="40%" align="left" valign="top" >Resumen:</td>
<td width="60%" valign="middle">
<textarea name="resumen" rows="4" cols="25" ></textarea>
</td>
</tr>
<tr>
<td width="40%" class="BOL020_pBLACK6" align="left" valign="middle">Fecha
Acciones del Per&iacute;odo:</td>
<td width="5%"><select name="dia2" >
<option value="0">D&iacute;a</option>
<% Dim L
For L = 1 To 30
%>
<option value="<%=(L)%>"> <%=(L)%></option>
<%
next
%>
</select>
<select name="mes2" >
<option value="0">Mes</option>
<% Dim N
For N = 1 To 12
%>
<option value="<%=(N)%>"> <%=(N)%></option>
<%
next
%>
</select>
<select name="anio2" >
<option value="0">A&ntilde;o</option>
<% Dim A
For A = 2007 To 2020
%>
<option value="<%=(A)%>"> <%=(A)%></option>
<%
next
%>
</select></td>
</tr>
<tr>
<td width="40%" align="left" valign="top">Acciones:</td>
<td width="60%" valign="middle">
<textarea name="acciones" rows="4" cols="25" >
</td>
</tr>
<tr>
<td width="40%" align="left" valign="middle">Fecha Pasos:</td>
<td width="5%"><select name="dia3" >
<option value="0">D&iacute;a</option>
<% Dim B
For B = 1 To 30
%>
<option value="<%=(B)%>"> <%=(B)%></option>
<%
next
%>
</select>
<select name="mes3" >
<option value="0">Mes</option>
<% Dim C
For C = 1 To 12
%>
<option value="<%=(C)%>"> <%=(C)%></option>
<%
next
%>
</select>
<select name="anio3" >
<option value="0">A&ntilde;o</option>
<% Dim D
For D = 2007 To 2020
%>
<option value="<%=(D)%>"> <%=(D)%></option>
<%
next
%>
</select> </td>
</tr>
<tr>
<td width="40%" align="left" valign="top">Resumen Pasos:</td>
<td width="60%" valign="middle">
<textarea name="pasos" rows="4" cols="25" ></textarea>
</td>
</tr>
<tr valign="bottom">
<td width="40%" align="left" height="50">
<input type="hidden" name="rec" value="<%= Request.QueryString("rec") %>">
</td>
<td width="60%" height="50">
<input type="submit" name="Submit" value="Insertar" >
</td>
<input type="hidden" name="vend" value="<%= Request.form("vend") %>">
<input type="hidden" name="cliente_id" value="<%= Request.form("cliente_id") %>">
<input type="hidden" name="user_id" value="<%= Request.form("user_id") %>">
<input type="hidden" name="dia4" value="<%= Request.form("dia4") %>">
<input type="hidden" name="mes4" value="<%= Request.form("mes4") %>">
<input type="hidden" name="anio4" value="<%= Request.form("anio4") %>">
</tr>
</table>
</form>


/* Esta es procesa.asp */

<%@LANGUAGE="VBSCRIPT"%>
<!--#include file="../conexiones/conxion.asp" -->
<%
Dim titulo
if(request.form("vend") <> "") then titulo = request.form("vend")
Dim client
if(request.form("cliente_id") <> "") then client = request.form("cliente_id")
Dim abogado
if(request.form("user_id") <> "") then usuario= request.form("user_id")
Dim fecha
if(request.form("dia4") <> "") then fecha = request.form("dia4")+"/"+request.form("mes4")+"/"+request.form("anio4")

if(request.form("rec") <> "") then inserta__p1 = request.form("rec")
'if(request.form("dia1") <> "") and (request.form("mes1") <> "") and (request.form("anio1") <> "") then fecha_actual = request.form("dia1")+"/"+request.form("mes1")+"/"+request.form("anio1")

if(request.form("resumen") <> "") then inserta__p2 = request.form("resumen")
if(request.form("dia") <> "") and (request.form("mes") <> "") and (request.form("anio") <> "") then inserta__p3 = request.form("dia")+"/"+request.form("mes")+"/"+request.form("anio")

if(request.form("acciones") <> "") then inserta__p4 = request.form("acciones")
if(request.form("dia2") <> "") and (request.form("mes2") <> "") and (request.form("anio2") <> "") then inserta__p5 = request.form("dia2")+"/"+request.form("mes2")+"/"+request.form("anio2")

if(request.form("pasos") <> "") then inserta__p6 = request.form("pasos")
if(request.form("dia3") <> "") and (request.form("mes3") <> "") and (request.form("anio3") <> "") then inserta__p7 = request.form("dia3")+"/"+request.form("mes3")+"/"+request.form("anio3")
%>

<%
set inserta = Server.CreateObject("ADODB.Command")
inserta.ActiveConnection = MM_conxion_STRING
inserta.CommandText = "INSERT INTO CABECERA (vendedor, cliente_id, user_id, fecha) VALUES ('" + Replace(titulo, "", "''") + "'," + Replace(client, "'", "''") + "," + Replace(usuario, "'", "''") + ", Replace(fecha, "'", "''") + "' ) "
inserta.CommandType = 1
inserta.CommandTimeout = 1
inserta.Prepared = true
inserta.Execute()
'inserta.Close
%>

<%
set consul = Server.CreateObject("ADODB.Recordset")
consul .ActiveConnection = MM_bolon_STRING
consul .Source = "SELECT top 1 caso_id FROM CABECERA Order by (cabecera_id) DESC"
consul .CursorType = 0
consul .CursorLocation = 2
consul .LockType = 3
consul .Open()
consulid=(consul .Fields.Item("cabecera_id").Value+1 )
%>

<%
set insertadet = Server.CreateObject("ADODB.Command")
insertadet.ActiveConnection = MM_conxion_STRING
insertadet.CommandText = "INSERT INTO DETALLE (codigo_cabecera, fec, cdetalle_ant, cdetalle_fec_ant, cdetalle_act, cdetalle_fec_act, cdetalle_pos, cdetalle_fec_pos, cdetalle_estado) VALUES (" + Replace(consulid, "'", "''") + ",'" + Replace(fecha, "'", "''") + "','" + Replace(inserta__p2, "'", "''") + "','" + Replace(inserta__p3, "'", "''") + "','" + Replace(inserta__p4, "'", "''") + "','" + Replace(inserta__p5, "'", "''") + "','" + Replace(inserta__p6, "'", "''") + "','" + Replace(inserta__p7, "'", "''") + "',1) "
'response.write(inserta.commandtext)
insertadet.CommandType = 1
insertadet.CommandTimeout = 0
insertadet.Prepared = true
insertadet.Execute()
response.redirect("bol_admin_case.asp")
%>
  #2 (permalink)  
Antiguo 01/10/2007, 15:14
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 18 años, 3 meses
Puntos: 7
Re: Insert en dos tablas simultaneamente.

set consul = Server.CreateObject("ADODB.Recordset")
consul .ActiveConnection = MM_bolon_STRING
consul .Source = "SELECT top 1 caso_id FROM CABECERA Order by (cabecera_id) DESC"
consul .CursorType = 0
consul .CursorLocation = 2
consul .LockType = 3
consul .Open()
consulid=(consul .Fields.Item("cabecera_id").Value+1 )

Estas asignando un campo que no llamas en la sentencia SQL. Además, ¿para que sumas 1 al valor? Si lo que quieres es el valor del campo primario del ultimo registro insertado, no le sumes 1, ya que lo dejaras huérfano.

consulid=(consul .Fields.Item("caso_id").Value)

Ya nos contarás.


Un saludo



Un saludo
__________________
"Tus pecados son el estiércol sobre el que florecerán las flores de tus virtudes" - Gerald Messadié -
  #3 (permalink)  
Antiguo 01/10/2007, 16:06
 
Fecha de Ingreso: junio-2007
Mensajes: 253
Antigüedad: 16 años, 10 meses
Puntos: 0
Pregunta Re: Insert en dos tablas simultaneamente.

hola tammander, gracias por responden tan pronto, te comento que esto yo lo tengo bien

set consul = Server.CreateObject("ADODB.Recordset")
consul .ActiveConnection = MM_bolon_STRING
consul .Source = "SELECT top 1 cabecera_id FROM CABECERA Order by (cabecera_id) DESC"
consul .CursorType = 0
consul .CursorLocation = 2
consul .LockType = 3
consul .Open()
consulid=(consul .Fields.Item("cabecera_id").Value+1 )

eso estaba bien lo que pasa es que cuando lo postee yo le he cambiado pero yo lo tenia bien, ahora bien le sumo uno porq como mencione antes me esta grabando el detalle en el codigo de cabecera anterior al que me dberia de grabar por eso le incremente uno para ver si asi me graba donde es pero me salta un error que me dice que no encuetra esa secuencia en la tabla DETALLE.

Espero alguien me ayude
  #4 (permalink)  
Antiguo 02/10/2007, 02:04
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 18 años, 3 meses
Puntos: 7
Re: Insert en dos tablas simultaneamente.

Hace algun tiempo pusieron esta solución cuando se trabaja con MSSQL Server:

Sustituye esto:

Código:
<%
set inserta = Server.CreateObject("ADODB.Command")
inserta.ActiveConnection = MM_conxion_STRING
inserta.CommandText = "INSERT INTO CABECERA (vendedor, cliente_id, user_id, fecha) VALUES ('" + Replace(titulo, "", "''") + "'," + Replace(client, "'", "''") + "," + Replace(usuario, "'", "''") + ", Replace(fecha, "'", "''") + "' ) "
inserta.CommandType = 1
inserta.CommandTimeout = 1
inserta.Prepared = true
inserta.Execute()
'inserta.Close
%>

<%
set consul = Server.CreateObject("ADODB.Recordset")
consul .ActiveConnection = MM_bolon_STRING
consul .Source = "SELECT top 1 caso_id FROM CABECERA Order by (cabecera_id) DESC"
consul .CursorType = 0
consul .CursorLocation = 2
consul .LockType = 3
consul .Open()
consulid=(consul .Fields.Item("cabecera_id").Value+1 )
%>
por esto

Código:
set inserta = Server.CreateObject("ADODB.Command")
set consul = Server.CreateObject("ADODB.Recordset")
inserta.ActiveConnection = MM_conxion_STRING
 strQuery ="INSERT INTO CABECERA (vendedor, cliente_id, user_id, fecha) VALUES ('" + Replace(titulo, "", "''") + "'," + Replace(client, "'", "''") + "," + Replace(usuario, "'", "''") + ", Replace(fecha, "'", "''") + "' ); SELECT @@IDENTITY AS 'Identity' FROM CABECERA"
inserta.CommandType = 1
inserta.CommandTimeout = 1
inserta.Prepared = true
set consul = inserta.Execute(strQuery).NextRecordset
consulid = consul("Identity")
A ver si te sirve. No estoy muy seguro si el método Execute del Command de ADO permite esta asignación.


Un saludo
__________________
"Tus pecados son el estiércol sobre el que florecerán las flores de tus virtudes" - Gerald Messadié -
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:40.