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

Insert o Addnew

Estas en el tema de Insert o Addnew en el foro de ASP Clásico en Foros del Web. hola a todos... queria saber q es mejor... si usar una sentencia SQL (Insert) o Addnew respondan plis...

  #1 (permalink)  
Antiguo 14/07/2005, 14:39
 
Fecha de Ingreso: julio-2005
Mensajes: 7
Antigüedad: 18 años, 11 meses
Puntos: 0
Insert o Addnew

hola a todos... queria saber q es mejor... si usar una sentencia SQL (Insert) o Addnew

respondan plis
  #2 (permalink)  
Antiguo 14/07/2005, 15:19
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 2 meses
Puntos: 9
Supongo que es mucho más directo utilizar una sentencia SQL y ejecutarla a través del objeto conexion ya creado. Sin embargo, cabría hacerse esa pregunta cuando tenemos un RS abierto por X motivo (que no sea el de inserción de registros) para saber que es lo más efectivo.
Sin duda ya llegarán más mensajes al respecto.
Saludos!.
__________________
Add, never Remove
  #3 (permalink)  
Antiguo 14/07/2005, 19:14
Avatar de El_Metallick  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago, Chile
Mensajes: 1.718
Antigüedad: 21 años, 7 meses
Puntos: 16
Hola... encuentro que es algo mas que nada de gustos.... a mi en lo personal me acomoda mas el inser pero en el caso que el RS ya este abierto puede ser recomendable usar Assnew como indica nuestro amigo mariano.... ahora tecnicamente cual es mejor no lo se.... bueno eso saludos
__________________
Haz la guerra en la cama y el amor donde se te de la gana...
El tiempo es el mejor maestro, lo único malo es que te mata...¡¡Aprovecha tu tiempo!!
  #4 (permalink)  
Antiguo 15/07/2005, 05:50
 
Fecha de Ingreso: julio-2005
Mensajes: 7
Antigüedad: 18 años, 11 meses
Puntos: 0
yo he escuchado que puede que dependa de la transaccion que se este haciendo(o sea no solo de un insert sino q un Update puede ser tambien), ya que si existen 2 pesonas ejecutando una insercion o actulizacion se podrian topar o algo por el estilo... el addnew valida que mientras se agregan los valores no se pueda utilizar el mismo registro por otro usuario...
  #5 (permalink)  
Antiguo 15/07/2005, 05:57
Avatar de El_Metallick  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago, Chile
Mensajes: 1.718
Antigüedad: 21 años, 7 meses
Puntos: 16
no sea si sea el addnew....se que para eso estan los locktypes y el otro numerito que no me acuerdo en este momento el nombre del recordset.... bueno eso saludos
__________________
Haz la guerra en la cama y el amor donde se te de la gana...
El tiempo es el mejor maestro, lo único malo es que te mata...¡¡Aprovecha tu tiempo!!
  #6 (permalink)  
Antiguo 15/07/2005, 07:04
 
Fecha de Ingreso: febrero-2005
Mensajes: 1.015
Antigüedad: 19 años, 4 meses
Puntos: 6
¿AddNew? ¿Eso para qué es, para añadir un nuevo registro a un recordset? Nunca había oído hablar de él.
  #7 (permalink)  
Antiguo 15/07/2005, 07:52
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 2 meses
Puntos: 9
Claro. Si haces RS.AddNew(), te agrega una nueva fila al RS (con la misma estructura de la tabla con la que abriste el RS), y después le asignas a cada columna un valor. Luego, hay qeu acordarse de actualizar la fuente de datos con RS.Update(). En definitiva, así es como se hace:

Código:
  
 set RS = Server.CreateObject("ADODB.RecordSet")
           RS.Open "Alguna_tabla", tu_conexion
                RS.AddNew() 'Copia la estructura de la tabla
                    RS("Columna1") = valor   'Se asignan los valores
                    RS("Columna2") = valor
                    RS("Columna3") = valor
                RS.Update() 'Se actualiza la fuente de datos
           RS.Close()
 set RS = nothing
