QUE SIGNIFICA ESTE ERROR

User avatar
Ramon Paredes
Posts: 215
Joined: Fri Feb 02, 2007 3:38 pm
Location: Managua, Nicaragua

QUE SIGNIFICA ESTE ERROR

Post by Ramon Paredes »

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......
User avatar
Ramon Paredes
Posts: 215
Joined: Fri Feb 02, 2007 3:38 pm
Location: Managua, Nicaragua

A nadie se le ha presentado este error S.O.S

Post by Ramon Paredes »

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......
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

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
User avatar
sjingo
Posts: 229
Joined: Sat Mar 18, 2006 3:42 pm
Location: Ibarra-Ecuador

Post by sjingo »

Hola Ramón

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


Un saludo

Marcelo
User avatar
Ramon Paredes
Posts: 215
Joined: Fri Feb 02, 2007 3:38 pm
Location: Managua, Nicaragua

Gracias por Responder Antonio y Sjingo

Post by Ramon Paredes »

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 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......
User avatar
sjingo
Posts: 229
Joined: Sat Mar 18, 2006 3:42 pm
Location: Ibarra-Ecuador

Post by sjingo »

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
User avatar
sysctrl2
Posts: 833
Joined: Mon Feb 05, 2007 7:15 pm
Contact:

Post by sysctrl2 »

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 "
User avatar
sysctrl2
Posts: 833
Joined: Mon Feb 05, 2007 7:15 pm
Contact:

Post by sysctrl2 »

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 "
User avatar
sysctrl2
Posts: 833
Joined: Mon Feb 05, 2007 7:15 pm
Contact:

Post by sysctrl2 »

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 "
User avatar
Manuel Valdenebro
Posts: 706
Joined: Thu Oct 06, 2005 9:57 pm
Location: Málaga-España

Post by Manuel Valdenebro »

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 _, no es la correcta.
Last edited by Manuel Valdenebro on Mon Feb 18, 2008 9:38 am, edited 1 time in total.
Un saludo

Manuel
User avatar
Ramon Paredes
Posts: 215
Joined: Fri Feb 02, 2007 3:38 pm
Location: Managua, Nicaragua

graciaspor sus aportes

Post by Ramon Paredes »

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......
User avatar
Ramon Paredes
Posts: 215
Joined: Fri Feb 02, 2007 3:38 pm
Location: Managua, Nicaragua

solucionado

Post by Ramon Paredes »

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......
Carlos Mora
Posts: 988
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Post by Carlos Mora »

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.
User avatar
sysctrl2
Posts: 833
Joined: Mon Feb 05, 2007 7:15 pm
Contact:

Post by sysctrl2 »

Quetal Carlos,,

gracias por el tips.

saludos.
Cesar Cortes Cruz
SysCtrl Software
Mexico

' Sin +- FWH es mejor "
User avatar
goosfancito
Posts: 1392
Joined: Fri Oct 07, 2005 7:08 pm

Re: QUE SIGNIFICA ESTE ERROR

Post by goosfancito »

Dejen meterme en esta parte del codigo, quiero dar mi opinion personal y que me corrijan si esta mal.

Code: Select all

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 _ 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: Select all

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

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.
Un aporte chico hace grandes cambios.
Apoyemos al proyecto "Hogar pimpinela"
Bajate la aplicación (gratuita) y encuentra en ella toda la info de como podes colaborar.
GRACIAS!
https://play.google.com/store/apps/deta ... .acomprar
Post Reply