Ver Mensaje Individual
  #4 (permalink)  
Antiguo 29/03/2007, 14:58
Avatar de CésarBalaguer
CésarBalaguer
 
Fecha de Ingreso: octubre-2006
Ubicación: en mi casa
Mensajes: 181
Antigüedad: 18 años, 7 meses
Puntos: 0
De acuerdo Re: añadir una lista de registros

Son varias cosas las que veo.
primero: no te recomiendo usar el select *
dos motivos, primero hace mas lento tu programa, segundo lo que veo en tu còdigo es que unicamente utilizas las dos columnas que incluyes en el select por lo tanto no necesitas recuperar todas las columnas, sin embargo puede asumirse.

segundo: (en tu còdigo pones)
Do While Not RS.Eof
%>

<form method="POST" action="proc_compras2.asp" name="proc_compras">
<tr>
<td class="head4"><%=UCASE(TRIM(rs("tipo_moneda")))%></td>
<td align="center" class="head3"><input type="text" name="stock" disabled readonly id="stock" size="10" maxlength="10" class="text1" value="<%=RS("stock")%>" style="text-align:right"></td>
<td align="center" class="head3"><input type="text" name="cantidad" onBlur="calculo(this.form)" size="10" maxlength="10" class="text1" style="text-align:right"></td>
<td align="center" class="head3"><input type="text" name="precio" onBlur="calculo(this.form)" size="10" maxlength="10" class="text1" style="text-align:right"></td>
<td align="center" class="head3"><input type="text" name="total" disabled readonly id="total" onBlur="calculo(this.form)" size="10" maxlength="10" class="text1" style="text-align:right"></td>
</tr>
</form>
<%
RS.MoveNext
Loop
---*
eso significa que estas creando un FORM por cada registro de tu tabla y todos los FORM con el mismo nombre, es decir, si tienes mil registros tendras 1000 FORM en tu pagina todas llamadas igua; yo te recomendarìa hacer uno solo fuera del while.
---*

Tercero:
lo que muestras no tiene nada que ver con la inserciòn en tu tabla, ese es otro problema...
en tu codigo pones:

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "casa_cambios"
sSQL="SELECT * FROM movimientos where tipo_moneda = '" & tipo_moneda & "'"
set RS = Conn.Execute(sSQL)
do while not rs.eof
sSQL1="Insert Into movimientos (tipo_moneda,stock,cantidad,precio,total) values ('" & tipo_moneda & "'," & stock & "," & cantidad & "," & precio & "," & total & ")"
rs.movenext
set rs = Conn.Execute(sSQL1)

loop
rs.close
----*
ahi veo algunas cosas. Primero haces un SELECT * (cosa que en todos los POST pongo que no recomiendo ) pero indistintamente de eso, haces el SELECT a la tabla movimientos y luego haces un recorrido al cursor que ese query te devuelve, dentro de el estas insertando nuevamente en la tabla movimientos, eso ya me parece extraño dado a que estarìas duplicando informaciòn, sacas data de una tabla para insertarla en la misma tabla.
Otra cosa que notè, ejecutas el INSERT con el mismo recordset con el que haces el bucle, para el insert no necesitas un recordset, solo la conexion
Conn.Execute("insert ...... ")

y para terminar este mensaje algo largo...
si hay forma de hacer una insersiòn masiva sin necesidad de hacer un recorrido.

sSql = "INSERT INTO TABLA_1 (COLUMNAS) SELECT COLUMNAS FROM TABLA_2 WHERE CONDICION "
Conn.Execute(sSql)

tomando en consideraciòn que la cantidad de columnas de tu insert tiene que ser la misma que en tu select y los tipos de datos de las columnas del insert deben ser las mismas que la del select y en el mismo orden.