INSERT, UPDATE & APPEND BLANK, REPLACE

1,270 views
Skip to first unread message

GAZ

unread,
Sep 1, 2011, 8:02:15 PM9/1/11
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

Walter R. Ojeda Valiente

unread,
Sep 1, 2011, 8:19:23 PM9/1/11
to publice...@googlegroups.com
Hola

Tienes toda la razón, en las tablas SQL solamente utilizas los comandos INSERT, UPDATE, DELETE y SELECT.

Pero SQL_DEMO utiliza también tablas locales auxiliares para que el acceso a los datos de las tablas maestras sea rapidísimo. Y es en esas tablas auxiliares donde se emplean los comandos USE, APPEND BLANK, REPLACE y demás. El motivo es que esas tablas auxiliares son tablas .DBF.

El principal concepto con Cliente/Servidor y con SQL es que el tráfico por la red sea el menor posible y eso solamente se consigue si por ella viajan poquísimos datos. Eso (entre otras cosas) implica que deberías evitar escribir SELECT *

Saludos.

Walter.

Y por supuesto, aún sin novedades del imaginario dios de "extremo".



> Date: Thu, 1 Sep 2011 17:02:15 -0700
> Subject: [vfp] INSERT, UPDATE & APPEND BLANK, REPLACE
> From: gay...@hotmail.com
> To: publice...@googlegroups.com

Luis Mata

unread,
Sep 1, 2011, 8:32:57 PM9/1/11
to Comunidad de Visual Foxpro en Español
Usa SQL Server? o dbf con sentencias SQL?, o DBC con sqlexec() + lenguaje
SQL?

-----Mensaje original-----
From: GAZ
Sent: Thursday, September 01, 2011 7:02 PM
To: Comunidad de Visual Foxpro en Espa�ol


Subject: [vfp] INSERT, UPDATE & APPEND BLANK, REPLACE

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

Y no he tenido ning�n problema, hasta ahora

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


Irlandes 1960

unread,
Sep 2, 2011, 1:22:29 PM9/2/11
to publice...@googlegroups.com
Estimado colega, el mensaje de "La funcion requiere el modo de almacenamiento en bufer de filas o tablas" esta relacionado con el tema del buffering que estas queriendo asignar.
Posiblemente al poner el buffering en 5 no estas parado en la tabla que vas a actualizar sino en otra area (el CURSORSETPROP no indicas en que tabla se asigna), y al hacer el tableupdate te da el mensaje citado.
Más allá de ello, no veo la necesidad de poner buffering en 5 y ademas el begin transaction, es como una redundancia. Y ademas deberias agregar el FLUSH para garantizar que se descarguen los datos efectivamente al disco.
Y entiendo que estas usando las tablas de vpf pero con el lenguaje sql.

Reply all
Reply to author
Forward
0 new messages