Rotinas de inclusão/alteração/deleção no GRID

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Paulo_CPV
Usuário Nível 3
Usuário Nível 3
Mensagens: 178
Registrado em: 07 Mar 2013 10:27
Localização: Jacarei/SP

Função de Alteração não funciona

Mensagem por Paulo_CPV »

Boa noite!

Caro luiz os cálculos que eu faço são baseados que os meses só tenham 30 dias, mesmo no mês de fevereiro. Por acaso você tem uma solução para a meu problema?

[]'s
Paulo - Jacareí/SP
luiz antonio da silva
Usuário Nível 3
Usuário Nível 3
Mensagens: 161
Registrado em: 21 Nov 2006 22:12
Localização: serrana-sp

Função de Alteração não funciona

Mensagem por luiz antonio da silva »

Boa Noite Paulo !

teste o código abaixo.

1) Para incluir basta um enter no campo data final
2) Para alterar, selecione o item do grid e clique em alterar
3) Para excluir basta duplo clique no item do grid.

veja se isso ajuda.

Código: Selecionar todos

#include "minigui.ch"

func main()
public alterar:=0

set date brit
set century on
set epoch to 1960

DEFINE WINDOW form_1 AT 206 , 290 WIDTH 375 HEIGHT 460 main

     DEFINE FRAME Frame_1
            ROW    10
            COL    10
            WIDTH  161
            HEIGHT 50
            CAPTION "Data Inicial (dd/mm/aaaa)"
            OPAQUE .T.
     END FRAME  

     DEFINE TEXTBOX data_ini
            ROW    30
            COL    30
            WIDTH  120
            HEIGHT 24
            DATE .T.
            on enter form_1.data_fim.setfocus
     END TEXTBOX 

     DEFINE FRAME Frame_2
            ROW    10
            COL    190
            WIDTH  161
            HEIGHT 50
            CAPTION "Data Final (dd/mm/aaaa)"
            OPAQUE .T.
     END FRAME  

     DEFINE TEXTBOX data_fim
            ROW    30
            COL    210
            WIDTH  120
            HEIGHT 24
            DATE .T.
            on enter calcula(form_1.data_ini.value,form_1.data_fim.value)
     END TEXTBOX 

     DEFINE FRAME Frame_3
            ROW    70
            COL    10
            WIDTH  341
            HEIGHT 48
            CAPTION "Tempo Acumulado"
            OPAQUE .T.
     END FRAME  

     DEFINE LABEL acumulado
            ROW    90
            COL    20
            WIDTH  320
            HEIGHT 22
            VALUE ""
            FONTBOLD .T.
            CENTERALIGN .T.
     END LABEL  

     DEFINE GRID Grid_1
            ROW    130
            COL    10
            WIDTH  340
            HEIGHT 223
            ITEMS {}
            WIDTHS {95,95,50,50,50}
            HEADERS {'Dt ini','Dt final','Ano','Mes','Dia'}
            COLUMNCONTROLS { {'TEXTBOX','DATE'} , {'TEXTBOX','DATE'} , {'TEXTBOX','NUMERIC','999'} , {'TEXTBOX','NUMERIC','999'} , {'TEXTBOX','NUMERIC','999'} }
            JUSTIFY {BROWSE_JTFY_CENTER,BROWSE_JTFY_CENTER,BROWSE_JTFY_CENTER,BROWSE_JTFY_CENTER,BROWSE_JTFY_CENTER}
            on dblclick (FORM_1.GRID_1.DELETEITEM(FORM_1.GRID_1.VALUE),ACUMULAR())
     END GRID  

    DEFINE BUTTON bt_altera
           ROW    360
           COL    10
           WIDTH  100
           HEIGHT 28
           CAPTION "&Alterar"
           action alterar_dados()
     END BUTTON  

    DEFINE BUTTON bt_sair
           ROW    360
           COL    250
           WIDTH  100
           HEIGHT 28
           CAPTION "&Sair"
           action form_1.release
     END BUTTON  

END WINDOW

form_1.data_ini.setfocus
activate window form_1

retu

