TDolphin y FWH

TDolphin y FWH

Postby FiveWiDi » Mon Sep 28, 2015 10:05 pm

Hola a todos,

A alguién le ha pasado que estas instruciones no le funcionen:

oQry:FieldPut( "REFESOLI", 91 )
If oQry:Save()
../ .. lo que sea
EndIf

Estoy usando TDolphin para acceder, consultar, modificar y borrar datos de una BB.DD. MySql, ayer funcionaba correctamente y hoy pués no.
El oQry:Save() está dando .T. pero accedo a los datos y no se ha modificado nada.

Y si pruebo con oConDB:Query( "UPDATE latabla SET REFESOLI = 91" ) revienta el programa con un error de Windows

No se por donde tirar.

Gracias,
Un Saludo
Carlos G.

FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
FiveWiDi
 
Posts: 1203
Joined: Mon Oct 10, 2005 2:38 pm

Re: TDolphin y FWH

Postby Biel EA6DD » Tue Sep 29, 2015 10:14 am

Cual es la sentencia SELECT, y la clave primaria.

"UPDATE latabla SET REFESOLI = 91 "
Esto cambiaria todos los registros de la tabla.

Con un gestor tipo HeidiSQL, puedes probar las sentencias SQL de manera interactiva, y de no ser correcta se visualizará el error, dándote alguna pista de lo que está mal.
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
User avatar
Biel EA6DD
 
Posts: 682
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca

Re: TDolphin y FWH

Postby FiveWiDi » Tue Sep 29, 2015 10:38 pm

Biel EA6DD wrote:Cual es la sentencia SELECT, y la clave primaria.

"UPDATE latabla SET REFESOLI = 91 "
Esto cambiaria todos los registros de la tabla.

Con un gestor tipo HeidiSQL, puedes probar las sentencias SQL de manera interactiva, y de no ser correcta se visualizará el error, dándote alguna pista de lo que está mal.


Gracias Biel,

Si, ya sé que se cambiarían todos los registros a 91,pero es sólo una pureba
No tiene clave primaria y las sentencias que le preceden son:

cSqlA := "SELECT * FROM latabla WHERE (TIPUSOLI = 'A' OR TIPUSOLI = 'B') AND ESTAT = 1 LIMIT 1"
(Pongo 'LIMIT 1' porque quiero trabajar registro a registro).

oQry := oConDB:Query( cSqlA )

While oQry:nRecCount > 0

../... resto de código.
oQry := oConDB:Query( cSqlA )
End

El flujo del programa entra en el 'While' y cuando llega a la instrucción que cambia REFESOLI=91 antes del nuevo oQry antes del End, pués peta.

Sigo haciendo variaciones a ve si doy con ello y además entiendo lo que pasa.
Un Saludo
Carlos G.

FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
FiveWiDi
 
Posts: 1203
Joined: Mon Oct 10, 2005 2:38 pm

Re: TDolphin y FWH

Postby Hector Pedro Lerda » Wed Sep 30, 2015 1:31 pm

Buen día colega,
De los problemas que planteas a mi entender deberias:

FiveWiDi wrote:No tiene clave primaria y las sentencias que le preceden son:

cSqlA := "SELECT * FROM latabla WHERE (TIPUSOLI = 'A' OR TIPUSOLI = 'B') AND ESTAT = 1 LIMIT 1"
(Pongo 'LIMIT 1' porque quiero trabajar registro a registro).


La clave primaria es fundamental para la modificación UPDATE y el borrado DELETE de registros específicos que no idéntifi
End[/quote]cas a través de un WHERE directo, por cual agrega una clave primaria autoincremental y después hace este tipo de pruebas, la referencia se hará sola.

[quote="FiveWiDi"]cSqlA := "SELECT * FROM latabla WHERE (TIPUSOLI = 'A' OR TIPUSOLI = 'B') AND ESTAT = 1 LIMIT 1"
(Pongo 'LIMIT 1' porque quiero trabajar registro a registro).