Saludos!.
__________________
Add, never Remove
  #8 (permalink)  
Antiguo 15/07/2005, 08:22
 
Fecha de Ingreso: febrero-2005
Mensajes: 1.015
Antigüedad: 19 años, 4 meses
Puntos: 6
¡Vaya! Y con ese mismo método, supongo que podrás cambiar el valor que hubiera en un elemento del recordset, y también subirlo a la base de datos.

¡Y yo actualizando la base de datos con "UPDATE campo1 FROM..."! ... Desde luego la forma de programarlo es mucho más sencilla así.

Y otra duda: ¿se podría usar el RS.Update() para cambiar algún tipo de datos de la fuente de datos? (por ejemplo, cambiar la longitud de un tipo de datos varchar, o cambiar de texto a numérico).
  #9 (permalink)  
Antiguo 15/07/2005, 08:24
 
Fecha de Ingreso: febrero-2005
Mensajes: 1.015
Antigüedad: 19 años, 4 meses
Puntos: 6
Otra duda: yo los objetos Recordset, no los creo así ni los abro como RS.Open, sino que hago:

Set RS=oConn.Execute (SQL)

¿Así también funcionará lo del ADDNew y update?
  #10 (permalink)  
Antiguo 15/07/2005, 08:35
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
No jovenes, no confundan la gimnacia con la magnecia

Hay tres actores en un sistema distribuido como son las páginas Web: El cliente, el servidor web y el servidor de BD's.

Si usan INSERT, UPDATE o cualquier otra intrucción SQL estan trabajando en el Servidor de BD's, la transacción (si es que existe) esta en ese lugar y solo le regresa al servidor Web una indicación de si termino bien o no.

Si usan AddNew, Delete, Update o cualquier otro mètodo del Objeto ADO, estan trabajando en el Servidor Web y la transacción (implícita o explícita) debe enviarse al servidor de BD's para que sea ejecutada, es decir, hay un jugador extra y por ende, "menos eficiente".

Ya les dejo a ustedes continuar investigando sabiendo esto. Lo cual es importante, por ejemplo he visto que hay personas que definen una transacción en ADO y hacen INSERTS con SQL, y hacen commits y RollBacks en ADO con la creencia de que funcionarían. Obiamente no funcionaban por que manejaba la transacción en los dos lugares y así no se puede. Es en uno o en otro.

Saludos
  #11 (permalink)  
Antiguo 15/07/2005, 08:57
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 2 meses
Puntos: 9
Efectivamente un_tio, también se pueden actualizar los datos. Tendrías que hacer un RS.Filter para que te traiga la fila que corresponda al registro que quieras actualizar, y ahí ya podes ir actualizando los valores, de la misma forma que al hacer la inserción, con la salvedad (obvia) que al principio no hace falta utilizar AddNew().
Me parece que cambiar el tipo de datos (estoy CASI seguro) que no se puede (o no se como hacerlo).
Pero hay que prestar atención a lo que dice Myakire, no lo había contemplado de esa forma al asunto. Muy buen aporte, y sin duda investigaré más sobre el tema.
Saludos!.
__________________
Add, never Remove
  #12 (permalink)  
Antiguo 15/07/2005, 10:31
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Solamente para complementar lo que dijo el master Myak...
El metodo AddNew implica crear un nuevo recordset, esto implica a su vez que la aplicacion cree un cursor y recorra todos los registros para posicionarse en el ultimo y hacer el insert, si lo piensan, realmente es demasiado trabajo innecesario para insertar un registro.

Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #13 (permalink)  
Antiguo 15/07/2005, 13:52
Avatar de El_Metallick  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago, Chile
Mensajes: 1.718
Antigüedad: 21 años, 7 meses
Puntos: 16
mmmm eso no lo sabia.... bueno pero gracias a dios todos los dias se parende algo.... gracias por aclararlo Myakire y U_G saludos

---- Editado----- sorry se me movio la A en el teclado :P saludos Myakire :D
__________________
Haz la guerra en la cama y el amor donde se te de la gana...
El tiempo es el mejor maestro, lo único malo es que te mata...¡¡Aprovecha tu tiempo!!

