FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour QUE SIGNIFICA ESTE ERROR
Posts: 215
Joined: Fri Feb 02, 2007 03:38 PM
QUE SIGNIFICA ESTE ERROR
Posted: Sat Feb 02, 2008 02:43 AM

Hola Amigos del Foro,

Estoy tratando con un Programa de ALtas, Bajas y Cambios con Ado y Mysql, tengo un Browse con los respectivos botones de las acciones , las altas no hay problemas , las bajas no hay problemas, pero cuando se trata de editar o modificar un registro ahi esta el problema me lanza un mensaje de error :

DISP_E_MEMBERNOTFOUND:UPDATE(0)

No se que significa, revise mis estructuras de datos y todo bien, son 6 campos tipo char probe a cambiarlos a varchar pero da el mismo error lo raro es que solo cuando modifico.

Saludes y gracias de Antemano

Desde Managua, Nicaragua

Ramon Paredes

... Desde la Tierra de lagos y Volcanes......
Posts: 215
Joined: Fri Feb 02, 2007 03:38 PM
A nadie se le ha presentado este error S.O.S
Posted: Sun Feb 03, 2008 04:45 PM

Hola amigos del foro,

Sera que a nadie se le ha presentado este error ?

Agradezco cualquier orientacion al respecto

Saludes desde Managua, NIcaragua

Ramon Paredes

... Desde la Tierra de lagos y Volcanes......
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
QUE SIGNIFICA ESTE ERROR
Posted: Sun Feb 03, 2008 05:10 PM

Ram贸n,

Parece que le est谩s enviando el mensaje Update() a un objeto OLE, y que dicho mensaje no est谩 definido en el objeto.

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 229
Joined: Sat Mar 18, 2006 03:42 PM
QUE SIGNIFICA ESTE ERROR
Posted: Mon Feb 04, 2008 07:51 PM

Hola Ram贸n

Podr铆as colocar el c贸digo con el que haces las modificaciones?. Usas ADO puro o ADORDD

Un saludo

Marcelo

Marcelo Jingo
Posts: 215
Joined: Fri Feb 02, 2007 03:38 PM
Gracias por Responder Antonio y Sjingo
Posted: Tue Feb 05, 2008 10:20 PM

Sjingo :

Te muestro el codigo , como comente las altas, bien todo, las bajas, bien todo pero las modificaciones o ediciones ahi salta el error que mencione en mi primer post,

hasta puse un msgalert para que me mostrara en ese momento los campos los valores y la longitudes y todo esta ok

agardezco cualquier sugerencia al respecto como ven es ado puro no uso adordd

//=====================
FUNCTION PRUEBA()
//=====================

Local oDlg,oBrw,SiNuevo := .f.
LOCAL oConexionAdo := TOLEAUTO():New("adodb.connection")
PRIVATE oRecordset := TOLEAUTO():New("adodb.recordset")

oConexionAdo:Open("DRIVER={MySQL ODBC 3.51 Driver}; SERVER=127.0.0.1 ; DATABASE=Personal1; UID=root; PWD=1234")
oRecordSet:LockType := adLockOptimistic
oRecordSet:CursorType := adOpenKeyset
oRecordSet:CursorLocation := adUseClient
oRecordSet:ActiveConnection(oConexionAdo)
oRecordSet:Source := "Select * from maestro"
oRecordSet:Open()
aCifra = oRecordset:Recordcount()

DEFINE DIALOG oDlg RESOURCE 78

REDEFINE LISTBOX oBrw FIELDS oRecordSet:Fields("Numero"):value,;
oRecordSet:Fields("Nombres"):value,;
oRecordSet:Fields("Apellido1"):value,;
oRecordSet:Fields("Apellido2"):value,;
oRecordSet:Fields("Tipo"):value,;
oRecordSet:Fields("Tip_Emp"):value;
HEADERS "Numero","Nombres","Apellido1","Apellido2","Tipo","Tip_Emp" ;
FIELDSIZES 80,150,120,120,60,100 ;
COLOR CLR_RED,CLR_WHITE ;
ID 108 OF oDlg

       oBrw:aJustify  ={.F.,.F.,.f.,.f.,.f.,.f.}
       oBrw:bLogicLen = { || oRecordSet:RecordCount }
       oBrw:bGoTop    = { || oRecordSet:MoveFirst() }
       oBrw:bGoBottom = { || oRecordSet:MoveLast() }
       oBrw:bSkip     = { | nSkip | Skipper( oRecordSet, nSkip ) }
       oBrw:cAlias    = "ARRAY"