func calcula(dDataInicial,dDataFinal)
v_dia:=v_mes:=v_ano:=0
v_anof=YEAR(dDataFinal)
v_mesf=MONTH(dDataFinal)
v_diaf=DAY(dDataFinal)
v_anoi=YEAR(dDataInicial)
v_mesi=MONTH(dDataInicial)
v_diai=DAY(dDataInicial)
IF v_diaf < v_diai
  v_diaf+=30
  v_mesf-=1
ENDIF
v_dia=v_diaf - v_diai
IF v_mesf < v_mesi
  v_mesf+=12
  v_anof-=1
ENDIF
v_mes=v_mesf - v_mesi
v_ano=v_anof - v_anoi    
v_ret=''
IF v_ano>0
  v_ret=STRZERO(v_ano,2)+IF(v_ano=1,' ano',' anos')+IF(v_mes>0,IF(v_dia>0,',',' e '),IF(v_dia>0,' e ',''))
ENDIF
IF v_mes>0
  v_ret+=STRZERO(v_mes,2)+IF(v_mes=1,' mes ',' meses ')+IF(v_dia>0,'e ','')
ENDIF
IF v_dia>0
  v_ret+=STRZERO(v_dia,2)+IF(v_dia=1,' dia',' dias')
ENDIF

if alterar=1
   form_1.grid_1.cell(form_1.grid_1.value,1):=form_1.data_ini.value
   form_1.grid_1.cell(form_1.grid_1.value,2):=form_1.data_fim.value
   form_1.grid_1.cell(form_1.grid_1.value,3):=v_ano
   form_1.grid_1.cell(form_1.grid_1.value,4):=v_mes
   form_1.grid_1.cell(form_1.grid_1.value,5):=v_dia
else
   add item { form_1.data_ini.value, form_1.data_fim.value,v_ano,v_mes,v_dia} to grid_1 of form_1
endif

acumular()

alterar:=0

form_1.data_ini.value:=""
form_1.data_fim.value:=""
form_1.data_ini.setfocus
Return (v_ret)

retu

func alterar_dados()
alterar:=1
form_1.data_ini.value:=form_1.grid_1.cell(form_1.grid_1.value,1)
form_1.data_fim.value:=form_1.grid_1.cell(form_1.grid_1.value,2)
form_1.data_ini.setfocus
retu

func acumular()
_dia:=_mes:=_ano:=0
for x=1 to form_1.grid_1.itemcount
    _dia:=_dia+form_1.grid_1.cell(x,5)
    _mes:=_mes+form_1.grid_1.cell(x,4)
    _ano:=_ano+form_1.grid_1.cell(x,3)
    
    if _dia>30
       _dia:=0
       _mes:=_mes+1
    endif
    
    if _mes>12
       _mes:=0
       _ano:=_ano+1
    endif
next x

if _dia>1; f_dia:="dias"; else; f_dia:="dia"; endif
if _mes>1; f_mes:="meses"; else; f_mes:="mes"; endif
if _ano>1; f_ano:="anos"; else; f_ano:="ano"; endif

form_1.acumulado.value:=alltrim(str(int(_ano)))+" "+f_ano+", "+;
                        alltrim(str(int(_mes)))+" "+f_mes+", e "+;
                        alltrim(str(int(_dia)))+" "+f_dia
form_1.acumulado.refresh

form_1.grid_1.value:=form_1.grid_1.itemcount
retu
* Mude para hmg.ch...blz

Abraço.
HMG 3.4.4 - SQL SERVER - ORACLE
Paulo_CPV
Usuário Nível 3
Usuário Nível 3
Mensagens: 178
Registrado em: 07 Mar 2013 10:27
Localização: Jacarei/SP

Função de Alteração não funciona

Mensagem por Paulo_CPV »

Luiz, muito obrigado pela sua ajuda. Funcionou muito bem e precisando eu estou por aqui.
[]'s
Paulo - Jacareí/SP
luiz antonio da silva
Usuário Nível 3
Usuário Nível 3
Mensagens: 161
Registrado em: 21 Nov 2006 22:12
Localização: serrana-sp