oQry := oConDB:Query( cSqlA )

While oQry:nRecCount > 0

../... resto de código.
oQry := oConDB:Query( cSqlA )

Acá si en la sentencia colocas LIMIT 1 te va a traer un solo registro, o sea que el while que haces después lo debes cambiar por un if y ademas siempre se va a traer al primero que encuentre que puede ser el mismo que antes.
Y como tu dices te peta es porque no haces un skip en los datos se queda trabado en el primero.

Saludos y espero te sea de ayuda.
User avatar
Hector Pedro Lerda
 
Posts: 46
Joined: Tue May 07, 2013 7:27 pm
Location: Buenos Aires - Argentina

Re: TDolphin y FWH

Postby xmanuel » Wed Sep 30, 2015 3:28 pm

Bueno, yo no uso TDolphi. Lo mío es Eagle1 ;-)
Aún así a ver si te puedo ayudar...

Code: Select all  Expand view  RUN

cSqlA := "SELECT * FROM latabla WHERE (TIPUSOLI = 'A' OR TIPUSOLI = 'B') AND ESTAT = 1 LIMIT 1"
(Pongo 'LIMIT 1' porque quiero trabajar registro a registro).

oQry := oConDB:Query( cSqlA )

While oQry:nRecCount > 0

../... resto de código.
// Pon esto a lo peor se está recargando la memoria:
oQry:end()
oQry := oConDB:Query( cSqlA )
End
 


El select lo podrías hacer más fácil así:
Code: Select all  Expand view  RUN

cSqlA := "SELECT * FROM latabla WHERE TIPUSOLI IN ( 'A', 'B') AND ESTAT = 1 LIMIT 1"
 


Además como te dice Hector P. siempre vas a traer la primera que cumpla la sentencia.
Si quieres que te traiga las siguientes cambia a esto otro:

Code: Select all  Expand view  RUN

local inc := 0 // Pon esta variable
...
cSqlA := "SELECT * FROM latabla WHERE TIPUSOLI IN ( 'A', 'B') AND ESTAT = 1 LIMIT "  // fijate que termino en LIMIT sin parametro

oQry := oConDB:Query( cSqlA + str( inc ) + ", 1" ) // Fijate aqui

While oQry:nRecCount > 0


../... resto de código.

oQry:end()
oQry := oConDB:Query( cSqlA + str( ++inc ) + ", 1" ) // Mira aqui
End

 


Espero que valga, y si tienes dudas dimelo, OK

Saludos de Manu Exposito :P
______________________________________________________________________________
Sevilla - Andalucía
xmanuel
 
Posts: 763
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

Re: TDolphin y FWH

Postby FiveWiDi » Wed Sep 30, 2015 4:15 pm

Héctor, Manu,

Muchas gracias a ambos por el interés.
Esta noche empezaré a probar de nuevo teniendo en cuenta vuestros consejos.
Un Saludo
Carlos G.

FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
FiveWiDi
 
Posts: 1203
Joined: Mon Oct 10, 2005 2:38 pm

Re: TDolphin y FWH

Postby joseluisysturiz » Thu Oct 01, 2015 1:56 am

Hector Pedro Lerda wrote:Buen día colega,
De los problemas que planteas a mi entender deberias:

FiveWiDi wrote:No tiene clave primaria y las sentencias que le preceden son:

cSqlA := "SELECT * FROM latabla WHERE (TIPUSOLI = 'A' OR TIPUSOLI = 'B') AND ESTAT = 1 LIMIT 1"
(Pongo 'LIMIT 1' porque quiero trabajar registro a registro).


La clave primaria es fundamental para la modificación UPDATE y el borrado DELETE de registros específicos que no idéntifi
End
cas a través de un WHERE directo, por cual agrega una clave primaria autoincremental y después hace este tipo de pruebas, la referencia se hará sola.