Última edición por El_Metallick; 15/07/2005 a las 14:10
  #14 (permalink)  
Antiguo 15/07/2005, 14:03
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
Con este nick que me cargo me han dicho de todo , pero nunca: "Myskire"
  #15 (permalink)  
Antiguo 15/07/2005, 14:09
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Suena como Miss Kire!!!
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #16 (permalink)  
Antiguo 15/07/2005, 14:11
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
Precisamente ....... una letra le da en la torre a todo

  #17 (permalink)  
Antiguo 15/07/2005, 14:16
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 2 meses
Puntos: 9
Tampoco sabía que era así como funcionaba AddNew, definitivamente hay que usar el método Execute para esas tareas.
Gracias!.
Saludos!.
__________________
Add, never Remove
  #18 (permalink)  
Antiguo 15/07/2005, 14:21
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Bueno, si, pero he leido por algun lugar, que el metodo addnew, combinado con arreglos de campos-valores, es igual de eficiente que una ejecucion de la conexion, no me pregunten por que, pero eso es lo que lei en alguna ocasion.
Cuestion de abundar en el tema.

Salu2,

P.D. Miss: Le da en la torre o lo hace mas interesante
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #19 (permalink)  
Antiguo 15/07/2005, 19:30
Avatar de El_Metallick  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago, Chile
Mensajes: 1.718
Antigüedad: 21 años, 7 meses
Puntos: 16
jajajajajjaja disculpa Myakire por lo de Miss jajajajajjaja fue sin querer.... saludos
__________________
Haz la guerra en la cama y el amor donde se te de la gana...
El tiempo es el mejor maestro, lo único malo es que te mata...¡¡Aprovecha tu tiempo!!
  #20 (permalink)  
Antiguo 19/07/2005, 04:14
 
Fecha de Ingreso: febrero-2005
Mensajes: 1.015
Antigüedad: 19 años, 4 meses
Puntos: 6
Cita:
Iniciado por mariano_donati
Efectivamente un_tio, también se pueden actualizar los datos. Tendrías que hacer un RS.Filter para que te traiga la fila que corresponda al registro que quieras actualizar, y ahí ya podes ir actualizando los valores, de la misma forma que al hacer la inserción, con la salvedad (obvia) que al principio no hace falta utilizar AddNew().
¿RS.Filter? Ponme un ejemplo de cómo funcionaría... ¿se le pasa el valor de la clave primaria del registro al cuál quieres ir? En cualquier caso esto sólo es para posicionarse, y también se podría ir "paso a paso" con Rs.MoveNext.

No conocía esa instrucción, y aunque aún no la he usado, está claro que es muy útil.
  #21 (permalink)  
Antiguo 19/07/2005, 05:01
Avatar de trasgukabi  
Fecha de Ingreso: septiembre-2004
Mensajes: 2.749
Antigüedad: 19 años, 9 meses
Puntos: 18
teneis que preguntaros a qué le dais más importancia, a la comodidad a la hora de programar() o al impacto en el servidor()
  #22 (permalink)  
Antiguo 19/07/2005, 06:16
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 2 meses
Puntos: 9
Me parece que se resume a lo que dice trasgukabi, es una muy buena pregunta que hay que hacerse.
Un_Tio: el RS.filter equivaldría a WHERE en una sentencia SQL. Es como bien decís vos para posicionarse. Con RS.MoveNext se podría hacer, pero si querés actualizar los valores de los registros de toda la tabla. No es algo común que suceda eso. Aunque también podrías hacer unas sentencias condicionales para comprobar los valores de los respectivos registros, y de acuerdo a estos, actualizar o no esos campos. De todas formas, creo que sería un trabajo innecesario, ya que con RS.Filter se trabaja de manera más directa.
Te paso un ejemplo:

Código:
 
