Los Foros de ASPTutor.com
Home | Perfil | Registrarse | Temas Activos | Miembros | Buscar | FAQ
Usuario:
Password:
 Todos los Foros
 ADO
 Problema de Variables en
 Foro Bloqueado  Tema Bloqueado


Autor Temas
Ban
Starting Member


48 Posts
Mensajes - 30 Oct 2001 :  22:34:00  Ver Perfil  Enviar Email
Hola de nuevo,

Cada día voy avanzando, pero... uff hay momentos que desespero:::

Mi "carro de la compra" por así decirlo, llega a su punto culminante. Sale una pantalla donde resume todo los productos elegidos. Perfecto, ningun problema!! Pero... estoy intentando introducir el resultado en una Base de Datos y no hay manera. Consigo dar de alta los nuevos registros pero no con el contenido del pedido! Si (ver más abajo) en AAA,BBB,CCC pongo Nombre,100,2000 en la página ASP, se introducen la cantidad de registros segun productos con (Nombre,100,2000) en la nueva base de datos. Esto lo hice para ver si funcionaba. Pero claro, se deben introducir las VARIABLES reales del pedido (abiBag(bagProductID,i),abiBag(bagItemQuantity,i), abiBag(bagPrecioEnEuros,i)....

En fin... Si alguien puede darme un golpe de mano... será super agradecido.

Un saludo,


Esta es la página de resultados de la cesta, todo correcto menos la introducción de datosen la base ItemsPedido (ProductoID = Texto, Cantidad y PrecioEnEuros = Numerico)

<!--#include file="bag.inc"-->
<%
iCount = Session("ItemCount")
abiBag = Session("Bag")
Set Conn = Server.CreateObject("ADODB.Connection")

If Request.QueryString("ProductoID") <> "" Then
If iCount = Session("MaxItems") Then
ReDim Preserve abiBag(AttributesPerProduct,iCount + 2)
Session("MaxItems") = iCount + 2
End If
fAddProductNeeded = True
For i = 1 to iCount
If (abiBag(bagProductID,i) = CLng(Request.QueryString("ProductoID"))) Then
fAddProductNeeded = False
End If
Next
If (True = fAddProductNeeded) Then
Conn.Open ("DSN=myweb.com.mydns")
strSQL = "SELECT * FROM Copiadoras WHERE ProductoID = " & CLng(Request.QueryString("ProductoID"))
Set RS = Conn.Execute(strSQL)
If Not RS.EOF Then
iCount = iCount + 1
Session("ItemCount") = iCount
abiBag(bagProductID,iCount) = RS("ProductoID")
abiBag(bagModelo,iCount) = RS("Modelo")
abiBag(bagStockNumber,iCount) = RS("StockNumber")
abiBag(bagPrecioEnPesetas,iCount) = RS("PrecioenPesetas")
abiBag(bagPrecioEnEuros,iCount) = RS("PrecioenEuros")
abiBag(bagItemQuantity,iCount) = 1
Session("Bag") = abiBag
RS.Close
Conn.Close
End If
End If
End If
Select Case Request("Action")
Case "Añadir más productos"
RecalcBag abiBag, iCount
Response.Redirect "bag.asp"

Case "Recalcular"
RecalcBag abiBag, iCount

Case "Cancelar Pedido"
iCount=0
Session("ItemCount") = iCount
Response.Redirect "bag.asp"

Case "Confirmar"
' RecalcBag
Response.Redirect "proceso.asp"

End Select
%>

<HTML>
<HEAD>
<TITLE>SOSTITLE>
</HEAD>
<BODY>
<form method=POST action="<%=Request.ServerVariables("SCRIPT_NAME")%>">
<%
nSumSubtotals = 0
For i = 1 To iCount
%>
<%=abiBag(bagModelo,i)%>
<%=abiBag(bagStockNumber,i)%>
<%=abiBag(bagItemQuantity,i)%>
<%=(abiBag(bagPrecioEnEuros,i))&" "&"€"%>
<%=(abiBag(bagPrecioEnEuros,i) * abiBag(bagItemQuantity,i))&" "&"€"%>
<%
If (abiBag(bagPrecioEnEuros,i)) <> "" Then
nSumSubtotals = nSumSubtotals + (abiBag(bagPrecioEnEuros,i) * abiBag(bagItemQuantity,i))
End If

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open ("DSN=myweb.com.mydns")

' ##### AQUI VIENE EL PROBLEMA ##### No se como insertar las variables de la cesta en: (AAAAAAAA,BBBBBBBBBB,CCCCCCCCC) Todo funciona bien, se inserta el registro en la Tabla pero no las variables!!!
' ##################################

strSQL = "INSERT INTO ItemsPedido(ProductoId,Cantidad,PrecioEnEuros) VALUES ("AAAAAAAA,BBBBBBBBBB,CCCCCCCCC")"
Conn, Execute(strSQL)

Next
%>
<P><b>Subtotal:</b>
<%=(nSumSubtotals)&" "&"€"%>
<input type=SUBMIT name="Action" value="Confirmar">
<% End If %>
<input type=SUBMIT name="Action" value="Cancelar Pedido">
</form>
</BODY>
</HTML>


Editado por - Ban on 30 Oct 2001 23:11:43

asharak
Junior Member


210 Posts
Posted - 07 Nov 2001 :  14:50:14  Ver perfil  Enviar e-mail  Enviar asharak un Mensaje Yahoo!e
Hola Ban ...
vamos a ver
Lo que ocurre es que no creas bien la cadena SQL ...
strSQL = "INSERT INTO ItemsPedido(ProductoId,Cantidad,PrecioEnEuros) VALUES ("AAAAAAAA,BBBBBBBBBB,CCCCCCCCC")"
prueba con algo asi (siempre secciono la cadena SQL en varias lineas para mas comodidad, pero esto es algo personal):

strSQL = " INSERT INTO ItemsPedido ("
strSQL = strSQL & "ProductoId,Cantidad,PrecioEnEuros"
strSQL = strSQL & ") VALUES ("
strSQL = strSQL & "'" & abiBag(bagProductID,i) & "',"
' *** Como dices que el ID es una cadena,
' *** lo pongo entre comillas simples
' *** Y remplazo las comillas simples de dentro
' *** por dos comillas simples para que no tengas problemas
strSQL = strSQL & abiBag(bagProductID,i) & ","
' *** Para los valores numericos es conveniente que
' *** compruebes que realmente son numeros antes de
' *** intentar insertarlos en la BD
strSQL = strSQL & abiBag(bagItemQuantity,i)
abiBag(bagPrecioEnEuros,i) & ")"
' Por ultimo ejecutas la select
Conn.Execute(strSQL)

Otra cosa que tienes mal es que pones esto dentro del bucle:
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open ("DSN=myweb.com.mydns")

si haces eso creas una conexion con la BD en cada vuelta y consumiras mucha memoria y tiempo, pon esta conexion antes del bucle, no dentro

Espero que te sirva ;)
asharakInicio Pagina

