FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Pregunta sobre RecordSet en MySql
Posts: 592
Joined: Tue Mar 14, 2006 11:34 PM
Pregunta sobre RecordSet en MySql
Posted: Tue May 12, 2009 04:15 AM
Hola a todos,

Tengo la siguiente situacion :

Al crear un RS : SELECT campo1,campo2,campo3...,0 AS itmsld FROM xtabla WHERE etc etc
anexo ese campo en cero para poder despues usarlo en validar si el usuario selecciono tal registro, si es asi, le quiero asignar valor de uno para identificarlo.

Y tomala !!!! me marca error :

Error description : Error adodb.recordset:FIELDS/0 S_OK:_VALUE

Ahora, si agrego un campo a la tabla para que me sirva para tal efecto, no me manda ese error, sino otro :

Error description : Error adodb.recordset/6 DISP_E_UNKNOWNAME: MOVENEXT

Y este es el codigo que uso :


Code (fw): Select all Collapse
aRS:MoveFirst()
WHILE !aRS:Eof()
聽 aRS:FIELDS("ITMSLD"):Value := 1
聽 aRS:MoveNext()
ENDDO


Ya le busque de varias maneras y nop, no se deja.

Alguno que puede indicarme que estoy haciendo mal o en todo caso, algun alternativa para esto.

Gracias y Saludos
FWH 10.6 + xHarbour + Borland 582
Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Re: Pregunta sobre RecordSet en MySql
Posted: Tue May 12, 2009 05:12 AM
Ray

Realize una prueba directa desde SQLyog con una tabla en Mysql, cree una tabla
Code (fw): Select all Collapse
cliente 聽CREATE TABLE `cliente` ( 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 
聽 聽 聽 聽 聽 聽`codigo` bigint(2) NOT NULL auto_increment, 聽
聽 聽 聽 聽 聽 聽`nombre` char(20) NOT NULL default '', 聽 聽 聽 
聽 聽 聽 聽 聽 聽`edad` int(11) NOT NULL default '0', 聽 聽 聽 聽 
聽 聽 聽 聽 聽 聽PRIMARY KEY 聽(`codigo`) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽
聽 聽 聽 聽 聽) ENGINE=InnoDB DEFAULT CHARSET=latin1


luego agrege unos registros
Code (fw): Select all Collapse
/*[10:51:28 p.m.][ 聽31 ms]*/ insert into `cliente`(`codigo`,`nombre`,`edad`) values ( NULL,'carlos','36');
/*[10:51:35 p.m.][ 聽 0 ms]*/ insert into `cliente`(`codigo`,`nombre`,`edad`) values ( NULL,'manuel','25');
/*[10:51:41 p.m.][ 聽16 ms]*/ insert into `cliente`(`codigo`,`nombre`,`edad`) values ( NULL,'jose','3');


luego realize una consulta similar a lo que tu quieres logran con ado

Code (fw): Select all Collapse
select codigo, nombre, edad from cliente

Estos datos son editables

pero insertando el campo que tu necesitas y que sera usado por el usuario para marcar un estado 'itmsld'

Code (fw): Select all Collapse
select codigo, nombre, edad, 0 AS itmsld from cliente

el grupo de datos de esta consulta no es editable.

He buscado en las ayudas de mysql, vfp y google, y no he encontrado una forma de hacerlo como tu indicas.
una posible forma es
hacer una alter table a la tabla, agregar una columna, usarla y lugo con alter table nuevamente eliminar la columna innecesario, pero no se
que tan adecuado sea eso.
:-)

sorry.

alguien con mas experiencia en sql ....

salu2
Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 1076
Joined: Fri Oct 07, 2005 10:41 PM
Re: Pregunta sobre RecordSet en MySql
Posted: Tue May 12, 2009 06:01 AM

Ray,

Alguna vez intente lo que comentas, si resultados favorables.

Lo que hice fue generar un columna (campo) para ese efecto sin problema alguno.

El error que se genera con el movenext, puede ser por razones de que la consulta no se ha generado o no hay conexi贸n al servidor o el objeto que generas del recordset no es v谩lido.

Soidito puede ayudarte mas espec铆ficamente con ADO, le ha metido mucho a ese tema.

William, Morales

Saludos



m茅xico.sureste
Posts: 592
Joined: Tue Mar 14, 2006 11:34 PM
Re: Pregunta sobre RecordSet en MySql
Posted: Tue May 12, 2009 02:25 PM

Muchas gracias Carlos y William,

