GRID Ler dados do DBF e gravar nele as alterações
Moderador: Moderadores
GRID Ler dados do DBF e gravar nele as alterações
No link abaixo:
https://hmglights.wordpress.com/tag/grid
tem um exemplo de como ler dados de uma tabela DBF diretamente na GRID, mas, não tem algo inverso, ou seja, gravar as alterações feitas na GRID diretamente no DBF.
Alguém tem algum exemplo de como na ONCHANGE da GRID salvar diretamente no DBF as alterações feitas?
obrigado!
https://hmglights.wordpress.com/tag/grid
tem um exemplo de como ler dados de uma tabela DBF diretamente na GRID, mas, não tem algo inverso, ou seja, gravar as alterações feitas na GRID diretamente no DBF.
Alguém tem algum exemplo de como na ONCHANGE da GRID salvar diretamente no DBF as alterações feitas?
obrigado!
GRID Ler dados do DBF e gravar nele as alterações
Nesse caso é simples, basta seguir essa sequência lógica :
1 - Pegar o código/ID ou algum campo que seja chave ( da mesma linha onde foi feita a edição ) para dar um SEEK no DBF ;
2 - Achando o registro no DBF, proceder com a alteração e gravar
Para saber como resgatar o conteúdo de uma linha do GRID, e saber os valores dos campos ( colunas ), use como base esses exemplos :
C:\MiniGUI\SAMPLES\BASIC\Grid_7
Abraços
1 - Pegar o código/ID ou algum campo que seja chave ( da mesma linha onde foi feita a edição ) para dar um SEEK no DBF ;
2 - Achando o registro no DBF, proceder com a alteração e gravar
Para saber como resgatar o conteúdo de uma linha do GRID, e saber os valores dos campos ( colunas ), use como base esses exemplos :
C:\MiniGUI\SAMPLES\BASIC\Grid_7
Abraços
Marcelo Neves
https://produto.mercadolivre.com.br/MLB ... 0067609615
whatsapp (41) 99786-3995
http://harbourdeveloper.blogspot.com
marcelo.souza.das.neves@gmail.com
https://produto.mercadolivre.com.br/MLB ... 0067609615
whatsapp (41) 99786-3995
http://harbourdeveloper.blogspot.com
marcelo.souza.das.neves@gmail.com
GRID Ler dados do DBF e gravar nele as alterações
muito boa sua dica Marcelo.MSDN escreveu:use como base esses exemplos :
C:\MiniGUI\SAMPLES\BASIC\Grid_7
testei todos os exemplos, inclusive usando ON QUERYDATA QueryTest(aData) de alugm dos exemplos que já carrega os dados da tabela pra dentro da grid.
usando também a COLUMNWHEN para impedir acesso a linha/coluna que não quero alterar.
Mas, algo me intriga:
1) Após o duplo clique, abre a CELL para edição, só que após alterar e pressionar enter, volta o valor que está na tabela
2) como salvar isso na tabela? Existe algum tipo de onenter, onchange... ?
GRID Ler dados do DBF e gravar nele as alterações
Pode postar seu código ?
Ricardo Rodrigues
Harbour 3.2 + BCC + Minigui
Cursando Análise e Desenvolvimento de Sistemas
Harbour 3.2 + BCC + Minigui
Cursando Análise e Desenvolvimento de Sistemas
GRID Ler dados do DBF e gravar nele as alterações
Comecei no Clipper Summer 87 na década de 80, fui evoluindo, Clipper 5.0, Rick Spence, Ramalho, 5.2, 5.3, LightLib, xHarbour, Harbour e MiniGUI, apanhei muito para mudar a cabeça do DOS para o Windows, e para mudar de console para gráfico, hoje até vendo material para programadores, e como consegui isso ? Estudando, pesquisando e testando, testando, testando tudo o que aparecia na frente, por isso, quando vejo vc falar dessa forma, desculpe minha sinceridade, dá a impressão que vc não tem aquele espírito de programador que fuça, se esforça, vai atrás, e digo isso, pq na mesma pasta onde tem os exemplos que eu te indiquei, tem um monte de exemplo que responde a tua pergunta, fora o manual, fora o sistema de exemplo da pizzaria que fica em C:\MiniGUI\SAMPLES\Applications\Super.2) como salvar isso na tabela? Existe algum tipo de onenter, onchange... ?
Marcelo Neves
https://produto.mercadolivre.com.br/MLB ... 0067609615
whatsapp (41) 99786-3995
http://harbourdeveloper.blogspot.com
marcelo.souza.das.neves@gmail.com
https://produto.mercadolivre.com.br/MLB ... 0067609615
whatsapp (41) 99786-3995
http://harbourdeveloper.blogspot.com
marcelo.souza.das.neves@gmail.com
GRID Ler dados do DBF e gravar nele as alterações
parte da GRID q está dentro do form_main:
obs.: 1- no INPLACE, não sei como definir que terceiro textbox se aceite apenas S ou N
2- no columnwhen as 2 primeiras colunas estão bloqueadas para edição. a terceira aceita alteração. já a quarta só aceita se a terceira estiver com S
3 - os dados são pegos de uma tabela comum dbfntx através do on querydata
4 - como se faz para salvar de volta no dbf? tenho feito mas tem algo estranho que salva no arquivo todas os conteúdos com o mesmo... fica tudo igual.
5 - criei um botão abaixo para clicar e salvar de volta na tabela mas penso que não é assim que o Marcelo tentou passar:
ao clicar no botão a função SalvaGrid é acionada:
obs.:
1- o for/next N esta temporariamente presente para observacao
2- talvez a falta de um skip resolva nao sei.
os outros codigos q n postei sao dos exemplos da pasta samples
Código: Selecionar todos
@ 140,405 GRID Grid_1 ;
PARENT FORM_MAIN ;
WIDTH 400 ;
HEIGHT 200 ;
HEADERS {"Cod","Descricao","Cobrar S/N","Valor"};
WIDTHS {40,200,80,65};
VIRTUAL ;
ITEMCOUNT Len(aData) ;
ON QUERYDATA QueryTest(aData) ;
CELLNAVIGATION ;
DYNAMICFORECOLOR { fColor , fColor , fColor , fColor } ;
DYNAMICBACKCOLOR { bColor , bColor , bColor , bColor } ;
JUSTIFY { BROWSE_JTFY_LEFT, BROWSE_JTFY_LEFT, BROWSE_JTFY_CENTER, BROWSE_JTFY_CENTER } ;
COLUMNWHEN { { || .F. } , { || .F. } , { || .T. } , { || iif( Form_Main.Grid_1.Cell(GetProperty("Form_Main","Grid_1",'Value')[1], GetProperty("Form_Main","Grid_1",'Value')[2]-1)='S' , .t. , .f. ) } } ;
EDIT ;
INPLACE { ;
{'TEXTBOX','NUMERIC','9'} , ;
{'TEXTBOX','CHARACTER','AAAAAAAAAAAAAAAAAAAA'} , ;
{'TEXTBOX','CHARACTER','A'} , ;
{'TEXTBOX','NUMERIC','9.99'} }
2- no columnwhen as 2 primeiras colunas estão bloqueadas para edição. a terceira aceita alteração. já a quarta só aceita se a terceira estiver com S
3 - os dados são pegos de uma tabela comum dbfntx através do on querydata
4 - como se faz para salvar de volta no dbf? tenho feito mas tem algo estranho que salva no arquivo todas os conteúdos com o mesmo... fica tudo igual.
5 - criei um botão abaixo para clicar e salvar de volta na tabela mas penso que não é assim que o Marcelo tentou passar:
Código: Selecionar todos
DEFINE BUTTON BUTTON_4
PARENT Form_Main
ROW 365
COL 530
CAPTION 'Salvar'
TOOLTIP 'Clique aqui para Salvar'
ACTION SalvaGrid (aData)
END BUTTON
Código: Selecionar todos
static function SalvaGrid (aRows)
local mARQ := select() , I , N
for N = 1 to len (aRows)
MsgInfo (aRows[N,1])
MsgInfo (aRows[N,2])
MsgInfo (aRows[N,3])
MsgInfo (aRows[N,4])
next N
sele dTabela3
go top
do while .t.
if rlock()
for I = 1 to len (aRows)
replace COD with aRows[I,1] ,;
DESCRICAO with aRows[I,2] ,;
SIMNAO with aRows[I,3] ,;
VALOR with aRows[I,4]
next I
unlock
commit
exit
else
MsgInfo ('Nao deu certo! Tente novamente!')
endif
enddo
select (mARQ)
return1- o for/next N esta temporariamente presente para observacao
2- talvez a falta de um skip resolva nao sei.
os outros codigos q n postei sao dos exemplos da pasta samples
GRID Ler dados do DBF e gravar nele as alterações
Sugestão:
Trabalha com o que o harbour oferece: For Each In... Next
Trabalha com o que o harbour oferece: For Each In... Next
Código: Selecionar todos
LOCAL oElemento
for Each oElemento In aRows
replace COD with oElemento[1] ,;
DESCRICAO with oElemento[2] ,;
SIMNAO with oElemento[3] ,;
VALOR with oElemento[4]
next I
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
GRID Ler dados do DBF e gravar nele as alterações
Esse código ai é para atualizar um registro ou vários ? não entendi isso
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
GRID Ler dados do DBF e gravar nele as alterações
Eu trocaria
{'TEXTBOX','CHARACTER','A'} , ;
Por
{ 'CHECKBOX' , 'Sim' , 'Não' } , ;
Nesse campo você testar se no dbf o campo SIMNAO for = S coloca .T. ou .F. para N no vetor que carrega na grid
{'TEXTBOX','CHARACTER','A'} , ;
Por
{ 'CHECKBOX' , 'Sim' , 'Não' } , ;
Nesse campo você testar se no dbf o campo SIMNAO for = S coloca .T. ou .F. para N no vetor que carrega na grid
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
GRID Ler dados do DBF e gravar nele as alterações
No gravar:
Código: Selecionar todos
LOCAL oElemento
for Each oElemento In aRows
replace COD with oElemento[1] ,;
DESCRICAO with oElemento[2] ,;
SIMNAO with IF(oElemento[3], "S", "N") ,;
VALOR with oElemento[4]
next
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
GRID Ler dados do DBF e gravar nele as alterações
. são 3 registros pré-definidos na criação da tabela. o funcionario so tera acesso a tres campos "simnao" e "valor".asimoes escreveu:Esse código ai é para atualizar um registro ou vários ?
GRID Ler dados do DBF e gravar nele as alterações
tudo funfando redondinho. criamos um botao para enviar os dados
ao enviar a matriz arows ela continua com os mesmos valores
na tela mostra que a grid tem novos valores
qual matriz entao tem estas informacoes alteradas?
ao enviar a matriz arows ela continua com os mesmos valores
na tela mostra que a grid tem novos valores
qual matriz entao tem estas informacoes alteradas?
GRID Ler dados do DBF e gravar nele as alterações
Aqui você vai ler as celulas da grid
SeuForm = Nome do sua janela
O código abaixo vai ler os dados das colunas da grid
Ai você testa pra ver quem modificou
SeuForm = Nome do sua janela
O código abaixo vai ler os dados das colunas da grid
Código: Selecionar todos
FOR I:=1 TO SeuForm.Grid_1.ItemCount
MsgInfo( SeuForm.Grid_1.Cell(I,1) )
MsgInfo( SeuForm.Grid_1.Cell(I,2) )
MsgInfo( SeuForm.Grid_1.Cell(I,3) )
NEXT
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
GRID Ler dados do DBF e gravar nele as alterações
Algumas coisas legais trabalhando com grid
Código: Selecionar todos
Assim você pega a posição (linha) da celula aResult[ 1 ]
aResult := fConsultaBoleto.Grid_Boletos.Value
cApto := fConsultaBoleto.Grid_Boletos.cell( aResult[ 1 ], 1 )
O exemplo irá pegar o número do apto na linha/coluna aResult[ 1 ], 1
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
GRID Ler dados do DBF e gravar nele as alterações
Geralmente a grid deve ter algum campo que faz parte da chave.
Apenas exemplo, considerando um pedido.
WITH OBJECT seuform.grid_1
FOR nCont = 1 TO :ItemCount
SEEK mPedido + :cell( nCont, 1 )
REPLACE ...
NEXT
END WITH
[/code]
Apenas baseando nos posts anteriores, deve ter algum jeito melhor de fazer isso.
Apenas exemplo, considerando um pedido.
WITH OBJECT seuform.grid_1
FOR nCont = 1 TO :ItemCount
SEEK mPedido + :cell( nCont, 1 )
REPLACE ...
NEXT
END WITH
[/code]
Apenas baseando nos posts anteriores, deve ter algum jeito melhor de fazer isso.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/



