Pregunta sobre RecordSet en MySql

Pregunta sobre RecordSet en MySql

Postby Raymundo Islas M. » Tue May 12, 2009 4: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: Select all  Expand view
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
User avatar
Raymundo Islas M.
 
Posts: 592
Joined: Tue Mar 14, 2006 11:34 pm
Location: Acapulco, Gro. MEXICO

Re: Pregunta sobre RecordSet en MySql

Postby carlos vargas » Tue May 12, 2009 5:12 am

Ray

Realize una prueba directa desde SQLyog con una tabla en Mysql, cree una tabla
Code: Select all  Expand view

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: Select all  Expand view

/*[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: Select all  Expand view

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: Select all  Expand view

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)
User avatar
carlos vargas
 
Posts: 1704
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Pregunta sobre RecordSet en MySql

Postby wmormar » Tue May 12, 2009 6: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
User avatar
wmormar
 
Posts: 1074
Joined: Fri Oct 07, 2005 10:41 pm
Location: México

Re: Pregunta sobre RecordSet en MySql

Postby Raymundo Islas M. » Tue May 12, 2009 2: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
User avatar
Raymundo Islas M.
 
Posts: 592
Joined: Tue Mar 14, 2006 11:34 pm
Location: Acapulco, Gro. MEXICO

Re: Pregunta sobre RecordSet en MySql

Postby Armando » Tue May 12, 2009 3:46 pm

Ray:

Tomando tu ejemplo

Code: Select all  Expand view

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: Select all  Expand view

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
User avatar
Armando
 
Posts: 3103
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: Pregunta sobre RecordSet en MySql

Postby Armando » Tue May 12, 2009 4:32 pm

Ray:

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

Code: Select all  Expand view

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
User avatar
Armando
 
Posts: 3103
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 143 guests