set RS = Server.CreateObject("ADODB.RecordSet") 
	 RS.Open "AlgunaTabla", conexion, 1, 3
		  RS.Filter = "Id = 3892"				 'Acá es en donde te posicionas
			  RS("Columna1") = valor
			  RS("Columna2") = valor
			  RS("Columna3") = valor
			  ...
		  RS.Update()
	 RS.Close
set RS = nothing

Saludos Un_Tio!
__________________
Add, never Remove
  #23 (permalink)  
Antiguo 19/07/2005, 07:24
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
Nada más no se te olvide que .Filter filtra (valga la expresión) un recordset completo que ya se trajo del servidor, es decir, a diferencia del Where que realiza la selección de registros en el motor de BD's,, .Filter lo hace en el SW, y tambien a diferencia del mismo Where, puedes hacer tantos filter en el mismo RS como desees.

Cuestión de gustos y preferencias, según lo apunto indirectamente trasgukabi
  #24 (permalink)  
Antiguo 19/07/2005, 07:59
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 2 meses
Puntos: 9
Buena acotación Myakire, eso es algo para tener muy en cuenta. Por otro lado, cuando mencioné que era igual al WHERE, quería decir que su función es la misma, sin ir más lejos que eso, ya que no tengo conocimientos para hacerlo, como si lo tienen ustedes. Por eso rescato el aporte, que quizás para muchos sea algo ya obvio y sabido, pero para los que estamos recién empezando en esto es valioso comenzar a saber ese tipo de cosas.
Saludos!.
__________________
Add, never Remove
  #25 (permalink)  
Antiguo 19/07/2005, 10:22
Avatar de El_Metallick  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago, Chile
Mensajes: 1.718
Antigüedad: 21 años, 7 meses
Puntos: 16
comparto con mariano.... me queda una sola duda.... Myakire.... es mejor que se ejecute en el en el SW o en el motor de la BD??????? em imagino que en el motor o no???? pero porque??? saludos
__________________
Haz la guerra en la cama y el amor donde se te de la gana...
El tiempo es el mejor maestro, lo único malo es que te mata...¡¡Aprovecha tu tiempo!!
  #26 (permalink)  
Antiguo 19/07/2005, 10:28
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 19 años, 2 meses
Puntos: 2
Hola!!

Creo que las preguntas para que se contesten solas de este tema, serian como:

1. Si necesitas simplemente insertar un nuevo reguistro a un tabla que usas, insert o addnew ?

2. Si necesitas insertar un nuevo regstro registro que incluye un binary, que suas, insert o addnew ?

3. Que es mejor, jalar la tabla completa para usar Filter, o jalar solamente la parte que necesitas usando el where ?

4. Si necesitas tienes un recordset con una lista de productos de y ahora necesitas la info de un ID especifico que seria mejor... movenext o filter ?

Suerte!!

P.D: Yo no conocia Filter, pero al parecer es muy útil.
__________________
NeuronaNet.com... la idea correcta.
http://www.NeuronaNet.com
  #27 (permalink)  
Antiguo 19/07/2005, 10:29
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Metiendome en el tema:

Siempre es mejor que tus consultas las maneje tu motor de base de datos, es por eso la naturaleza de los stored procedures por ejemplo, ya que se supone que tu sistema en la parte los datos no pasara por una capa mas.

Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #28 (permalink)  
Antiguo 19/07/2005, 10:38
Avatar de El_Metallick  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago, Chile
Mensajes: 1.718
Antigüedad: 21 años, 7 meses
Puntos: 16
ok gracias por explicarlo u_g... saludos
__________________
Haz la guerra en la cama y el amor donde se te de la gana...
El tiempo es el mejor maestro, lo único malo es que te mata...¡¡Aprovecha tu tiempo!!
  #29 (permalink)  
Antiguo 19/07/2005, 10:52
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
Pero hay infinidad de sitios que dan argumentos (validos o no) en contra de los SP

jejeje, esto último es solo para hacer polémica, jeje
  #30 (permalink)  
Antiguo 19/07/2005, 10:54
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
asi es, hace un tiempo incluso postee un enlace que decia de los stored procedures.

Salu2,
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
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 23:09.