REDEFINE BUTTON ID 102 of oDlg ACTION( AGREGO( .t., oBrw ) )
REDEFINE BUTTON ID 103 of oDlg ACTION( AGREGO( .f., oBrw ) )
REDEFINE BUTTON ID 104 of oDlg ACTION( BORRO( oBrw ) )
REDEFINE BUTTON ID 106 of oDlg ACTION( BUSCO() )
REDEFINE BUTTON ID 105 of oDlg ACTION( oDlg:End() )

ACTIVATE DIALOG oDlg CENTERED

oRecordSet:Close()
oConexionAdo:Close()

RETURN (.T.)

// oWndBrw:SetControl(oBrw)

STATIC FUNCTION SKIPPER( oRs, nSkip )

LOCAL nRec := oRs:AbsolutePosition

oRs:Move( nSkip )

IF oRs:EOF; oRs:MoveLast(); ENDIF
IF oRs:BOF; oRs:MoveFirst(); ENDIF

RETURN oRs:AbsolutePosition - nRec

Static Function RecordSetSkip(nSkip)
LOCAL nRec := oRecordSet:AbsolutePosition
oRecordSet:Move( nSkip )
IF oRecordSet:EOF; oRecordSet:MoveLast(); ENDIF
IF oRecordSet:BOF; oRecordSet:MoveFirst(); ENDIF
Return (oRecordSet:AbsolutePosition - nRec)

//========================================
STATIC FUNCTION AGREGO( Sinuevo, oBrw )
//========================================

Public oDlg2,mNumero,mNomb,mAp1,mAp2,mTipo,mDtipo,oNumero,oNomb,oAp1,oAp2,oTipo,oDtipo

if sinuevo = .t.

mNumero = space(5)
mNomb = space(25)
mAp1 = space(15)
mAp2 = space(12)
mTipo = space(1)
mDtipo = space(10)
else
mNumero = oRecordSet:Fields("Numero"):value
mNomb = oRecordSet:Fields("Nombres"):value
mAp1 = oRecordSet:Fields("Apellido1"):value
mAp2 = oRecordSet:Fields("Apellido2"):value
mTipo = oRecordSet:Fields("Tipo"):value
mDtipo = oRecordSet:Fields("Tip_Emp"):value
endif

DEFINE DIALOG oDlg2 RESOURCE 19

REDEFINE GET oNumero Var mNumero ID 101 of oDlg2
REDEFINE GET oNomb Var mNOmb ID 102 of oDlg2
REDEFINE GET oAp1 Var mAp1 ID 103 of oDlg2
REDEFINE GET oAp2 Var mAp2 ID 104 of oDlg2
REDEFINE GET oTipo Var mTipo ID 105 of oDlg2
REDEFINE GET oDtipo Var mDtipo ID 106 of oDlg2

REDEFINE BUTTON ID 107 of oDlg2 ACTION( GRABO1( SiNuevo, oBrw ),oDlg2:End() )
REDEFINE BUTTON ID 108 of oDlg2 ACTION( oDlg2:End(), oDlg2:End() )

ACTIVATE DIALOG oDlg2 CENTERED

RETURN

//=======================================
STATIC FUNCTION GRABO1( Sinuevo,oBrw)
//=======================================

IF SiNuevo = .t.

msgalert("aqui grabo")
oRecordSet:Addnew()
oRecordSet:Fields("Numero"):value := mNumero
oRecordSet:Fields("Nombres"):value := mNomb
oRecordSet:Fields("Apellido1"):value := mAp1
oRecordSet:Fields("Apellido2"):value := mAp2
oRecordSet:Fields("Tipo"):value := mTipo
oRecordSet:Fields("Tip_Emp"):value := mDtipo
oRecordSet:Update()

else

msgalert("aqui edito")
oRecordSet:Fields("Numero"):value := mNumero
oRecordSet:Fields("Nombres"):value := mNomb
oRecordSet:Fields("Apellido1"):value := mAp1
oRecordSet:Fields("Apellido2"):value := mAp2
oRecordSet:Fields("Tipo"):value := mTipo
oRecordSet:Fields("Tip_Emp"):value := mDtipo
MSGALERT("Campos a Mostrar : "+mNumero+str(len(mNumero))+" "+mNomb+str(len(mNomb))+" "+mAp1+str(len(mAP1))+" "+mAp2+str(len(mAp2))+" "+mTipo+str(len(mTipo))+" "+mDtipo+str(len(mDtipo)))
oRecordSet:Update()
endif

//oRecordSet:Update()
oRecordSet:Requery()

oBrw:Refresh()

MsgAlert("El RecordSet ha sido actualizado")

RETURN

//================================
STATIC FUNCTION BORRO( oBrw )
//================================

oRecordSet:Delete()
oRecordSet:Requery()