Função de Alteração não funciona

Mensagem por luiz antonio da silva »

Perdão por ter esquecido algo tão importante.

A rotina de cálculo entre datas citada acima, foi retirada aqui mesmo do forum.

https://pctoledo.org/forum/viewto ... 979#p50979

post do nosso amigo Toledo.

Abraço.
Luiz.
Editado pela última vez por Pablo César em 10 Abr 2013 08:16, em um total de 1 vez.
Razão: URL editada. Uso de URL tag.
HMG 3.4.4 - SQL SERVER - ORACLE
luiz antonio da silva
Usuário Nível 3
Usuário Nível 3
Mensagens: 161
Registrado em: 21 Nov 2006 22:12
Localização: serrana-sp

Função de Alteração não funciona

Mensagem por luiz antonio da silva »

Olá Pssoal !

Analisando o código passado no post acima percebi um erro danado de grande na rotina de acumulo...rsrs
segue correção do mesmo

Código: Selecionar todos


func acumular()
_dia:=_mes:=_ano:=0
for x=1 to form_1.grid_1.itemcount
  _dia:=_dia+form_1.grid_1.cell(x,5)
  _mes:=_mes+form_1.grid_1.cell(x,4)
  _ano:=_ano+form_1.grid_1.cell(x,3)
  
  while .t.
   if _dia>=30
      _dia:=_dia-30
      _mes:=_mes+1
   else
     exit
   endif
  enddo

  while .t.
   if _mes>=12
      _mes:=_mes-12
      _ano:=_ano+1
   else
      exit
   endif
  enddo

next x

if _dia>1; f_dia:="dias"; else; f_dia:="dia"; endif
if _mes>1; f_mes:="meses"; else; f_mes:="mes"; endif
if _ano>1; f_ano:="anos"; else; f_ano:="ano"; endif

form_1.acumulado.value:=alltrim(str(int(_ano)))+" "+f_ano+", "+;
            alltrim(str(int(_mes)))+" "+f_mes+", e "+;
            alltrim(str(int(_dia)))+" "+f_dia
form_1.acumulado.refresh

form_1.grid_1.value:=form_1.grid_1.itemcount
retu

Abraço.
HMG 3.4.4 - SQL SERVER - ORACLE
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Função de Alteração não funciona

Mensagem por Pablo César »

Não é fácil entender o código de outros... principalmente quando a indentação não está no padrão. Eu levo mais tempo indentando do que entendo o próprio código rs

Graças aos códigos do Paulo e do Luiz, eis a minha contribuição:

Código: Selecionar todos

#include "hmg.ch"

Function Main()
// Public alterar:=0

set date brit
set century on
// set epoch to 1960

