hola a todos... queria saber q es mejor... si usar una sentencia SQL (Insert) o Addnew
respondan plis
| |||
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 |
| |||
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... |
| ||||
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!! |
| |||
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:
Saludos!. 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
__________________ Add, never Remove |
| |||
¡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). |
| ||||
![]() ![]() 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 |
| |||
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 |
| ||||
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 |
| ||||
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 |
| ||||
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 |
| ||||
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!! |
| |||
Cita: ¿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.
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(). No conocía esa instrucción, y aunque aún no la he usado, está claro que es muy útil. ![]() |
| |||
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 |
| ||||
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 |
| |||
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 |
| ||||
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!! |
| ||||
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. |
| ||||
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 |
| ||||
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!! |
| ||||
![]() Salu2,
__________________ "El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera." -- Ernest Hemingway |