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

Problema con recordset

Estas en el tema de Problema con recordset en el foro de ASP Clásico en Foros del Web. Hola a todos!!! En Dreamweaver intento enviar datos de una tabla que está dentro de un formulario a la base de datos y me da ...
  #1 (permalink)  
Antiguo 12/04/2005, 09:13
 
Fecha de Ingreso: febrero-2005
Mensajes: 73
Antigüedad: 19 años, 4 meses
Puntos: 0
Busqueda Problema con recordset

Hola a todos!!!

En Dreamweaver intento enviar datos de una tabla que está dentro de un formulario a la base de datos y me da un error que creo que no tendría que dar. A ver si alguien sabe ver que es lo que hago mal. Ahí va el código:

<form name="form1" method="post" action="http://localhost/samgest/Inserinto.asp">
<% if request.form="" then %>
<table height="34" border="1">
<tr>
<td width="90" height="28"><input name="txtAsientoDe" type="text" size="12"></td>
<td width="90"><input name="txtAsientoA" type="textfield" size="12"></td>
<td width="100"><input name="txtDiari" type="textfield2" size="15"></td>
<td width="100"><input type="textfield3" name="txtData" size="15"></td>
<td width="90"><input type="textfield4" name="NumDe" size="12"></td>
<td width="90"><input type="textfield5" name="NumA" size="12"></td>
<td width="110"><input type="textfield6" name="Desc" size="25"></td>
<td width="100"><input type="textfield6" name="Introduit" xsize="17"></td>
</tr>
</table>
<%else
'Creamos los objetos
set oConn=Server.CreateObject("ADODB.Connection")
set rs=Server.CreateObject("ADODB.Recordset")

'Conectamos con DSN a la base de datos
oConn.Open "DSN=iva" 'abrimos la bd

set rs = createobject("ADODB.Recordset") 'abrimos un recordset para guardar el resultado de la sentencia SQL
rs.CursorType = 1
rs.LockType = 3
Sqltxt = "SELECT * FROM Tabla1"
rs.open Sqltxt, "DSN = iva"


rs.Addnew 'añadimos fila en la tabla de la bd
rs("AsientoDe") = request.form("txtAsientoDe")
rs("AsientoA") = request.form("txtAsientoA")
rs("Diario") = request.form("txtDiari")
rs("Fecha") = request.form("txtData")
rs("DocDe") = request.form("txtNumDe")
rs("DocA") = request.form("txtNumA")
rs("Descripción") = request.form("txtDesc")
rs("Introducido por") = request.form("txtIntroduit")
rs.Update

rs.close Sqltxt
rs.close 'cerramos la variable
oConn.close 'cerramos la tabla


set rs=Nothing 'para cerrar la variable y dejar el espacio de memoria vacío
set oConn=Nothing 'para cerrar la variable y dejar el espacio de memoria vacío
End if %>
<p>
<input type="submit" name="Submit" value="Enviar">
</p>
</form>



Cuando lo ejecuto, introduzco datos y le doy a Enviar me salta un error de que no encuentra el nombre del orígen de datos. He revisado el ODBC y no falta nada.

Gracias anticipadas!!!!!!!!!!!!!!
  #2 (permalink)  
Antiguo 12/04/2005, 13:23
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 4 meses
Puntos: 146
Supongo el error ocurre en alguna de las lineas que contienen "DSN=iva"
Intenta cambiando tu método de conexión or DSNLESS u OLEDB, si indicas la BD que usas podríamos colaborarte con la cadena respectiva.
  #3 (permalink)  
Antiguo 12/04/2005, 13:57
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 19 años, 2 meses
Puntos: 2
Hay varias cositas en tu codigo de conexion que no son necesarias, o resultad rebundantes, te recomiendo usar este metodo:

'Abrir conexion con la base de datos
Set oConn = Server.CreateObject("ADODB.Connection")
oConn.Open "dsn=tuDSNName;uid=tuUserName;pwd=tuUserPasswo rd"

'Consultar a la base de datos.
Sqltxt = "SELECT * FROM Tabla1"
set rs = oConn.Execute(Sqltxt)

