Xbrowse, Mysql y Tdolphin.. error de orden..

Xbrowse, Mysql y Tdolphin.. error de orden..

Postby kpidata » Tue Dec 17, 2019 12:20 am

Estimados amigos, tengo un problema hace mas de 6 meses y peleo por arreglarlo y no me da la cabeza, lo comento, abro una tabla una tabla Mysql usando xbrowse, esta tabla por defecto viene ordenada por un campo codigo y trae otros 4 campos mas, entre ellos el campo nombre, el punto es que cuando ingreso al dialogo, se ve ordenada la tabla, si hago doble click sobre el encabezado me la ordena por otro campo, en este caso, pero si por algun motivo edito una linea y cambio algun contenido de ese registro, al volver a la tabla me la muestra donde quede, pero si se ocurre hacer doble click sobre un encabezado, aunque sea el mismo que estaba inicialmente, me sale esto

Application
===========
Path and name: C:\KPI_WEB\GESTION.Exe (32 bits)
Size: 1,469,952 bytes
Compiler version: xHarbour build 1.2.1 Intl. (SimpLex) (Rev. 9445)
FiveWin Version: FWHX 12.08
Windows version: 6.2, Build 9200

Time from start: 0 hours 0 mins 25 secs
Error occurred at: 16/12/2019, 21:15:37
Error description: Error DBCMD/2001 Workarea not in use: ORDBAGNAME


mi codigo es:

FUNCTION ING_INVENTARIO_GENERAL(cEmpresa, cUsuario)
local oDlg, oBrw, oFont2, oCol, oSay, oBtn2[ 9 ], oBoton1, oBoton2, oBoton3
LOCAL oGet,nIndex,aIdx:={}
LOCAL cBusca:= Space(60)
Local cSeek:=""
Local oCampo, cCampo :=space(50), Mensaje

Mensaje:="Stock Inventario General"

cTab_Art:=XServer:Query("SELECT cod_art, nom_art, in1_art, in2_art, in3_art, in4_art FROM tab_art ORDER BY cod_art,nom_art")

Define Font oFont2 Name "Tahoma" Size 0,-11 Bold
DEFINE DIALOG oDlg ResName "BROW_3BG" TITLE "Stock Inventario General" //COLOR Rgb( 255, 0, 0 ), Rgb(185,220,255)

Redefine BtnBmp oBoton3 Id 103 Resource "BTO_SALIR" Of oDlg;
ACTION oDlg:End() 2007


oBrw:=TxBrowse():New(oDlg)
oBrw:nMarqueeStyle := MARQSTYLE_HIGHLROW // Con cursor de todo el renglón
oBrw:nColDividerStyle := LINESTYLE_RAISED
oBrw:nRowDividerStyle := LINESTYLE_RAISED
oBrw:bClrSelFocus := {|| { nRGB( 0, 0, 0), nRGB(128,255,128) } } // para barra de linea selecc cuando el control tiene el foco
oBrw:lColDividerComplete := (.t.) // (.T.) Mantiene siempre llena la pantalla
oBrw:nHeaderHeight := 35 // Altura de los encabezados
oBrw:nRowHeight := 25 // Altura del renglón
oBrw:nHeaderLines := 3 // Número de líneas de encabezados
oBrw:nDataLines := 2 // Número de líneas de detalle
oBrw:nFooterHeight := 20 // Altura del footer
oBrw:nFooterLines := 2 // Número de líneas en el footer
oBrw:lFooter := (.T.) // Sí queremos línea de footer
oBrw:lHScroll := (.T.) // Quitamos el scroll horizontal
oBrw:bClrHeader := {|| { nRGB(000,000,000), nRGB(128,255,128) } }
oBrw:bClrStd := {|| If( oBrw:KeyNo() % 2 == 0, { CLR_BLACK, RGB( 224, 236, 255 ) }, { CLR_BLACK, RGB( 189, 211, 253 ) } ) }
oBrw:bClrFooter := {|| { nRGB(000,000,000), nRGB(150,200,200) } }
oBrw:bClrSel := {|| { nRGB(000,000,000), nRGB(128,255,128) } } // para barra de linea selecc cuando el control no tiene el foco
oBrw:l2007:=.T.
oBrw:lAutoSort:=.T.
oBrw:nStretchCol := STRETCHCOL_WIDEST
oBrw:oFont := oFont2
oBrw:bLDblClick := {|| Ing_Inv_Gral(oBrw, cTab_Art, cTab_Art:cod_art , cEmpresa), cTab_Art:Refresh() }
oBrw:SetDolphin(cTab_Art,.T.,.T.)

oBrw:aCols[1]:cHeader := "Código"
oBrw:aCols[1]:bStrData := { || cTab_Art:cod_art }
oBrw:aCols[1]:nHeadStrAlign := AL_CENTER
oBrw:aCols[1]:nDataStrAlign := AL_LEFT //LEFT
oBrw:aCols[1]:nWidth := 100
oBrw:aCols[1]:cToolTip :="Haga doble Click para ordenar por código"

oBrw:aCols[2]:cHeader := "Detalle"
oBrw:aCols[2]:bStrData := { || cTab_Art:nom_art }
oBrw:aCols[2]:nHeadStrAlign := AL_CENTER
oBrw:aCols[2]:nDataStrAlign := AL_LEFT //LEFT
oBrw:aCols[2]:nWidth := 350
oBrw:aCols[2]:cToolTip :="Haga doble Click para ordenar por Detalle"

oBrw:aCols[3]:cHeader := "Stock"+CRLF+cEmpresa[21]
oBrw:aCols[3]:bStrData := { || Transform((cTab_Art:in1_art),"@E 999,999") }
oBrw:aCols[3]:nHeadStrAlign := AL_CENTER
oBrw:aCols[3]:nDataStrAlign := AL_RIGHT //LEFT
oBrw:aCols[3]:nWidth := 80

oBrw:aCols[4]:cHeader := "Stock"+CRLF+cEmpresa[22]
oBrw:aCols[4]:bStrData := { || Transform((cTab_Art:in2_art),"@E 999,999") }
oBrw:aCols[4]:nHeadStrAlign := AL_CENTER
oBrw:aCols[4]:nDataStrAlign := AL_RIGHT //LEFT
oBrw:aCols[4]:nWidth := 80

oBrw:aCols[5]:cHeader := "Stock"+CRLF+cEmpresa[23]
oBrw:aCols[5]:bStrData := { || Transform((cTab_Art:in3_art),"@E 999,999") }
oBrw:aCols[5]:nHeadStrAlign := AL_CENTER
oBrw:aCols[5]:nDataStrAlign := AL_RIGHT //LEFT
oBrw:aCols[5]:nWidth := 80

oBrw:aCols[6]:cHeader := "Stock"+CRLF+cEmpresa[24]
oBrw:aCols[6]:bStrData := { || Transform((cTab_Art:in4_art),"@E 999,999") }
oBrw:aCols[6]:nHeadStrAlign := AL_CENTER
oBrw:aCols[6]:nDataStrAlign := AL_RIGHT //LEFT
oBrw:aCols[6]:nWidth := 80

oBrw:CreateFromResource( 1000 )

Redefine Say oBrw:oSeek Var oBrw:cSeek Id 1001 Of oDlg Picture "@!" Font oFont2 COLOR Rgb( 255, 0, 0 ), Rgb(185,220,255)

ACTIVATE DIALOG oDlg CENTERED
oFont2:End()
RETURN NIL


Function Ing_Inv_Gral(oBrw, cTab_Art, xCod_art, cEmpresa)
LOCAL oGets:= Array( 05 ), aGets:= Array( 05 )
Local oBtns:= Array( 05 )
Local oBmp,oDlg1,oFont1
LOCAL lAceptar := .F.
Local aCampos,aValues,aWhere, lAppend
Local cStock1 :=0, oStock1
Local cStock2 :=0, oStock2
Local cStock3 :=0, oStock3
Local cStock4 :=0, oStock4

cStock1:=cTab_Art:in1_art
cStock2:=cTab_Art:in2_art
cStock3:=cTab_Art:in3_art
cStock4:=cTab_Art:in4_art

aGets[1]:="Stock "+cEmpresa[21]
aGets[2]:="Stock "+cEmpresa[22]
aGets[3]:="Stock "+cEmpresa[23]
aGets[4]:="Stock "+cEmpresa[24]

Define Font oFont1 Name "Tahoma" Size 0,-12 Bold
DEFINE DIALOG oDlg1 RESOURCE "Item_Bodega" TITLE "Ingreso "+Alltrim(cTab_Art:nom_art)

REDEFINE SAY oGets[1] Var aGets[1] ID 4001 OF oDlg1 FONT oFont1
REDEFINE SAY oGets[2] Var aGets[2] ID 4002 OF oDlg1 FONT oFont1
REDEFINE SAY oGets[3] Var aGets[3] ID 4003 OF oDlg1 FONT oFont1
REDEFINE SAY oGets[4] Var aGets[4] ID 4004 OF oDlg1 FONT oFont1

REDEFINE GET cStock1 PICTURE "@E 99,999.99" ID 101 OF oDlg1 FONT oFont1 UPDATE
REDEFINE GET cStock2 PICTURE "@E 99,999.99" ID 102 OF oDlg1 FONT oFont1 UPDATE
REDEFINE GET cStock3 PICTURE "@E 99,999.99" ID 103 OF oDlg1 FONT oFont1 UPDATE
REDEFINE GET cStock4 PICTURE "@E 99,999.99" ID 104 OF oDlg1 FONT oFont1 UPDATE

REDEFINE BUTTONBMP oBtns[1] ID 301 OF oDlg1 PROMPT "&Grabar" ;
ACTION ( lAceptar := .T., oDlg1:End() ) BITMAP "Grabar" TEXTRIGHT

REDEFINE BUTTONBMP oBtns[2] ID 302 OF oDlg1 PROMPT "&Salir";
ACTION ( oDlg1:End() ) BITMAP "Cancelar" TEXTRIGHT cancel

ACTIVATE DIALOG oDlg1 CENTERED

IF lAceptar == .T.
aCampos:={ 'in1_art', 'in2_art', 'in3_art', 'in4_art' }
aValues:={ cStock1, cStock2, cStock3, cStock4 }
aWhere := "cod_art='"+AllTrim(xCod_Art)+"'"
xServer: Update( "tab_art", aCampos, aValues, aWhere )
Endif
MSGRUN( "Procesando...., espere un momento por favor ", "Usuario" , {|| SetDolphin( oBrw, cTab_Art,.f. ) } )
cTab_Art:Refresh()
oBrw:SetFocus()
oBrw:Refresh()
Return Nil


como indico, necesito que si modifico el contenido de los campos in1_art al in4_art, pueda regresar al dialogo original y pueda pinchar sobre el encabezado para cambiar de columna de orden, ahora si esto no se puede, necesito inhabilitar en ese caso el click sobre cada columna y evitar que se me caiga el programa.


Gracias
kpidata
 
Posts: 80
Joined: Tue Jul 26, 2016 9:52 pm

Re: Xbrowse, Mysql y Tdolphin.. error de orden..

Postby fridgar » Thu Dec 09, 2021 2:30 pm

Estoy tratando de hacer esto y me sale error

// Prueba de REDEFINE GET con array
// 12/2021
// Fridgar
#include "Fivewin.ch"

static oDlg, oDbf

//----------------------------------------------------------------------------//

function MiPrueba()

local oFont
local oBtn1, oBtn2

SET _3DLOOK ON

USE C:\xPruebas\Dbf\personas ALIAS xPersonas
SELECT xPersonas
DATABASE oDbf
oDbf:GoTop()

DEFINE DIALOG oDlg RESOURCE "PROBAR" ;
TITLE "Programa de practica con tablas .DBF"

oDlg:lHelpIcon:=.f.

define font oFont name "times new roman" size 11,20

MisGEts( oDlg, oDbf )

REDEFINE BUTTON oBtn1 Id 4001 of oDlg ; // aContols 9
Prompt "&Salir" ;
ACTION (oDlg:End())

ACTIVATE DIALOG oDlg //ON INIT oListBox:SetFocus() //VALID lExit CENTERED

close all

return nil

//----------------------------------------------------------------------------//

function MisGEts( oDlg, oDbf )

Local i := 1
local IDGet := 100 // temporal
local oGet := {} // temporal

/*
Como seria el array para redefinir los GETs
FieldNAme ID picture PrevValid PosValid.....
local aCamposName := {{oDbf:Manzana ,100, "9999.99", MiWhen, MiValid,,,,,}, ;
{oDbf:Cedula, .... }, ;
{oDbf:Nombres, ..... }, ;
{oDbf:Apellidos,.... }
}
*/

local aCamposName := {oDbf:Manzana , ;
oDbf:Cedula , ;
oDbf:Nombres , ;
oDbf:Apellidos }
*temporal
for i=1 to 4
AADD(oGet, i)
next i
*******


for i = 1 to len(aCamposName)

IDGet=IDGet+10
/* esta parte funcion bien
*a=field(i) // funciona bien con esta instruccion
*a = aCamposName[i,1] // tambien funciona bie con esta instruccion
*REDEFINE GET &a ID IDGet OF oDlg UPDATE // funciona bie
*/

*Probando con la array
//Error BASE/1132 Bound error: array access
* COMO DEBERIA DE QUEDAR EL REDEFINE GET

*REDEFINE GET aCamposName[i,1] ID aCamposName[i,2] PICTURE aCamposName[i,3].... OF oDlg UPDATE //Error BASE/1132

*Probando con un solo item de array
REDEFINE GET oGet[i] VAR aCamposName[i] ID IDGet OF oDlg UPDATE //Error BASE/1132 Bound error: array access
*? oGet[i]
*? aCamposName[i]

next i

return nil

//----------------------------------------------------------------------------//
* He buscado ejemplo por internet y no he encontrado uno que mustre como debe de ser para que funciones
* y no salga ese error
* Si alguien ya lo hizo, ¿ me puede explicar como es ?
*Muchisimas Gracias
fridgar
 
Posts: 11
Joined: Mon Apr 12, 2021 2:05 pm


Return to FiveWin para Harbour/xHarbour

Who is online

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