Sentencias SQL

24/02/2005 - 14:17 por Luis A. Uriarte | Informe spam
Hola Grupo
Estoy usando sentencias SQL en lugar de las basicas de fox como APPEND
BLANK, REPLACE, etc.
Uso dos combobox, uno filtra al otro.
ComboBox1: RowSourceType = 3
RowSource=SELECT detalle,id_poder FROM poder ORDER BY detalle INTO CURSOR
cpoder
En el InteractiveChange del Combobox1 tengo:
lcSql="SELECT secretarias.detalle, secretarias.id_secre;
FROM secretarias;
WHERE secretarias.id_poder = cpoder.id_poder;
ORDER BY secretarias.detalle;
INTO CURSOR csecretarias"
WITH ThisForm
.cboComboBox2.RowSourceType = 3
.cboComboBox2.RowSource = lcSql
ENDWITH

Tengo este codigo en el evento click de mi boton Aceptar:

lcIdSec=ThisForm.cboComboBox2.Value
lcIdPoder=ThisForm.cboComboBox1.Value
lcDetalle=ThisForm.txtDetalle.Value
opc=messagebox("¿ Confirma MODIFICACIONES ?",36,"Informacion")
SELECT secretarias
IF opc=6 && Modifica Tabla
=CURSORSETPROP("BUFFERING",5,"secretarias")
IF pcAccion="Alta"
INSERT INTO secretarias (id_secre, id_poder, detalle);
VALUES (lcIdSec, lcIdPoder, lcDetalle)
MESSAGEBOX("Alta Completada...",48,"Info")
ELSE
UPDATE secretarias SET detalle=lcDetalle;
WHERE id_secre=lcId_sec AND id_poder=lcIdPoder
MESSAGEBOX("Datos Actualizados...",48,"Info")
ENDIF
=TABLEUPDATE(.T.,.T.,"secretarias")
ELSE && NO Grabo los cambios
=TABLEREVERT(.T.,"secretarias")
ENDIF
ThisForm.Refresh
ThisForm.init

El formulario esta en Buffermode=1, en el entorno de datos tengo los
cursores en BufferModeOverride=5
Cuando modifico Detalle y doy click en aceptar me modifica el registro, pero
ademas me agrega un registro igual.
Como hago para que no me agregue el registro de mas?
Alguna sugerencia?..
Gracias y perdon por lo extenso del post
Luis A. Uriarte
luisuriarte@speedy.com.ar
Centro de Cómputos
Municipalidad de Río Grande
http://www.riogrande.gov.ar
Tierra del Fuego

Preguntas similare

Leer las respuestas

#1 Luis A. Uriarte
24/02/2005 - 15:27 | Informe spam
Otra vez Yo...
Perdon me equivoque el codifo del evento click del boton Aceptar:
lcIdSec=ThisForm.cboSecretaria.Value
lcIdPoder=ThisForm.cboPoder.Value
lcDetalle=ThisForm.txtDetalle.Value
opc=messagebox("¿ Confirma MODIFICACIONES ?",36,"Informacion")
SELECT secretarias
=CURSORSETPROP("BUFFERING",5,"secretarias")
IF opc=6 && Modifica Tabla
IF pcAccion="Alta"
INSERT INTO secretarias (id_secre, id_poder, detalle);
VALUES (lcIdSec, lcIdPoder, lcDetalle)
MESSAGEBOX("Alta Completada...",48,"Info")
ELSE
UPDATE secretarias SET detalle=lcDetalle;
WHERE id_secre=csecretarias.id_secre AND id_poder=cpoder.id_poder
MESSAGEBOX("Datos Actualizados...",48,"Info")
ENDIF
=TABLEUPDATE(.T.,.T.,"secretarias")
ELSE && NO Grabo los cambios
=TABLEREVERT(.T.,"secretarias")
ENDIF
ThisForm.Refresh
ThisForm.init


Luis A. Uriarte

Centro de Cómputos
Municipalidad de Río Grande
http://www.riogrande.gov.ar
Tierra del Fuego
"Luis A. Uriarte" escribió en el mensaje
news:
Hola Grupo
Estoy usando sentencias SQL en lugar de las basicas de fox como APPEND
BLANK, REPLACE, etc.
Uso dos combobox, uno filtra al otro.
ComboBox1: RowSourceType = 3
RowSource=SELECT detalle,id_poder FROM poder ORDER BY detalle INTO CURSOR
cpoder
En el InteractiveChange del Combobox1 tengo:
lcSql="SELECT secretarias.detalle, secretarias.id_secre;
FROM secretarias;
WHERE secretarias.id_poder = cpoder.id_poder;
ORDER BY secretarias.detalle;
INTO CURSOR csecretarias"
WITH ThisForm
.cboComboBox2.RowSourceType = 3
.cboComboBox2.RowSource = lcSql
ENDWITH