DEFINE WINDOW form_1 AT 206 , 290 WIDTH 375 HEIGHT 460 main

     DEFINE FRAME Frame_1
            ROW    10
            COL    10
            WIDTH  161
            HEIGHT 50
            CAPTION "Data Inicial (dd/mm/aaaa)"
            OPAQUE .T.
     END FRAME  
     /*
     DEFINE TEXTBOX data_ini
            ROW    30
            COL    30
            WIDTH  120
            HEIGHT 24
            DATE .T.
            on enter form_1.data_fim.setfocus
     END TEXTBOX 
	 */
	 DEFINE DATEPICKER data_ini
        ROW    30
        COL    30
        WIDTH  110
        HEIGHT 24
        VALUE CTOD(" / / ")
        FONTNAME "Arial"
        FONTSIZE 10
        TOOLTIP ""
        ONCHANGE Nil
        ONGOTFOCUS Nil
        ONLOSTFOCUS Nil
        FONTBOLD .T.
        FONTITALIC .F.
        FONTUNDERLINE .F.
        FONTSTRIKEOUT .F.
        ONENTER form_1.data_fim.setfocus
        HELPID Nil
        TABSTOP .T.
        VISIBLE .T.
        SHOWNONE .F.
        UPDOWN .F.
        RIGHTALIGN .T.
    END DATEPICKER

     DEFINE FRAME Frame_2
            ROW    10
            COL    190
            WIDTH  161
            HEIGHT 50
            CAPTION "Data Final (dd/mm/aaaa)"
            OPAQUE .T.
     END FRAME  
     /*
     DEFINE TEXTBOX data_fim
            ROW    30
            COL    210
            WIDTH  120
            HEIGHT 24
            DATE .T.
            on enter calcula(form_1.data_ini.value,form_1.data_fim.value)
     END TEXTBOX 
	 */
	 DEFINE DATEPICKER data_fim
        ROW    30
        COL    210
        WIDTH  110
        HEIGHT 24
        VALUE CTOD(" / / ")
        FONTNAME "Arial"
        FONTSIZE 10
        TOOLTIP ""
        ONCHANGE Nil
        ONGOTFOCUS Nil
        ONLOSTFOCUS Nil
        FONTBOLD .T.
        FONTITALIC .F.
        FONTUNDERLINE .F.
        FONTSTRIKEOUT .F.
        ONENTER Nil
        HELPID Nil
        TABSTOP .T.
        VISIBLE .T.
        SHOWNONE .F.
        UPDOWN .F.
        RIGHTALIGN .T.
    END DATEPICKER

     DEFINE FRAME Frame_3
            ROW    70
            COL    10
            WIDTH  341
            HEIGHT 48
            CAPTION "Tempo Acumulado"
            OPAQUE .T.
     END FRAME  

     DEFINE LABEL acumulado
            ROW    90
            COL    20
            WIDTH  320
            HEIGHT 22
            VALUE ""
            FONTBOLD .T.
            CENTERALIGN .T.
     END LABEL  

     DEFINE GRID Grid_1
            ROW    130
            COL    10
            WIDTH  340
            HEIGHT 223
            ITEMS {}
            WIDTHS {95,95,50,50,50}
            HEADERS {'Dt ini','Dt final','Ano','Mes','Dia'}
			ALLOWEDIT .T.
            COLUMNCONTROLS { {'TEXTBOX','DATE'} , {'TEXTBOX','DATE'} , {'TEXTBOX','NUMERIC','999'} , {'TEXTBOX','NUMERIC','999'} , {'TEXTBOX','NUMERIC','999'} }
            JUSTIFY {BROWSE_JTFY_CENTER,BROWSE_JTFY_CENTER,BROWSE_JTFY_CENTER,BROWSE_JTFY_CENTER,BROWSE_JTFY_CENTER}
			COLUMNWHEN  { { || .T. },{ || .T. },{ || .F. },{ || .F. },{ || .F. } }
			COLUMNVALID { { || Calcula(This.CellValue,form_1.grid_1.cell(form_1.grid_1.value,2),.f.) } , ;
					      { || Calcula(form_1.grid_1.cell(form_1.grid_1.value,1),This.CellValue,.f.) },;
						  { || Nil },;
						  { || Nil },;
					      { || Nil }  } 
    END GRID  

    DEFINE BUTTON bt_inclui
           ROW    360
           COL    10
           WIDTH  100
           HEIGHT 28
           CAPTION "&Incluir"
           action calcula(form_1.data_ini.value,form_1.data_fim.value,.t.)
    END BUTTON  
	
	DEFINE BUTTON bt_exclui
           ROW    360
           COL    130
           WIDTH  100
           HEIGHT 28
           CAPTION "&Excluir"
           action (FORM_1.GRID_1.DELETEITEM(FORM_1.GRID_1.VALUE),ACUMULAR())
     END BUTTON  

    DEFINE BUTTON bt_sair
           ROW    360
           COL    250
           WIDTH  100
           HEIGHT 28
           CAPTION "&Sair"
           action form_1.release
     END BUTTON  

END WINDOW
form_1.data_ini.setfocus
activate window form_1
Return Nil

Function calcula(dDataInicial,dDataFinal,lAdd)
v_dia:=v_mes:=v_ano:=0
v_anof=YEAR(dDataFinal)
v_mesf=MONTH(dDataFinal)
v_diaf=DAY(dDataFinal)
v_anoi=YEAR(dDataInicial)
v_mesi=MONTH(dDataInicial)
v_diai=DAY(dDataInicial)
IF v_diaf < v_diai
  v_diaf+=30
  v_mesf-=1
