Dudas en PB

Tengo un dw donde le agrego los datos mediante el siguiente código:
if keydown(keyenter!) then
integer nuevo
decimal{2} precio
precio=real(em_9.text)
nuevo=dw_1.insertrow( 0)
dw_1.setitem( nuevo, "temdesc", trim(sle_1.text))
dw_1.setitem( nuevo, "temprec", precio)
dw_1.scrolltorow( nuevo)
cb_1.setfocus( )
end if
Este código, como veras, es agregar "temporalmente" los datos al datawindows, es decir el dw puede poseer varios registros.
Ahora lo que deseo es cuando doy click en el botón grabar, los datos se graben a una base de datos que esta en sql, para ello tengo un procedimiento almacenado, que es el siguiente:
create procedure sp_ingresaarticulo
@temdesc nvarchar(180),
@temprec float
as
begin tran
insert into temporal values(@temdesc,@temprec)
if @@error<>0
goto VerError
commit tran
return(0)
VerError:
Rollback tran
return(-1)
Acá aparecen mis dudas:
1. ¿Cuál es la manera más optima de grabar los datos en mi base de datos creada en sql, sera con el procedimiento almacenado o que el mismo pb se encargue de guardar los datos?
2. ¿Si la manera más optima es con procedimiento almacenado como hago para grabar todos los registros que se encuentran en el dw en mi base de datos?

4 respuestas

Respuesta
1
Ya te respondí de manera más extensa la otra pregunta que mandaste que era similar pero:
Tené en cuenta que si usas procedures no estas delegando la administración a la bd por los escribís vos y adentro tienen un update/insert/delete.
Ademas usar procedures, en mi opinión, implica trasladar mucha lógica al motor y terminas con la lógica distribuida entre la aplicación y la bd.
Optimo es difícil de evaluar porque depende de varios factores.
Yo te voy a contar la manera más fácil y productiva:
1. No uses cajas de texto para el ingreso de datos. Usa directamente la dw. Le podes dar el formato que quieras al dataobject.
2. Deja que pb realice las modificaciones directamente. De este modo, cuando el el usuario apriete guardar lo único que tienes que hacer es:
dw_1. Upadate(). Asi pb genera las sentencias de actualizacion necesarias (update/insert/delete).
De la misma forma, para mostrar datos solamente haces dw_1. Retrieve().
Respuesta
1
1. ¿Cuál es la manera más optima de grabar los datos en mi base de datos creada en sql, sera con el procedimiento almacenado o que el mismo pb se encargue de guardar los datos?
La manera más optima es utilizar el datawindow porque un datawindows esta construido para facilitar al programador la actualización de la base de datos ahorrando código y procedimientos adicionales.
if dw_1.Update() = 1 THEN
COMMIT using SQLCA;
MessageBox("Mensaje de Confirmacion", "REGISTRO GRABADO" , Information!, OK!, 2)
else
ROLLBACK using SQLCA;
MessageBox("Mensaje de Error", "REGISTRO NO GRABADO", StopSign!, OK!, 2)
end if
2. ¿Si la manera más optima es con procedimiento almacenado como hago para grabar todos los registros que se encuentran en el dw en mi base de datos?
Utilizar un proc almacenado para actualizar la base de datos es utilizada en otra metologia (3 o n capas), para implementar esta forma de desarrollo debes enviar el datawindows como parámetro de tipo tabla como un datastore y en el sql definir como parámetro de entrada de tipo tabla.
table_type_definition ::=
TABLE ( { column_definition | table_constraint } [ ,...n ] )
column_definition ::=
column_name scalar_data_type
[ COLLATE collation_definition ]
[ [ DEFAULT constant_expression ] | IDENTITY [ ( seed, increment ) ] ]
[ ROWGUIDCOL ]
[ column_constraint ] [ ...n ]
column_constraint ::=
{ [ NULL | NOT NULL ]
| [ PRIMARY KEY | UNIQUE ]
| CHECK ( logical_expression )
}
table_constraint ::=
{ { PRIMARY KEY | UNIQUE } ( column_name [ ,...n ] )
| CHECK ( search_condition )
}
Respuesta
1
En este caso no hay mucha diferencia en cual es el más optimo... podes hacer un UPDATE de la DW o invocar al SP tantas veces como lineas nuevas tengas en la DW pasándole los datos como parámetros al SP.
El tema de la diferencia en la preformance se ve en consulñtas más complicadas y no tanto en los inserts... a excepción que el insert acarree una serie de updates en otras tablas.
Respuesta
-1
dw_1.Update()

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas