Estoy comenzando a trabajar con ADO y MySql hasta aqu铆 hice un peque帽o mantenedor de una tabla de art铆culos en la que puedo agregar, eliminar y crear registros desde el recordset y funciona bien, pero luego despues de unos minutos de operar (modificabdo y creando) aparece el error mas abajo, lo he probado como localhost y conectandome a una DB remota. Ser谩 porque se desconecta del servidor?, porque despues al volver a entrar funciona por un tiempo y se cae nuevamente.
Path and name: c:\sistemas\sofvenxh\sofvenxh.Exe (32 bits)
Size: 3,432,960 bytes
Time from start: 0 hours 4 mins 42 secs
Error occurred at: 27/08/2011, 20:16:35
Error description: Error adodb.recordset/6 DISP_E_UNKNOWNNAME: MOVE
Args:
[ 1] = N -11
Stack Calls
===========
Called from: source\rtl\win32ole.prg => TOLEAUTO:MOVE(0)
Called from: c:\sistemas\sofvenxh\manarti.prg => SKIPPER(119)
Called from: c:\sistemas\sofvenxh\manarti.prg => (b)MANARTI(85)
Called from: .\source\classes\WBROWSE.PRG => TWBROWSE:SKIP(1733)
Called from: .\source\classes\WBROWSE.PRG => TWBROWSE:PAINT(757)
Called from: .\source\classes\WBROWSE.PRG => TWBROWSE:DISPLAY(2277)
Called from: .\source\classes\CONTROL.PRG => TCONTROL:HANDLEEVENT(1630)
Called from: .\source\classes\WBROWSE.PRG => TWBROWSE:HANDLEEVENT(1656)
Aqu铆 el c贸digo del prg
GRACIAS DE ANTEMANO POR CUALQUIER AYUDA
Path and name: c:\sistemas\sofvenxh\sofvenxh.Exe (32 bits)
Size: 3,432,960 bytes
Time from start: 0 hours 4 mins 42 secs
Error occurred at: 27/08/2011, 20:16:35
Error description: Error adodb.recordset/6 DISP_E_UNKNOWNNAME: MOVE
Args:
[ 1] = N -11
Stack Calls
===========
Called from: source\rtl\win32ole.prg => TOLEAUTO:MOVE(0)
Called from: c:\sistemas\sofvenxh\manarti.prg => SKIPPER(119)
Called from: c:\sistemas\sofvenxh\manarti.prg => (b)MANARTI(85)
Called from: .\source\classes\WBROWSE.PRG => TWBROWSE:SKIP(1733)
Called from: .\source\classes\WBROWSE.PRG => TWBROWSE:PAINT(757)
Called from: .\source\classes\WBROWSE.PRG => TWBROWSE:DISPLAY(2277)
Called from: .\source\classes\CONTROL.PRG => TCONTROL:HANDLEEVENT(1630)
Called from: .\source\classes\WBROWSE.PRG => TWBROWSE:HANDLEEVENT(1656)
Aqu铆 el c贸digo del prg
GRACIAS DE ANTEMANO POR CUALQUIER AYUDA
聽 聽 聽oCon := TOLEAUTO():new("adodb.connection")
聽 聽oCon:ConnectionString:="Driver={MySQL ODBC 3.51 Driver};Server="+cHost+";Port=3306;Database="+cDataBase+";User="+cUser+"; Password="+cPassWord+";Option=3;"
聽 聽 聽oCon:ConnectionTimeout:=3600
聽 聽//oCon:ConnectionString:="Driver={MySQL ODBC 3.51 Driver};Server="+cHost+";Port=3306;Database=portalphpnuke;User=user; Password=password;Option=3;"
聽 聽 聽TRY
聽 聽 聽 聽oCon:Open()
聽 聽 聽CATCH
聽 聽 聽 聽 MSGSTOP("NO SE CONECTO")
聽 聽 聽 聽 聽 聽 RETURN NIL
聽 聽 聽END
聽 聽 聽oCmd := TOLEAUTO():New("adodb.command")
聽 聽 聽oCmd :ActiveConnection(oCon)
聽 聽 聽oRS := TOleAuto():New("adodb.recordset")
聽 聽 聽oRS :CursorLocation := adUseClient
聽 聽 聽oRS :LockType 聽 聽 聽 := adLockOptimistic
聽 聽 聽oRS :CursorType 聽 聽 := adOpenKeyset
聽 聽oRs:ActiveConnection(oCon)
聽 聽 聽oRs:Source := "SELECT * FROM articulos ORDER BY descripcion"
聽 聽 聽oRS:Open()
聽 聽/*IF oRS:Supports(adSeek) 聽 // Aqui Indexamos el RecordSet Para poder buscar, en este caso por codigo
聽 聽 聽 oRS:Index := "codigo"
聽 聽 聽 聽 聽聽 聽msginfo("index")
聽 聽ENDIF*/
聽 聽 聽DEFINE DIALOG ODLG resource "ODLG_MANART" TITLE "TABLA DE ARTICULOS"
聽 聽 聽REDEFINE METER oMeter VAR nParte TOTAL nTotal ID 300 OF oDlg UPDATE // BARCOLOR RGB(0,0,128),RGB(0,0,128)
聽 聽 聽REDEFINE GET oG340 VAR cBuscar ID 340 OF oDlg UPDATE PICTURE "@!" ;
聽 聽 聽VALID (FILTRA_MAR(cBuscar,oRS,oLBx),.T.)
聽 聽 聽oRS:MoveFirst()
聽 聽 聽REDEFINE LISTBOX oLbx FIELDS oRS:Fields("codigo"):value,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽oRS:Fields("descripcion"):value,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽oRS:Fields("Precioventa"):value;
聽 聽 聽 聽 SIZES 40,250,20;
聽 聽 聽聽 聽聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽HEADERS "C贸digo",;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽"Descripcion",;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽"Precio";
聽 聽 聽聽 聽聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 id 135 of Odlg 聽UPDATE ON DBLCLICK(EDITA_MAR(.f.,oRS),oLbx:REFRESH())
聽 聽oLbx:aJustify := {.F.,.f.,.t.,.t.}
聽 聽 聽oLbx:bLogicLen := { || oRs:RecordCount }
聽 聽oLbx:bGoTop 聽 聽:= { || oRs:MoveFirst() }
聽 聽oLbx:bGoBottom := { || oRs:MoveLast() }
聽 聽oLbx:bSkip 聽 聽 := { | nSkip | Skipper( oRs, nSkip ) }
聽 聽oLbx:cAlias 聽 聽:= "ARRAY"
聽 聽 oLbx:bKeyDown :={|nKey|IIF(nKey == VK_RETURN,(EDITA_MAR(.F.,oRS),oLbx:bGOTOP(),olbx:refresh(),OLBX:SETFOCUS()),;
聽 IIF(nKey == VK_DELETE ,ELIM_MAR(oRS,oLBx),;
聽 聽 IIF(nKey == VK_INSERT ,(EDITA_MAR(.T.,oRS),oLbx:bGOTOP(),olbx:refresh(),OLBX:SETFOCUS()) ,.T.)))}
聽 聽REDEFINE BUTTONBMP ob136 ID 136 of oDlg BITMAP "NUEVO" ;
聽 聽 聽action(EDITA_MAR(.T.,oRS),olbx:refresh(),oLbx:SetFocus()) 聽WHEN VALIACCE("A01")>2
聽 聽 聽ob136:cTooltip := "Crea nuevo registro"
聽 聽REDEFINE BUTTONBMP ob137 ID 137 of oDlg BITMAP "EDITAR" ;
聽 聽 聽action(EDITA_MAR(.F.,oRS),olbx:refresh(),oLbx:SetFocus())
聽 聽 聽ob137:cTooltip:= "modifica registro"
聽 聽 聽REDEFINE BUTTONBMP ob138 ID 138 of ODLG BITMAP "ELIMINA" ACTION(ELIM_MAR(oRS,oLBx))
聽 聽 聽ob138:cTooltip:= "Elimina registro"
聽 聽 聽REDEFINE BUTTONBMP ob139 ID 139 of ODLG BITMAP "IMPRESORA";
聽 聽 聽action(olbx:gotop(),olbx:report(),olbx:gobottom())
聽 聽 聽ob139:cTooltip:= "Imprime"
聽 聽 聽REDEFINE BUTTONBMP ob139 ID 140 of ODLG BITMAP "EXCEL" ACTION(EXCEL_MAR(oRS,oMeter))
聽 聽 聽ob139:cTooltip:= "Listado Articulos a Excel"
聽 聽 聽REDEFINE BUTTON oB450 ID 450 OF oDlg ACTION (odlg:end())
聽 聽 聽ACTIVATE dialog ODLG centered // VALID LSALE
聽 聽oRS:Close()
聽 聽 聽oCon:Close()
RETURN .T.
STATIC FUNCTION SKIPPER( oRsx, nSkip )
聽LOCAL nRec := oRsx:AbsolutePosition
聽oRsx:Move( nSkip )
聽IF oRsx:EOF; oRsx:MoveLast(); ENDIF
聽IF oRsx:BOF; oRsx:MoveFirst(); ENDIF
RETURN( oRsx:AbsolutePosition - nRec )
FUNCTION FILTRA_MAR(cBuscar,oRS,oLBx)
聽IF LEN(ALLTRIM(cBuscar))>0
聽 聽 聽oRs:Filter:= "descripcion LIKE" + " 聽'*" + ALLTRIM(cBuscar) + "*' "
聽ELSE
聽聽 聽 oRs:Filter:= ""
聽ENDIF
聽oRs:Refresh()
聽oLBx:Refresh()
RETURN NIL
FUNCTION EDITA_MAR(lNuevo,oRS)
聽LOCAL oG114,oG102,lGraba:=.F.,oDlg,oB308,oB502,nBookMark,;
聽cCodigo := SPACE(20),;
聽cDescri := SPACE(50),;
聽nPrecio := 0,;
聽nMaximo := 0
聽IF !lnuevo
聽 聽 聽 聽 cCodigo := oRS:Fields("codigo"):value
聽 聽 聽 聽 cDescri := oRS:Fields("descripcion"):value
聽ENDIF
聽DEFINE DIALOG oDlg RESOURCE "ODLG_ARTEDIMYSQL" TITLE "DATOS ARTICULO "
聽REDEFINE GET oG114 VAR cCodigo ID 101 OF oDlg WHEN lNuevo UPDATE PICTURE "@!" ;
聽valid (IIF(EXISTE_CODIGO(cCodigo,oRS),(cCodigo:=SPACE(20),oG114:oJump:=oG114,oG114:REFRESH()),.T.),.T.)
// valid (IIF(!EXISTE_CODIGO(cCodigo,oRS),oDlg:END(),.T.),.T.)
聽REDEFINE GET oG102 VAR cDescri ID 102 OF oDlg UPDATE PICTURE "@!"
聽REDEFINE BUTTONBMP oB308 ID 501 OF oDlg BITMAP "GRABAR" WHEN !EMPTY(cCodigo) ACTION; // .AND. (VALIACCE("A01")=3 .AND. lNuevo .OR. VALIACCE("A01")=4)
聽(lGraba:=.T.,oDlg:END())
聽oB308:cTOOLTIP:= "Grabar"
聽REDEFINE BUTTONBMP oB502 聽ID 502 聽OF oDlg BITMAP "SALIR" ACTION(oDlg:END())
聽ACTIVATE DIALOG oDlg
聽IF lGraba
聽 聽 IF lNuevo
聽 聽 聽 聽 聽 聽 聽oRS:AddNew()
聽 聽 聽 聽 ENDIF
聽 聽 nBookMark:=oRs:BookMark 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 // Marcamos el puntero del nuevo Registro y...>
聽 聽 聽 聽 oRS:Fields("codigo"):value 聽 聽 聽:= cCodigo
聽 聽 聽 聽 oRS:Fields("descripcion"):value := cDescri
聽 聽 聽 聽 oRS:Sort:="descripcion"
聽 聽 聽 聽 oRs:BookMark:=nBookMark 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽// 聽...posicionamos el puntero en el nuevo registro para mostrarlo en el listbox ordenado
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽// 聽Esto solo cuando queremos mostrar el lisbox ordenado, en este caso por descripci贸n
聽 聽 聽 聽 oRS:Update()
聽 ENDIF
RETURN NIL
/////////////// 聽VALIDAMOS SI EXISTE EL CODIGO INGRESADO //////////////////
FUNCTION EXISTE_CODIGO(cCodigo,oRS)
聽LOCAL nBookMark,oRsExis,lBusca:=.F.
聽IF EMPTY(cCodigo)
聽 聽 聽 聽 RETURN .F.
聽ENDIF
聽nBookMark:=oRs:BookMark // guardamos el puntero actual del recordset para reestaablecerlo cuando el registro no existe
聽oRS:MoveFirst()
聽oRS:Find:="codigo LIKE" + " '%" + ALLTRIM(cCodigo) + "%' "
聽IF !oRS:EOF()
聽 聽 MSGINFO("C贸digo ya registrado")
聽 聽聽lBusca:=.T.
聽ENDIF
聽oRs:BookMark:=nBookMark 聽 // aqui se reestablece el puntero del recordset
RETURN lBusca
FUNCTION ELIM_MAR(oRS,oLbx)
聽IF MSGYESNO("esta seguro de eliminar este registro?","Elimina")
聽 聽 聽 聽 oRS:Delete()
聽 聽 聽 聽 IF !oRs:EOF()
聽 聽 聽 聽 聽 聽oRs:MoveNext()
聽 聽 聽 聽 ELSE
聽 聽 聽 聽 聽 聽 聽oRs:MovePrevious()
聽 聽 聽 聽 ENDIF
聽 聽 聽 聽 oRS:Update()
聽 聽 聽 聽 oLbx:Refresh()
聽ENDIF
RETURN NILLuis Alfonso Fuentes Guerrero
FWH 11.06 xHarbour 1.2.1 BCC55 WorkShop
FWH 11.06 xHarbour 1.2.1 BCC55 WorkShop