oBrw:Refresh()

RETURN

... Desde la Tierra de lagos y Volcanes......
Posts: 229
Joined: Sat Mar 18, 2006 03:42 PM
QUE SIGNIFICA ESTE ERROR
Posted: Wed Feb 06, 2008 05:08 AM

Hola Ram贸n

Aparentemente todo est谩 muy bien, y as铆 tambi茅n lo hago yo, usando el recordset con las mismas caracter铆sticas, y si funciona.

Es como si en ese momento se destruyera la variable del objeto recordset. Prueba quitando el msgalert() que est谩 antes del Update().

A lo mejor alguien con m谩s experiencia pueda encontrar el problema. Aunque otra posibilidad es usar el m茅todo execute() del objeto Conection.

Que :( no poder ayudar, espero que encuentres pronto la solucion.

Un Saludo

Marcelo Jingo

Marcelo Jingo
Posts: 1144
Joined: Mon Feb 05, 2007 07:15 PM
QUE SIGNIFICA ESTE ERROR
Posted: Wed Feb 06, 2008 06:01 AM

Ramon,

las variables, de tipo caracter checale que tengan la misma longitud

en la tabla.

por ejemplo APELLIDO1 VARCHAR(15)

mAp1 = space(15)

verifica que al momento de guardar no haya valores nulos

saludos...

Cesar Cortes Cruz

SysCtrl Software

Mexico



' Sin +- FWH es mejor "
Posts: 1144
Joined: Mon Feb 05, 2007 07:15 PM
QUE SIGNIFICA ESTE ERROR
Posted: Wed Feb 06, 2008 06:01 AM

Ramon,

las variables, de tipo caracter checale que tengan la misma longitud

en la tabla.

por ejemplo APELLIDO1 VARCHAR(15)

mAp1 = space(15)

verifica que al momento de guardar no haya valores nulos

saludos...

Cesar Cortes Cruz

SysCtrl Software

Mexico



' Sin +- FWH es mejor "
Posts: 1144
Joined: Mon Feb 05, 2007 07:15 PM
QUE SIGNIFICA ESTE ERROR
Posted: Wed Feb 06, 2008 06:10 AM

prueba tambien asi al guardar ,, sobre todo cuando es edicion,,

oRecordSet:Fields("Apellido1"):value := _scFill( mAp1, 15 )
oRecordSet:update()

function _scFill(c, nLon)
local nLen
local nSp
if valtype(c) <> "C"
c := ''
ENDIF
nLen := len(c)
nSp := len(space(nLon-nLen))
return ( c+space(nSp) )

saludos cordiales.

Cesar Cortes Cruz

SysCtrl Software

Mexico



' Sin +- FWH es mejor "
Posts: 711
Joined: Thu Oct 06, 2005 09:57 PM
QUE SIGNIFICA ESTE ERROR
Posted: Wed Feb 06, 2008 06:16 AM

En mi opini贸n, el objeto RecordSet es una matriz (array) y por tanto su manejo es muy parecido a la clase Database de FWH. Es una redundancia crear variables desde el RecordSet. He suprimido las funciones RecordSetSkip y Agrego1.- Uso oRs = oRecordSet.
Este ser铆a el c贸digo:

REDEFINE BUTTON ID 102 of oDlg ACTION( AGREGO( .t., oBrw, oRs ) )
REDEFINE BUTTON ID 103 of oDlg ACTION( AGREGO( .f., oBrw, oRs ) )

//========================================
STATIC FUNCTION AGREGO( lAlta, oBrw, oRs )
//========================================
Local oDlg, lSalvar := .f.

IF lAlta = .t.
oRs:ADDNEW() // crea un nuevo registro en blanco
oRs:Fields("Numero"):value := SPACE(5)
oRs:Fields("Nombre"):value := SPACE(25)
oRs:Fields("Apellido1"):value := SPACE(15)
oRs:Fields("Apellido2"):value := SPACE(12)
oRs:Fields("Tipo"):value := SPACE(1)
oRs:Fields("Tip_Emp"):value := SPACE(10)
ENDI

DEFINE DIALOG oDlg RESOURCE 19

REDEFINE GET oRs:Fields("Numero"):value ID 101 of oDlg
REDEFINE GET oRs:Fields("Nombre"):value ID 102 of oDlg
REDEFINE GET oRs:Fields("Apellido1"):value ID 103 of oDlg
REDEFINE GET oRs:Fields("Apellido2"):value ID 104 of oDlg
REDEFINE GET oRs:Fields("Tipo"):value ID 105 of oDlg
REDEFINE GET oRs:Fields("Tip_Emp"):value ID 106 of oDlg

REDEFINE BUTTON ID 107 of oDlg ;
ACTION ( lSalvar := .T. , oDlg:End() )
REDEFINE BUTTON ID 108 of oDlg ;
ACTION oDlg:End()

ACTIVATE DIALOG oDlg CENTERED

IF lSalvar
oRs:UPDATE()
IF !empty(oRs:Filter)
oRs:REQUERY()
ENDI
ELSE
IF lAlta
oRs:DELETE()
oRs:REQUERY()
ENDI
ENDIF

oBrw:Refresh()
RETURN( NIL )

En las modificaciones no debe darte error. Si te da error en las altas, entonces es que la definici贸n que estamos haciendo de los campos, no es la correcta.

Un saludo



Manuel
Posts: 215
Joined: Fri Feb 02, 2007 03:38 PM
graciaspor sus aportes
Posted: Wed Feb 06, 2008 03:03 PM

Amigos del foro,

Agradezco sus sugerencias, aplicare a ver que sucede, apenas pruebe les aviso como me fue,

Desde Managua , Nicaragua

Ramon Paredes

... Desde la Tierra de lagos y Volcanes......
Posts: 215
Joined: Fri Feb 02, 2007 03:38 PM
solucionado
Posted: Wed Feb 06, 2008 04:46 PM

Amigos del foro, sjingo, sysctrl2,Manuel,

Gracias por Responder ya probe las opciones y me funciono al 100% con al solucion planteada por manuel y algo de la funcion de sysctrl2,

Agradezco los aportes de este muy productivo foro y de los amigos en disposicion de ayuda desinteresada,

Saludes desde Managua, Nicaragua

Ramon Paredes

... Desde la Tierra de lagos y Volcanes......
Posts: 989
Joined: Thu Nov 24, 2005 03:01 PM
QUE SIGNIFICA ESTE ERROR
Posted: Wed Feb 20, 2008 12:27 PM
Hola Cesar,
si mi memoria clippera no falla, la funci贸n _scFill ya existe en Clipper/Harbour y se llama PadR :-)