Tengo este codigo en el evento click de mi boton Aceptar:

lcIdSec=ThisForm.cboComboBox2.Value
lcIdPoder=ThisForm.cboComboBox1.Value
lcDetalle=ThisForm.txtDetalle.Value
opc=messagebox("¿ Confirma MODIFICACIONES ?",36,"Informacion")
SELECT secretarias
IF opc=6 && Modifica Tabla
=CURSORSETPROP("BUFFERING",5,"secretarias")
IF pcAccion="Alta"
INSERT INTO secretarias (id_secre, id_poder, detalle);
VALUES (lcIdSec, lcIdPoder, lcDetalle)
MESSAGEBOX("Alta Completada...",48,"Info")
ELSE
UPDATE secretarias SET detalle=lcDetalle;
WHERE id_secre=lcId_sec AND id_poder=lcIdPoder
MESSAGEBOX("Datos Actualizados...",48,"Info")
ENDIF
=TABLEUPDATE(.T.,.T.,"secretarias")
ELSE && NO Grabo los cambios
=TABLEREVERT(.T.,"secretarias")
ENDIF
ThisForm.Refresh
ThisForm.init

El formulario esta en Buffermode=1, en el entorno de datos tengo los
cursores en BufferModeOverride=5
Cuando modifico Detalle y doy click en aceptar me modifica el registro,
pero ademas me agrega un registro igual.
Como hago para que no me agregue el registro de mas?
Alguna sugerencia?..
Gracias y perdon por lo extenso del post
Luis A. Uriarte

Centro de Cómputos
Municipalidad de Río Grande
http://www.riogrande.gov.ar
Tierra del Fuego

Respuesta Responder a este mensaje
#2 Mauricio Mesa G.
24/02/2005 - 20:34 | Informe spam
Buenas tardes,

Según el código que muestras no tiene porque estar insertando un registro de
más. Revise el código que tiene en el evento Refresh y en el evento Init.

Coloque SET STEP ON al inicio del procedimiento y verifique que pasa cuando
presiona el botón aceptar, se puede estar ejecutando 2 veces.


Saludos,
Mauricio Mesa G.




"Luis A. Uriarte" escribió en el mensaje
news:
Otra vez Yo...
Perdon me equivoque el codifo del evento click del boton Aceptar:
lcIdSec=ThisForm.cboSecretaria.Value
lcIdPoder=ThisForm.cboPoder.Value
lcDetalle=ThisForm.txtDetalle.Value
opc=messagebox("¿ Confirma MODIFICACIONES ?",36,"Informacion")
SELECT secretarias
=CURSORSETPROP("BUFFERING",5,"secretarias")
IF opc=6 && Modifica Tabla
IF pcAccion="Alta"
INSERT INTO secretarias (id_secre, id_poder, detalle);
VALUES (lcIdSec, lcIdPoder, lcDetalle)
MESSAGEBOX("Alta Completada...",48,"Info")
ELSE
UPDATE secretarias SET detalle=lcDetalle;
WHERE id_secre=csecretarias.id_secre AND id_poder=cpoder.id_poder
MESSAGEBOX("Datos Actualizados...",48,"Info")
ENDIF
=TABLEUPDATE(.T.,.T.,"secretarias")
ELSE && NO Grabo los cambios
=TABLEREVERT(.T.,"secretarias")
ENDIF
ThisForm.Refresh
ThisForm.init


Luis A. Uriarte

Centro de Cómputos
Municipalidad de Río Grande
http://www.riogrande.gov.ar
Tierra del Fuego
"Luis A. Uriarte" escribió en el mensaje
news:
Hola Grupo
Estoy usando sentencias SQL en lugar de las basicas de fox como APPEND
BLANK, REPLACE, etc.
Uso dos combobox, uno filtra al otro.
ComboBox1: RowSourceType = 3
RowSource=SELECT detalle,id_poder FROM poder ORDER BY detalle INTO CURSOR
cpoder
En el InteractiveChange del Combobox1 tengo:
lcSql="SELECT secretarias.detalle, secretarias.id_secre;
FROM secretarias;
WHERE secretarias.id_poder = cpoder.id_poder;
ORDER BY secretarias.detalle;
INTO CURSOR csecretarias"
WITH ThisForm
.cboComboBox2.RowSourceType = 3
.cboComboBox2.RowSource = lcSql
ENDWITH