FiveWiDi wrote:cSqlA := "SELECT * FROM latabla WHERE (TIPUSOLI = 'A' OR TIPUSOLI = 'B') AND ESTAT = 1 LIMIT 1"
(Pongo 'LIMIT 1' porque quiero trabajar registro a registro).

oQry := oConDB:Query( cSqlA )

While oQry:nRecCount > 0

../... resto de código.
oQry := oConDB:Query( cSqlA )

Acá si en la sentencia colocas LIMIT 1 te va a traer un solo registro, o sea que el while que haces después lo debes cambiar por un if y ademas siempre se va a traer al primero que encuentre que puede ser el mismo que antes.
Y como tu dices te peta es porque no haces un skip en los datos se queda trabado en el primero.

Saludos y espero te sea de ayuda.


Lo de la clave primaria dependeria si no se requiere duplicidad de registros, como por lo menos un maestro de productos, de clientes, etc..en cambio no seria necesaria para los movimientos de los productos..por decir algo, todo dependera de lo que se requiera, saludos... :shock:
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: TDolphin y FWH

Postby Hector Pedro Lerda » Thu Oct 01, 2015 11:44 am

FiveWiDi wrote:Lo de la clave primaria dependeria si no se requiere duplicidad de registros, como por lo menos un maestro de productos, de clientes, etc..en cambio no seria necesaria para los movimientos de los productos..por decir algo, todo dependera de lo que se requiera, saludos...


La clave primaria en modo autoincremental identifica al registro de la tabla, si queremos tener indices únicos los podemos crear sin necesidad de que sean primarios, cuando se tiene mucho volumen de datos es fundamental poder identificar un REGISTRO UNICO, no es solo para tablas maestras, dados que los UPDATE y DELETE son muy comunes en este tipo de tablas, si quisiera modificar o eliminar registros de una base donde los datos en los campos se repiten, si no tengo la identificación individual es imposible.
Para tablas donde no todos los datos son iguales la cadena de identificación única para un registro despues de del where (and ... or ...in()..=...) siempre va a ser mas complicada que un simple where id_XXXX = XXXXX que da la seguridad de no fallar.
Igual son formas de pensar y trabajar.
Saludos Pedro lerda
User avatar
Hector Pedro Lerda
 
Posts: 46
Joined: Tue May 07, 2013 7:27 pm
Location: Buenos Aires - Argentina

Re: TDolphin y FWH

Postby joseluisysturiz » Thu Oct 01, 2015 1:08 pm

Hector Pedro Lerda wrote:
FiveWiDi wrote:Lo de la clave primaria dependeria si no se requiere duplicidad de registros, como por lo menos un maestro de productos, de clientes, etc..en cambio no seria necesaria para los movimientos de los productos..por decir algo, todo dependera de lo que se requiera, saludos...


La clave primaria en modo autoincremental identifica al registro de la tabla, si queremos tener indices únicos los podemos crear sin necesidad de que sean primarios, cuando se tiene mucho volumen de datos es fundamental poder identificar un REGISTRO UNICO, no es solo para tablas maestras, dados que los UPDATE y DELETE son muy comunes en este tipo de tablas, si quisiera modificar o eliminar registros de una base donde los datos en los campos se repiten, si no tengo la identificación individual es imposible.
Para tablas donde no todos los datos son iguales la cadena de identificación única para un registro despues de del where (and ... or ...in()..=...) siempre va a ser mas complicada que un simple where id_XXXX = XXXXX que da la seguridad de no fallar.
Igual son formas de pensar y trabajar.
Saludos Pedro lerda

Estamos claros en ese punto, sin polemica no seria un campo de llave primaria, solo un campo asociativo para relacion con la tabla maestra, es a lo que me queria referir, el hacer un campo autoincremento para mi es solo tener un campo mas, ya que para realizar un delete o update lo haria por el campo relacionado a la tabla maestra y no por el campo auto...de todos modos entre gustos y colores, jejeje...es bueno igual tener y saber diferentes alternativas y formas de trabajar, saludos... :shock:
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 20 guests