asharak
Junior Member


210 Posts
Posted - 07 Nov 2001 :  14:51:51  Ver perfil  Enviar e-mail  Enviar asharak un Mensaje Yahoo!e
Se me ha olvidado poner lo del remplazo de las comillas simples por dos comillas simples...
ahi va:

strSQL = strSQL & "'" & Remplace(abiBag(bagProductID,i),"'","''") & "',"

Suerte ;)
asharakInicio Pagina

asharak
Junior Member


210 Posts
Posted - 07 Nov 2001 :  14:58:08  Ver perfil  Enviar e-mail  Enviar asharak un Mensaje Yahoo!e
Te escribo de nuevo tada la SQL porque se ve que estoy tonto hoy y acabo de ver que entre cortar y pegar y los comentarios y esta minuscula pantalla de escribir mensajes, he escrito un barullo sin pies ni cabeza ..............................

strSQL = " INSERT INTO ItemsPedido ("

strSQL = strSQL & "ProductoId,Cantidad,PrecioEnEuros"

strSQL = strSQL & ") VALUES ("

strSQL = strSQL & "'" & Trim(Replace(abiBag(bagProductID,i),"'","''")) & "',"

strSQL = strSQL & abiBag(bagItemQuantity,i) & ","

strSQL = strSQL & abiBag(bagPrecioEnEuros,i) & ")"

Conn.Execute(strSQL)


Creo que ya esta, joder, he puesto tb un Trim en el ID que corta los caracteres en blanco a ambos lados de una cadena y te incluyo tb el Replace y ala, a correr...

Ufff
asharakInicio Pagina

Ban
Starting Member


48 Posts
Posted - 15 Nov 2001 :  19:36:49  Ver perfil  Enviar e-mail
asharak, gracias por tu interés!!
Esto ya casi esta...

Ahora el problema esta en el Formato de "PrecioenEuros" (da el error abajo indicado al hacer el INSERT), si suprimo esta entrada, los campos ProductoId y Cantidad si que se almacenan en la DB ItemsPedido ¿Alguna sugerencia?


Tabla ItemsPedido:
------------------
orderitemsid (Autonumber/PrimaryKey)
PedidoID (Text)
ProductoID (Text)
Modelo (Text)
StockNumber (Text)
Cantidad (Number)
PrecioenEuros (Currency/Standard/4decimales)

Tabla Copiadoras:
------------------
ProductoID (Autonumber/PrimaryKey)
Tipo (text)
Modelo (Text)
Descripcion (Text)
StockNumber (Text)
PrecioenEuros (Currency/Standard/4decimales)

El Error:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][Controlador ODBC Microsoft Access] El número de valores de consulta y el número de campos de destino son diferentes.

/m2/pedidos/proceso.asp, line 148

El Código:

142 strSQL = " INSERT INTO ItemsPedido ("
143 strSQL = strSQL & "ProductoId,Cantidad,PrecioenEuros"
144 strSQL = strSQL & ") VALUES ("
145 strSQL = strSQL & "'" & Trim(Replace(abiBag(bagProductID,i),"'","''")) & "',"
146 strSQL = strSQL & abiBag(bagItemQuantity,i) & ","
147 strSQL = strSQL & abiBag(bagPrecioEnEuros,i) & ")"
148 Conn.Execute(strSQL)


PD: La conexion ya está fuera del Bucle (Gracias de nuevo)

Edited by - Ban on 15 Nov 2001 21:14:23

Edited by - Ban on 15 Nov 2001 21:28:13

Edited by - Ban on 15 Nov 2001 21:28:41Inicio Pagina

asharak
Junior Member


210 Posts
Posted - 16 Nov 2001 :  19:00:38  Ver perfil  Enviar e-mail  Enviar asharak un Mensaje Yahoo!e
Probablemente este error sucede pq separas los decimales con una coma, en vez de con un punto, como la coma es el separador de los campos te dara un error al aparecer un campo de mas ...
Los decimales deben separarse con un punto, para cmabiar la coma por el punto puedes utilizar otro replace, sustituye la última linea ...

strSQL = strSQL & Replace(abiBag(bagPrecioEnEuros,i),",",".") & ")"

Espero que sea esto ;) suerte
asharakInicio Pagina

Ban
Starting Member


48 Posts
Posted - 17 Nov 2001 :  00:14:52  Ver perfil  Enviar e-mail
asharak, en fin,,,,

De nuevo, +Gracias!!

Ban

Edited by - Ban on 17 Nov 2001 00:17:35Inicio 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