ENDIF
v_dia=v_diaf - v_diai
IF v_mesf < v_mesi
  v_mesf+=12
  v_anof-=1
ENDIF
v_mes=v_mesf - v_mesi
v_ano=v_anof - v_anoi    
v_ret=''
IF v_ano>0
  v_ret=STRZERO(v_ano,2)+IF(v_ano=1,' ano',' anos')+IF(v_mes>0,IF(v_dia>0,',',' e '),IF(v_dia>0,' e ',''))
ENDIF
IF v_mes>0
  v_ret+=STRZERO(v_mes,2)+IF(v_mes=1,' mes ',' meses ')+IF(v_dia>0,'e ','')
ENDIF
IF v_dia>0
  v_ret+=STRZERO(v_dia,2)+IF(v_dia=1,' dia',' dias')
ENDIF

if lAdd
   add item { form_1.data_ini.value, form_1.data_fim.value,v_ano,v_mes,v_dia} to grid_1 of form_1
Else
   form_1.grid_1.cell(form_1.grid_1.value,1):=form_1.data_ini.value
   form_1.grid_1.cell(form_1.grid_1.value,2):=form_1.data_fim.value
   form_1.grid_1.cell(form_1.grid_1.value,3):=v_ano
   form_1.grid_1.cell(form_1.grid_1.value,4):=v_mes
   form_1.grid_1.cell(form_1.grid_1.value,5):=v_dia
endif

acumular()

//alterar:=0

form_1.data_ini.value:=CtoD("")
form_1.data_fim.value:=CtoD("")
form_1.data_ini.setfocus
// Return (v_ret)
Return .T.

Function alterar_dados()
// alterar:=1
form_1.data_ini.value:=form_1.grid_1.cell(form_1.grid_1.value,1)
form_1.data_fim.value:=form_1.grid_1.cell(form_1.grid_1.value,2)
form_1.data_ini.setfocus
Return Nil

Function acumular()
_dia:=_mes:=_ano:=0
for x=1 to form_1.grid_1.itemcount
  _dia:=_dia+form_1.grid_1.cell(x,5)
  _mes:=_mes+form_1.grid_1.cell(x,4)
  _ano:=_ano+form_1.grid_1.cell(x,3)
  
  while .t.
   if _dia>=30
      _dia:=_dia-30
      _mes:=_mes+1
   else
     exit
   endif
  enddo

  while .t.
   if _mes>=12
      _mes:=_mes-12
      _ano:=_ano+1
   else
      exit
   endif
  enddo

next x

if _dia>1; f_dia:="dias"; else; f_dia:="dia"; endif
if _mes>1; f_mes:="meses"; else; f_mes:="mes"; endif
if _ano>1; f_ano:="anos"; else; f_ano:="ano"; endif

form_1.acumulado.value:=alltrim(str(int(_ano)))+" "+f_ano+", "+;
            alltrim(str(int(_mes)))+" "+f_mes+", e "+;
            alltrim(str(int(_dia)))+" "+f_dia
form_1.acumulado.refresh

form_1.grid_1.value:=form_1.grid_1.itemcount
Return Nil
Ainda tinha um erro ao zerar o textbox. Sugiro o uso de DatePicker em lugar de TextBoxes, fica mais prático e tem melhor estética. Adicionei o botão de Adicionar e modifiquei o botão alterar para que exclua e o dobleclick do grid servirá para alterar. Acho que ficou mais intuitivo, espero que gostem !
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Paulo_CPV
Usuário Nível 3
Usuário Nível 3
Mensagens: 178
Registrado em: 07 Mar 2013 10:27
Localização: Jacarei/SP

Função de Alteração não funciona

Mensagem por Paulo_CPV »

Bom dia!

Obrigado a todos que me ajudaram a resolver o meu problema, em especial ao Luiz e ao Pablo, muito obrigado!

[]'s
Paulo - Jacareí/SP
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Alteração dados no Grid

Mensagem por Pablo César »

