GAZ
unread,Sep 1, 2011, 8:02:15 PM9/1/11Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to Comunidad de Visual Foxpro en Español
Me desconsierta las aplicaciones de SQL
Es mi primera aplicación en SQL
A lo que yo tengo entendido de que solo se deben de utilizar los
comandos:
INSERT, UPDATE, DELETE Y SELECT
Y en el ejemplos e SQL_DEMO y otras pequeñas rutinas que he
analizado, utilizan los comandos
USE, APPEND BLANK Y REPLACE
A la idea que yo tengo es de que no debes de tener las tablas
abiertas, si quieres localizar un determinado registro y mostrarlo en
tu form, se realiza lo siguiente:
CUACON="SELECT * FROM regexp order by expediente"
SQLEXEC(MICO, CUACON, "texp")
thisform.closable=.T.
thisform.refresh
BROWSE TITLE "LOCALIZAR REGISTRO" NOEDIT NODELETE NOMENU
thisform.closable=.F.
mxarti=ALLTRIM(texp.numexp)
IF LEN(mxarti)>0
CUACON="SELECT * FROM regexp WHERE "+'"'+mxarti
+'"'+"="+"regexp.numexp order by expediente"
SQLEXEC(MICO, CUACON, "texpb")
IF !EOF('texpb')
m.expediente=texpb.expediente
m.fecexp=texpb.fecexp
ENDIF
ENDIF
Para grabar un nuevo registro realizo lo siguiente:
BEGIN TRANSACTION
INSERT INTO regdepto FROM MEMVAR
IF TABLEUPDATE()
WAIT windows "Nuevo Registro" nowait
ELSE
MESSAGEBOX('ERROR AL GRABAR REGISTRO',0+48+0,'Mensaje')
ROLLBACK
ENDIF
END TRANSACTION
Y no he tenido ningún problema, hasta ahora
Mi base de datos y tablas las estoy creando directamente desde FOX 9,
en un mensaje anterior, mensione lo siguiente:
En mis pantallas con afectacion a una sola tabla sin ningun problema,
pero al actualizar mas de una tabla surgio lo siguiente:
Al utilizar el UPDATE me muestra el siguiente mensaje:
La funcion requiere el modo de almacenamiento en bufer de filas o
tablas
OJO pero si me graba los cambios, pero en algo estoy mal
Al inicio de mi aplicacion conecto mi base de datos
MICO=SQLCONNECT("datos1") , y acceso a cada una de mis tablas por
medio de SELECT *
En la pantalla de camptura realizo la siguiente aplicacion para
actualizar el registro de la tabla
SET MULTILOCKS ON
CURSORSETPROP('Buffering', 5)
BEGIN TRANSACTION
UPDATE regexp ;
SET expediente=m.expediente, ;
anoexp=m.anoexp, ;
fecexp=m.fecexp, ;
actoexp=m.actoexp, ;
descacto=m.descacto, ;
totdocto=m.totdocto, ;
apldocto=m.apldocto, ;
vivienda=m.vivienda, ;
feccanc=m.feccanc, ;
moticanc=m.moticanc, ;
ubiedo=m.ubiedo, ;
ubimun=m.ubimun, ;
abrespo=m.abrespo, ;
abauxi=m.abauxi, ;
feccierre=m.feccierre, ;
acredita=m.acredita, ;
comenta=m.comenta, ;
estatexp=m.estatexp, ;
movusu=m.movusu WHERE regexp.expediente=m.expediente
lcampo = (TXNLEVEL()=0)
IF .NOT. lcampo
lcampo = .NOT. TABLEUPDATE(.F., .T., "regexp")
IF .NOT. lcampo
FOR lcual = 1 TO 30
lcampo = .NOT. TABLEUPDATE(.T., .T., (lcual))
IF lcampo
EXIT
ENDIF
ENDFOR
ENDIF
IF .NOT. lcampo
END TRANSACTION
WAIT WINDOW "Actualizacion correcta. expediente"
ELSE
ROLLBACK
= MESSAGEBOX("No se han podido guardar los cambios,
regexp")
ENDIF
ENDIF
Que función me falta o sobra, o cual aplicación me sugieren, o en que
estoy mal
Sigo con mi inquietud si estoy utilizando SQL correctamente,
Me gustaría realizar un debate sobre cual es la aplicación correcta:
INSERT, UPDATE & APPEND BLANK REPLACE
Y si me podrían explicar la metodología que se debe de aplicar SQL EN
BASE DE DATOS
GRACIAS