PadR tiene un comportamiento interesante, y es que no solo a帽ade espacios hasta la longitud dada, sino tambien trunca la longitud si la string original la supera.

Un saludo,

Carlos.

sysctrl2 wrote:
function _scFill(c, nLon)
......
return ( c+space(nSp) )

saludos cordiales.
Saludos
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
鈥淚f you think education is expensive, try ignorance"
Posts: 1144
Joined: Mon Feb 05, 2007 07:15 PM
QUE SIGNIFICA ESTE ERROR
Posted: Wed Feb 20, 2008 04:56 PM

Quetal Carlos,,

gracias por el tips.

saludos.

Cesar Cortes Cruz

SysCtrl Software

Mexico



' Sin +- FWH es mejor "
Posts: 1956
Joined: Fri Oct 07, 2005 07:08 PM
Re: QUE SIGNIFICA ESTE ERROR
Posted: Wed Nov 24, 2010 12:43 PM
Dejen meterme en esta parte del codigo, quiero dar mi opinion personal y que me corrijan si esta mal.

Code (fw): Select all Collapse
oRs:Fields("Numero"):value := SPACE(5)


Eso es muy facil al momento de codificar, me refiero a poner entre "" el nombre del campo, pero me ha pasado que si en un select tengo 2 o mas tablas y que el nombre de uno o varios de los campos sean iguales entre las tablas...

A esto me refiero:

Supongamos esta estructura
TABLA1 -> ID char de 5
TABLA1 -> NOMBRE char de 15

TABLA2 -> ID char de 5
TABLA2 -> PRECIO char de 3


Cuando hacemos el select
SELECT * FROM TABLA1 A, TABLA2 B WHERE A.ID = B.ID


Y luego utilizamos:
Code (fw): Select all Collapse
oRs:Fields("ID"):value := SPACE(5)


Tremendo quilombo se te puede armar si no conoces el funcionamiento del recordset, ya que ese ID que estamos poniendo entre comillas dobles el recordset lo tomo de la segunda tabla (tabla2->ID) y no del tabla1... por lo que a mi entender ser铆a mejor acostumbrarse al principio (o siempre) a utilizarlo de esta forma (ojo, es comentario nada mas)

Code (fw): Select all Collapse
oRs:Fields(0):value := SPACE(5) 聽// id tabla 1
oRs:Fields(1):value := SPACE(15) 聽// nombre tabla 1
oRs:Fields(2):value := SPACE(5) 聽// id tabla 2
oRs:Fields(3):value := SPACE(3) 聽// precio tabla 2


Concuerdan con esto o por no saber manejar bien el recordset no estoy teniendo en cuenta algo?

Gracias.
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/