Ok, Paulo fico contente que tenha servido o seu propósito. Custou mas saiu... bastou você postar o seu código. Viu como é ? Dessa forma é melhor e mais objetivo ajudar alguém...
Jairo Maia escreveu:Olá Paulo,

O problema é que você tem mais 2 tópicos além deste sobre o mesmo assunto, a saber:
Em 01/04/12 - Ajuda sobre rotina de alteração
Em 04/04/12 - Alteração dados na Grid


Neste último (04/04/12), você tentou as alterações sugeridas pelo colega Daniel? Se sim, também não funcionou?
Paulo_CPV escreveu:já fiz o teste com o que o Daniel me passou e também não deu certo. Estou fazendo de tudo, mas não funciona de geito nenhum.
Os tópicos foram juntados, mas por favor Paulo, não abra novos tópicos se o assunto for o mesmo.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
ROBERTO SÁVIO
Usuário Nível 1
Usuário Nível 1
Mensagens: 29
Registrado em: 29 Mai 2014 10:56
Localização: CORONEL FABRICIANO/MG

Rotinas de inclusão/alteração/deleção no GRID

Mensagem por ROBERTO SÁVIO »

Senhores
Estou aprendendo agora e só tenho dúvidas, não era para ser diferente.
Não vi nenhum exemplo de rotinas de alteração e exclusão de informações do grid que alteram o banco de dados.
Que horas isto acontece? No meu entender no momento que altero o grid tenho que replicar isto no banco, senão...
Abraços
Roberto Sávio
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Rotinas de inclusão/alteração/deleção no GRID

Mensagem por Pablo César »

Oi ROberto. Tudo depende do tipo do Grid que você irá escolher. Se você escolher o grid com opção a interagir diretamente no seu dbf, então não precisaria ter rotina para dar manutenção. Mas se você carregar os dados em forma de vetores, certamente você terá que repassar os dados obtidos para o seu bd. Lembrando que alteração de dados no Grid, funciona com double click ou enter. Existe uma opção pre-modelada para exibir os dados e alterar. Veja os exemplos de: C:\hmg.3.3.0\samples\Miscellaneous\EDIT\EDIT_1 e ...\EDIT_2
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
ROBERTO SÁVIO
Usuário Nível 1
Usuário Nível 1
Mensagens: 29
Registrado em: 29 Mai 2014 10:56
Localização: CORONEL FABRICIANO/MG

Rotinas de inclusão/alteração/deleção no GRID

Mensagem por ROBERTO SÁVIO »

Paulo César
Vamos ver se estou captando vossas mensagens corretamente.
Já vi em outras postagens, neste mesmo forum, alguém dizendo que o velho e bom objeto TBROWSEDB() do clipper/xharbour estaria sendo substituido pelo GRID, por diversos motivos.
No TBROWSEDB() eu consigo fazer tudo que preciso. Mostrar os registros do banco, navegar, pesquisar, alternar índices, editar no proprio browse ou não, incluir, excluir, abrir vários objetos relacionando as informações (mestreXdetalhe), etc, etc, etc. Todos os meus sistemas são baseados em transações deste tipo. Posso dizer que funcionam muito bem e com muito boa performance.
Sei que com a HMG estamos falando de outro tipo de programação, como já me disseram aqui no forum, mas porque eu desenvolveria uma transação utilizando o GRID?
Se não puder repercutir todas as modificações ocorridas no GRID para o banco de dados, no momento em que foi modificado, fica difícil achar uma aplicação para isto.
No exemplo em EDIT1, EDIT2 e no EDIT EXTENDED achei algo parecido com o TBROWSEDB(). No entando no EDIT1 há um PRG de 49 linhas que faz milagres.
Nos outros exemplos também. No PRG não mostra como aparece aquela tela muito bonita por sinal.
Como pode ser?
P.S.: Encontrei em C:\hmg.3.3.0\SAMPLES\Applications\AGENDA um bom exemplo da utilização do GRID com atualização simultânea do banco de dados. Com alguns incrementos acho que podemos ter uma boa aplicação para o objeto.

Abraços
Roberto Sávio
Responder