La Web del Programador: Comunidad de Programadores
 
    Pregunta:  48308 - AGREGAR NUEVOS REGISTROS
Autor:  Ana Díaz
Hola!! Soy novata en este lenguaje y a la hora de hacer listados, busquedas.. me apaño bastante bien :D , el problema que tengo es a la hora de añadir un nuevo registro en una tabla.
En el evento open de la aplicacion defino los parámetros :

SQLCA.DBMS = "ODBC"
SQLCA.Database = "<nombre de la db>"
SQLCA.AutoCommit = False
SQLCA.DBParm= "ConnectString='DSN=<nombre de la db>"
Connect Using sqlca;

El problema viene cuando añado un datawindow para insertar los nuevos registros en la tabla a la ventana. Por ejemplo, en el evento open de la ventana creo la conexión:

dw_1.SettransObject(sqlca)

Pero claro, no pongo:

dw_1.retrieve()

Por que si no me devuelve la primera fila de la tabla y lo quiero es poder añadir un registro nuevo, y si no pongo esa linea no me aparece el datawindow. Estoy bastante perdida..

Gracias de antemano!!

  Respuesta:  Oxido social
Que tal Ana!

Mira bien sencillo:

dw.SetTransObject (SQLCA): Sirve para conectar tu Dw con la BD.
dw.Retrieve () Trae la informacion de la consulta que esta en el datawindowobject

dw.InsertRow (0): Inserta un renglo en limpio en tu DW
dw.DeleteRow (Row): Borra del DW el senglon especifico en la variable ROW.

dw.Update (): Hace el UPDATE del DW sobre la tabla.

El INSERTROW y DELETEROW no realizan los cambios en la tabla, es en tu aplicacion nada mas, para que lo tengas encuenta.

Aqui te dejo un codigo para que implementes en tus aplicaciones:

/**********************************
OPen de la ventana
**********************************/
dw.SetTransObject (SQLCA)
dw.SetRowFocusIndicator (Hand!)
/***************************************
Evento CLOSEQUERY
***************************************/
dw.AcceptText ()
IF (dw.ModifiedCount () > 0) OR (dw.DeletedCount () > 0) THEN
CHOOSE CASE MessageBox ('aviso', 'Hay cambios realizados sin guardar. ' + char (13) + '¿Desea guardar ahora?', Question!, YesNoCancel!)
CASE 1
IF (dw.Update () = 1) THEN
MessageBox ('aviso', 'Se guardo con exito')
RETURN 0
ELSE
MessageBox ('aviso', 'Ocurrio un error al guardar')
RETURN 1
END IF
CASE 2
RETURN 0
CASE 3
RETURN 1
END CHOOSE
END IF

/***************************************
Boton para agregar un registro
***************************************/
LONG ll_Ren

ll_Ren = dw.InsertRow (0)
dw.ScrollToRow (ll_ren)
dw.SetFocus ()
dw.SetColumn ('Id')

/***************************************
Boton para eliminar un registro
***************************************/
LONG ll_Ren
ll_Ren = dw.GetRow ()
IF (ll_Ren > 0) THEN
IF (MessageBox ('Aviso', '¿Quiere eliminar el registro seleccionado?', Question!, YesNo!) = 2) THEN
RETURN
END IF
dw.DeleteRow (ll_Ren)
ELSE
MessageBox ('Aviso', 'No hay registros a eliminar.');
END IF

/***************************************
Boton para guardar un registro
***************************************/
dw.AcceptText ()
IF (dw.ModifiedCount () > 0) OR (dw.DeletedCount () > 0) THEN
IF (dw.Update () = 1) THEN
MessageBox ('aviso', 'Se guardo con exito')
ELSE
MessageBox ('aviso', 'Ocurrio un error al guardar')
END IF
END IF


Espero te sirva de algo esta breve explicacion.

Saludos desde Guadalajara, Mexico.