Tengo este codigo en el evento click de mi boton Aceptar:

lcIdSec=ThisForm.cboComboBox2.Value
lcIdPoder=ThisForm.cboComboBox1.Value
lcDetalle=ThisForm.txtDetalle.Value
opc=messagebox("¿ Confirma MODIFICACIONES ?",36,"Informacion")
SELECT secretarias
IF opc=6 && Modifica Tabla
=CURSORSETPROP("BUFFERING",5,"secretarias")
IF pcAccion="Alta"
INSERT INTO secretarias (id_secre, id_poder, detalle);
VALUES (lcIdSec, lcIdPoder, lcDetalle)
MESSAGEBOX("Alta Completada...",48,"Info")
ELSE
UPDATE secretarias SET detalle=lcDetalle;
WHERE id_secre=lcId_sec AND id_poder=lcIdPoder
MESSAGEBOX("Datos Actualizados...",48,"Info")
ENDIF
=TABLEUPDATE(.T.,.T.,"secretarias")
ELSE && NO Grabo los cambios
=TABLEREVERT(.T.,"secretarias")
ENDIF
ThisForm.Refresh
ThisForm.init

El formulario esta en Buffermode=1, en el entorno de datos tengo los
cursores en BufferModeOverride=5
Cuando modifico Detalle y doy click en aceptar me modifica el registro,
pero ademas me agrega un registro igual.
Como hago para que no me agregue el registro de mas?
Alguna sugerencia?..
Gracias y perdon por lo extenso del post
Luis A. Uriarte

Centro de Cómputos
Municipalidad de Río Grande
http://www.riogrande.gov.ar
Tierra del Fuego





Respuesta Responder a este mensaje
#3 Luis A. Uriarte
24/02/2005 - 20:57 | Informe spam
Bueno... muchas gracias por responder...al codigo lo cambie levemente..
Revise lo que me dijo y esta bien aparentemente.
el codigo quedo asi:
-
lcIdSec=ThisForm.txtId_sec.Value
lcIdPoder=ThisForm.txtId_poder.Value
lcDetalle=ThisForm.txtDetalle.Value
opc=messagebox("¿ Confirma MODIFICACIONES ?",36,"Informacion")
SELECT secretarias
IF opc=6 && Modifica Tabla
IF pcAccion="Alta"
INSERT INTO secretarias (id_secre, id_poder, detalle);
VALUES (lcIdSec, lcIdPoder, lcDetalle)
=CURSORSETPROP("BUFFERING",5,"secretarias")
=TABLEUPDATE(.T.,.T.,"secretarias")
MESSAGEBOX("Alta Completada...",48,"Info")
ELSE
UPDATE secretarias;
SET secretarias.detalle=lcDetalle;
WHERE (id_secre=lcIdSec AND id_poder=lcIdPoder)
=CURSORSETPROP("BUFFERING",5,"secretarias")
=TABLEUPDATE(.T.,.T.,"secretarias")
MESSAGEBOX("Datos Actualizados...",48,"Info")
ENDIF
ELSE && NO Grabo los cambios
=CURSORSETPROP("BUFFERING",5,"secretarias")
=TABLEREVERT(.T.,"secretarias")
ENDIF
ThisForm.Refresh

Lo que hace ahora es que me modifica bienel registro, pero cambia, tambien,
al primer registro de la tabla y me queda el dato duplicado.
lo que me llama la atencion es que en una baja del registro (boton borrar):

opc=MESSAGEBOX("Confirma BAJA de Secretaría ?",4+32+256,"Consulta")
IF opc=7
ThisForm.cboSecretaria.setfocus
=TABLEREVERT(.T.)
RETURN 0
ENDIF
SELECT secretarias
DELETE FROM secretarias WHERE (id_secre=lcIdSec AND id_poder=lcIdPoder)
=CURSORSETPROP("BUFFERING",5,"secretarias")
=TABLEUPDATE(.T.,.T.,"secretarias")
MESSAGEBOX("Datos Eliminados...",48,"Info")
-
a este me lo hace perfectamente, y la condicion es la misma.
Cambie el buffermode del formulario a 2
El BufferModeOverride del los cursores estan en 5
Una consulta sobre esto:
Cuando hago: UPDATE secretarias SET secretarias.detalle=lcDetalle
WHERE...
No deberia modificarme solamente el campo detalle?, pues me modifica el
detalle y el id_secre, id_dire y detalle del primer registro
Alguna sugerencia..
Muchas gracias