'Ahora rs contiene todos los datos que necesitas
Sqltxt = "INSERT into Tabla1 values(" _
& "'" & Cstr(request.form("txtAsientoDe") & "'" _
& "'" & Cstr(request.form("txtDiari") & "'" _
& "'" & Cstr(request.form("txtData") & "'" _
& "'" & Cstr(request.form("txtNumDe") & "'" _
& "'" & Cstr(request.form("txtNumA") & "'" _
& "'" & Cstr(request.form("txtDesc") & "'" _
& "'" & Cstr(request.form("txtIntroduit") & "'" _
& ")"

'Liberar memoria, por que ya no necesitamos los valores en el Recordset
rs.Close()
set rs = nothing

'Ejecutar el SQL para insertar el campo
oConn.Execute(Sqltxt)

'Cerrar conexion a la base de datos
oConn.Close()
set oConn = nothing

Felicidades por usar el = nothing, eso te asegura que liberas cualquier rastro de la conexion a la base de datos o a la fila de resultados, y claro liberar el total de la memoria que estaba usando esa variable, eso es muy bueno a la larga.

Bueno, mi sintaxis no es del todo correcta porque no conozco el tipo de datos que estas manejando, la funcion Cstr te asegura que estas mandando una cadena, esta entre comillas ( ' ) porque es dato tipo cadena, el insert, en cuestion de values, tal vez antes ocupes los nombres de los campos, dependiendo de la estructura de la tabla, pero bien, esa es la mejor manera de crear la conexion, todo es mas limpio, debesras hacer muchas pruebas.

Pero de esa forma lo que logras es un codigo mas compacto y mas limpio.

Espero que te sirva

Suerte!!
  #4 (permalink)  
Antiguo 12/04/2005, 17:24
Avatar de trasgukabi  
Fecha de Ingreso: septiembre-2004
Mensajes: 2.749
Antigüedad: 19 años, 9 meses
Puntos: 18
Neuron, ahí hay algo que no va bien. Para qué abres el primer recordset? no hace nada, simplemente lo abres y seguido lo cierras
  #5 (permalink)  
Antiguo 12/04/2005, 17:31
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 19 años, 2 meses
Puntos: 2
Cierto!!

Cierto trasgukabi, tienes toda la razon de hecho esa linea no va porque nunca es usada tal como tu dices, pero el codigo de V€rO lo hace asi, igual no entiendo porque , tal vez en su metodo actual, igual lo deje como un ejemplo, ahi es como hacer una consulta y guardar el resultado en un Recordset con el metodo que utilizo, y abajo, es un ejemplo del insert sin tener que guardar nada en el recordset.

Pero buen punto.
  #6 (permalink)  
Antiguo 12/04/2005, 17:42
Avatar de trasgukabi  
Fecha de Ingreso: septiembre-2004
Mensajes: 2.749
Antigüedad: 19 años, 9 meses
Puntos: 18
ah, lo abre para añadir el registro con .addnew. el código bueno quedaría así:
Código:
 'Abrir conexion con la base de datos
 Set oConn = Server.CreateObject("ADODB.Connection")
 oConn.Open "dsn=tuDSNName;uid=tuUserName;pwd=tuUserPassword"
 
 'Ahora rs contiene todos los datos que necesitas
 Sqltxt = "INSERT into Tabla1 (asientode,diari,data,numde,numa,desc,introduit) values(" _
           & "'" & Cstr(request.form("txtAsientoDe") & "'," _
           & "'" & Cstr(request.form("txtDiari") & "'," _
           & "'" & Cstr(request.form("txtData") & "'," _
           & "'" & Cstr(request.form("txtNumDe") & "'," _
           & "'" & Cstr(request.form("txtNumA") & "'," _
           & "'" & Cstr(request.form("txtDesc") & "'," _
           & "'" & Cstr(request.form("txtIntroduit") & "'" _
           & ")"
 
 'Liberar memoria, por que ya no necesitamos los valores en el Recordset
 'Ejecutar el SQL para insertar el campo
 oConn.Execute(Sqltxt)
 
 'Cerrar conexion a la base de datos
 oConn.Close()
 set oConn = nothing
te faltaban las comas entre los valores
en el insert, al menos yo, pongo siempre la lista de campos a añadir antes de values() (no sé si realmente hace falta)


Última edición por trasgukabi; 12/04/2005 a las 17:47
  #7 (permalink)  
Antiguo 12/04/2005, 17:53
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 19 años, 2 meses
Puntos: 2
Si, asi seria correcto

Pero bueno, como ves ese codigo aun tiene errores de sintaxis, tal vez algunos campos son tipo INT y los escribi como cadenas, etc...

Del insert, puede haber error si no son el total de los campos, o estan en desorden, si los campos estan en orden y tiene un campo tipo IDENTITY primero entonces no habra problema, ejemplo:

Tabla
- ID int IDENTITY
- C1 varchar default('')
- C2 varchar default('')

Si haces un INSERT como:

insert into Tabla values('valorParaC1', 'valorParaC2') --Correra perfecto
insert into Tabla values('valorParaC1') --Correra perfecto por el default en C2

insert into Tabla values('valorParaC2') --Correra bien, pero no es lo que quieres, entonces esto esta mal.. porque el dato que quieres para C2 se escribira en C1

insert into Tabla (C2) values('valorParaC2') --Aqui si ocupas el nombre de los campos para lograr exactamente lo que necesitas.

Y asi... muchas derivaciones segun la estructura de la tabla
  #8 (permalink)  
Antiguo 12/04/2005, 17:57
Avatar de trasgukabi  
Fecha de Ingreso: septiembre-2004
Mensajes: 2.749
Antigüedad: 19 años, 9 meses
Puntos: 18
quieres decir que me tengo que aprender hasta el orden en el que están los campos en las tablas? no gracias. Mucho mejor llevar cierta norma con respecto a los nombres de campos y meterlos como a tí te de la gana. Al final el plus de trabajo que lleva es mínimo.

Es mi parecer eh? con las formas de programar pasará como con los culos, que cada uno tenemos el nuestro, .

Un saludo.
  #9 (permalink)  
Antiguo 12/04/2005, 18:00
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 19 años, 2 meses
Puntos: 2
Jejejeje

Eso es cierto... es mejor tener un orden siempre, un orden que sabes que asi lo estas haciendo y en todo tu codigo asi lo vas a hacer siempre

Eso es bueno
  #10 (permalink)  
Antiguo 13/04/2005, 03:18
 
Fecha de Ingreso: febrero-2005
Mensajes: 73
Antigüedad: 19 años, 4 meses
Puntos: 0
Muchas gracias a todos!!!!!

Voy a probar...
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 21:08.