Carlos : tienes razon, se bloquea el RS cuando se anexa la columna ya no es editable.

William : Eso es lo raro, que si esta activo el RS ya que visualizo el contenido y puedo hacer filtros, busquedas, etc

Seguire buscando y probando, ya que si son varios los browses que tengo en la app bajo esta modalidad y como me puse como loco a cambiar los browses de arrays/dbf temporales a recordsets sin darme cuenta de este detalle, pues, ahora no puedo avanzar :?

Saludos

Al rato le marco al buen amigo Armando :wink:

FWH 10.6 + xHarbour + Borland 582
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: Pregunta sobre RecordSet en MySql
Posted: Tue May 12, 2009 03:46 PM
Ray:

Tomando tu ejemplo

Code (fw): Select all Collapse
Al crear un RS : SELECT campo1,campo2,campo3...,0 AS itmsld FROM xtabla WHERE etc etc


No es posible hacerlo funcionar pues recuerda que el campo adicional (itmsld) solo existe en el RecordSet y con el c贸digo

Code (fw): Select all Collapse
aRS:MoveFirst()
WHILE !aRS:Eof()
聽 aRS:FIELDS("ITMSLD"):Value := 1
聽 aRS:MoveNext()
ENDDO


Al actualizar el campo temporal (aRS:FIELDS("ITMSLD"):Value := 1) y mover el puntero (aRs:MoveNext()) se actualiza tanto el RecordSet como la tabla, S脥 aunque no hagas el famoso oRs:Update(), peroooooo resulta que la tabla no tiene el campo itmsld y por eso te truena.

Creo que lo correcto es que definas un campo de tipo l贸gico pero en la tabla y te lo lleves al RecordSet para usarlo como Seleccionado o no.

Otro detalle que veo en tu c贸digo es que estas en un loop (WHILE) para actualizar el record set, yo te recomiendo que hagas uso de la fuerza bruta de un comando SQL (UPDATE ....) para actualizar la tabla y despues refrescas el Record Set.

Sabras que desgraciadamente tron贸 mi Disco Duro y apenas estoy en la etapa de recuperaci贸n de respaldos, tal vez por eso no me "veas" en el messenger.

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: Pregunta sobre RecordSet en MySql
Posted: Tue May 12, 2009 04:32 PM
Ray:

Te cuento, con el siguiente c贸digo no tira error alguno.

Code (fw): Select all Collapse
TRY
聽 聽 oRsCxc聽 :=聽 TOleAuto():New("adodb.recordset")
CATCH oError
聽 聽 MsgStop( "No se ha podido crear el RECORDSET de Cuentas por cobrar !", oApp:cAplicacion)
聽 聽 ShowError(oError)
聽 聽 oRsCxc聽 :=聽 NIL
聽 聽 RETURN(.F.)
END

oRsCxc:CursorLocation聽 聽:= adUseClient
oRsCxc:LockType聽聽 聽 聽 聽 聽:= adLockOptimistic
oRsCxc:CursorType聽 聽聽 聽 聽:= adOpenDynamic
oRsCxc:Source聽 聽聽 聽 聽 聽 聽 聽:= "SELECT " + ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 "* " + ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 "FROM " + ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 "carcxc " + ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 "WHERE " +;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 "car_sdo <> 0.00" +;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 "ORDER BY " +;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 "car_cli,car_doc"
oRsCxc:Properties("Unique Table"):Value := "carcxc"
oRsCxc:PageSize聽聽 聽 聽 聽 := 20
oRsCxc:CacheSize聽 聽 聽 聽:= 20
oRsCxc:ActiveConnection(oApp:oCon)

TRY
聽 聽 oRsCxc:Open()
CATCH oError
聽 聽 MsgStop( "No se ha podido abrir el RECORDSET de Cuentas por cobrar !", oApp:cAplicacion)
聽 聽 ShowError(oError)
聽 聽 RETURN(.F.)
END

IF oRsCxc:BOF() .AND. oRsCxc:EOF()
ELSE
聽 聽 oRsCxc:MoveFirst()
聽 聽 DO WHILE ! oRsCxc:EOF()
聽 聽 聽 聽 oRsCxc:Fields("CAR_PAH"):Value := (.T.)
聽 聽 聽 聽 oRsCxc:MoveNext()
聽 聽 ENDDO
聽 聽 oRsCxc:MoveFirst()
ENDIF


El campo CAR_PAH esta definido desde la creaci贸n de la tabla.

Quedo a tus ordenes.
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero

Continue the discussion