Luis A. Uriarte

Centro de Cómputos
Municipalidad de Río Grande
http://www.riogrande.gov.ar
Tierra del Fuego
"Mauricio Mesa G." escribió en el mensaje
news:%
Buenas tardes,

Según el código que muestras no tiene porque estar insertando un registro
de más. Revise el código que tiene en el evento Refresh y en el evento
Init.

Coloque SET STEP ON al inicio del procedimiento y verifique que pasa
cuando presiona el botón aceptar, se puede estar ejecutando 2 veces.


Saludos,
Mauricio Mesa G.




"Luis A. Uriarte" escribió en el mensaje
news:
Otra vez Yo...
Perdon me equivoque el codifo del evento click del boton Aceptar:
lcIdSec=ThisForm.cboSecretaria.Value
lcIdPoder=ThisForm.cboPoder.Value
lcDetalle=ThisForm.txtDetalle.Value
opc=messagebox("¿ Confirma MODIFICACIONES ?",36,"Informacion")
SELECT secretarias
=CURSORSETPROP("BUFFERING",5,"secretarias")
IF opc=6 && Modifica Tabla
IF pcAccion="Alta"
INSERT INTO secretarias (id_secre, id_poder, detalle);
VALUES (lcIdSec, lcIdPoder, lcDetalle)
MESSAGEBOX("Alta Completada...",48,"Info")
ELSE
UPDATE secretarias SET detalle=lcDetalle;
WHERE id_secre=csecretarias.id_secre AND id_poder=cpoder.id_poder
MESSAGEBOX("Datos Actualizados...",48,"Info")
ENDIF
=TABLEUPDATE(.T.,.T.,"secretarias")
ELSE && NO Grabo los cambios
=TABLEREVERT(.T.,"secretarias")
ENDIF
ThisForm.Refresh
ThisForm.init


Luis A. Uriarte

Centro de Cómputos
Municipalidad de Río Grande
http://www.riogrande.gov.ar
Tierra del Fuego
"Luis A. Uriarte" escribió en el mensaje
news:
Hola Grupo
Estoy usando sentencias SQL en lugar de las basicas de fox como APPEND
BLANK, REPLACE, etc.
Uso dos combobox, uno filtra al otro.
ComboBox1: RowSourceType = 3
RowSource=SELECT detalle,id_poder FROM poder ORDER BY detalle INTO
CURSOR cpoder
En el InteractiveChange del Combobox1 tengo:
lcSql="SELECT secretarias.detalle, secretarias.id_secre;
FROM secretarias;
WHERE secretarias.id_poder = cpoder.id_poder;
ORDER BY secretarias.detalle;
INTO CURSOR csecretarias"
WITH ThisForm
.cboComboBox2.RowSourceType = 3
.cboComboBox2.RowSource = lcSql
ENDWITH

Tengo este codigo en el evento click de mi boton Aceptar:

lcIdSec=ThisForm.cboComboBox2.Value
lcIdPoder=ThisForm.cboComboBox1.Value
lcDetalle=ThisForm.txtDetalle.Value
opc=messagebox("¿ Confirma MODIFICACIONES ?",36,"Informacion")
SELECT secretarias
IF opc=6 && Modifica Tabla
=CURSORSETPROP("BUFFERING",5,"secretarias")
IF pcAccion="Alta"
INSERT INTO secretarias (id_secre, id_poder, detalle);
VALUES (lcIdSec, lcIdPoder, lcDetalle)
MESSAGEBOX("Alta Completada...",48,"Info")
ELSE
UPDATE secretarias SET detalle=lcDetalle;
WHERE id_secre=lcId_sec AND id_poder=lcIdPoder
MESSAGEBOX("Datos Actualizados...",48,"Info")
ENDIF
=TABLEUPDATE(.T.,.T.,"secretarias")
ELSE && NO Grabo los cambios
=TABLEREVERT(.T.,"secretarias")
ENDIF
ThisForm.Refresh
ThisForm.init

El formulario esta en Buffermode=1, en el entorno de datos tengo los
cursores en BufferModeOverride=5
Cuando modifico Detalle y doy click en aceptar me modifica el registro,
pero ademas me agrega un registro igual.
Como hago para que no me agregue el registro de mas?
Alguna sugerencia?..
Gracias y perdon por lo extenso del post
Luis A. Uriarte

Centro de Cómputos
Municipalidad de Río Grande
http://www.riogrande.gov.ar
Tierra del Fuego









email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida