Edicao no Dbedit duvida

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
marbio
Usuário Nível 3
Usuário Nível 3
Mensagens: 206
Registrado em: 29 Jul 2004 16:26

Edicao no Dbedit duvida

Mensagem por marbio »

Ola Turma

aColunas:={'Marcar','Data','Produto','Qtd','Unit','Venda'}
dbedit(06,07,19,73,aColunas,"pagatecla",,,,, )


O meu DBF tem mais campos ex:

codigo, cliente, marca,data,produto,qtd,unit,venda

Quando eu faço a edicao ex: marca ele paga codigo, nunca o que eu quero.

t+
Sempre há uma solucao para os nossos problema clipper.....
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Mensagem por Toledo »

Marbio,

Tá um pouco confuso a sua dúvida, dê mais detalhes do que você quer fazer. E se possível, passe o código fonte da função "pagatecla" que você está passando dentro do DBEDIT().

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
marbio
Usuário Nível 3
Usuário Nível 3
Mensagens: 206
Registrado em: 29 Jul 2004 16:26

Dbedit

Mensagem por marbio »

Ola,

Me desculpe pele post,

Vou tentar me explicar melhor! Usando o DBedit(), so para mostrar as informacoes, ma o meu cliente inventou agora que tem que fazer a edicao, os campos que eu selecionei, como Ex: abaixa:

aColunas:={'Marcar','Data','Produto','Qtd','Unit','Venda'}
dbedit(06,07,19,73,aColunas,"pagatecla")

mas a estrutura do DBF e essa

codigo, cliente, marca,data,produto,qtd,unit,custo,venda

Quando eu dou enter em " DATA " para fazer a edicao ele paga o "CLIENTE" nao o que esta SELECIONADO na CHAVE.

Ja quebrei a cabeca, mais eu que nao quebrei o bastante!!!!!!!!!!

Desde ja agradeco.

t+
Sempre há uma solucao para os nossos problema clipper.....
Avatar do usuário
Daniel
Usuário Nível 3
Usuário Nível 3
Mensagens: 373
Registrado em: 13 Ago 2003 22:42
Localização: Apucarana - PR

Mensagem por Daniel »

Aki vai um exemplo do que eu uso, o dbedit passa dois comandos que e coluna e mode.

Código: Selecionar todos

Local xnm, xquant1, xcont, xa, ximp, xq:= .T.

If !arq2(1)
   Return
EndIf
Select cadmerc
Set Order to 1
While .t.
   xcodigo:= xmater:= ximp:= Space(1)
   Telacor("W+","W")
   @ 24, 10 clear
   @ 24, 13 Say "Digite o Produto! [F3 Consulta!]  ESC Retorna"
   xproduto:= Space(31)
   Telacor("W+/R+,N/W","W")
   @ 10, 30, 12, 64 Box "ÚÄ¿³ÙÄÀ³ "
   Set Key -2 To f3c
   @ 10, 35 Say "[Relat¢rio por Produto]"
   @ 11, 32 Get xproduto Picture "@!"
   Read
   Set Key -2 To
   If LastKey() == 27 .Or. xproduto == Space(31)
      Close DataBases
      Return
   EndIf
   Select 2
   Use cadmater
*   Index On DToS(data) + Str(codigo) Tag cod_41 To cdx_004
   Index On data Tag cod_47 For RTrim(xproduto) == RTrim(material) To cdx_004
*   Index On codigo Tag cod_43 To cdx_004
*   Index On Str(codigo) + dtos(data) Tag cod_44 To cdx_004
   Set Index To cdx_004, cdx_002
   Set Order To "cad_013"
   Telacor("W+","W")
   beep()
   @ 24, 10 Clear
   @ 24, 13 Say "Imprimir em [V]idio ou [I]mpressora " Get ximp ;
      Picture "@!" Valid ximp $ "VI"
   @ 24, 26 Say "V" Color "G+"
   @ 24, 37 Say "I" Color "G+"
   Read
   If (LastKey() == 27)
      Return
   EndIf
   @ 24, 10 clear
   Telacor("W+*","W+*")
   @ 24, 13 Say "Aguarde..."
   Telacor("N/BG,B/G,,,B+/N","W+")
   If ximp == "V"
      Set Order To "cod_47"
      Go Top
      Private db[5], dbc[5], xtr[5]
      db[1]:= "      Mercadoria"
      db[2]:= "Entrada"
      db[3]:= " Saida"
      db[4]:= "Estoque"
      db[5]:= " Data"
      dbc[1]:= "material"
      dbc[2]:= "entrada"
      dbc[3]:= "saida"
      dbc[4]:= "estoque"
      dbc[5]:= "data"
      xtr[2]:= "@e 999,999"
      xtr[3]:= "@e 999,999"
      xtr[4]:= "@e 999,999"
      lin:= 5
      xa:= 15
      @ 24, 10 Say Space(70) Color "W+"
      @ 24, 13 Say "Confira os Dados [   -> Alterar    -> Deleta] - ESC Sai" Color "W+"
      @ 24, 31 Say " A " Color "B+"
      @ 24, 45 Say " D " Color "B+"
      @ lin,  0 To lin + 3 + xa, 79
      @ 7,  0 Say "Ã"
      @ 7, 79 Say "´"
      dbedit(lin + 1, 1, lin + 3 + xa, 78, dbc, "Arruma2", xtr, db, "ÄÂÄ", ;
         " ³ ", "ÄÁÄ")
      SetCursor(1)
      RestScreen(,,,,save1)
      Loop
   EndIf
   xtent:= xtsaida:= lin:= 0
   While data < xdv
      Skip
   End
   If data > xdv1
      @ 24,10 Clear
      @ 24, 13 Say "NÆo ha Relat¢rio com esta data"
      Inkey(4)
      Loop
   EndIf
   Set Console Off
   Set Device To Printer
   Set Printer To lpt1
   Set Printer On
   @ lin, 0 Say " "
   lin++
   @ lin, 10 Say "Relat¢rio de Estoques"
   @ lin, 50 Say "Data:"
   @ lin, 56 Say Date()
   lin+= 2
   ?? "P"
   ?? "C!"
   ?? i21
   @ lin, 13 Say "Produto"
   @ lin, 35 Say "Entrada"
   @ lin, 45 Say "Saida"
   @ lin, 55 Say "Estoque"
   @ lin, 65 Say "Data"
   lin++
   @ lin, 00 Say Repl("-",79)
   lin++
   While data >= xdv
      @ lin,  0 Say material
      @ lin, 32 Say entrada Picture "@e 999,999,999"
      xtent+= entrada
      @ lin, 43 Say saida Picture "@e 999,999,999"
      xtsaida+= saida
      @ lin, 55 Say estoque Picture "@e 999,999,999"
      @ lin, 69 Say data
      lin++
      Skip
      If data > xdv1 .Or. Eof()
         Exit
      EndIF
   End
   @ lin, 00 Say Repl("-",79)
   lin++
   @ lin, 43 Say xtent Picture "@e 999,999,999"
   @ lin, 55 Say xtsaida Picture "@e 999,999,999"
   Eject
   ?? i11
   ?? "CB"
   ?? "P"
   Set print To
   Set Printer Off
   Set Device To Screen
   Set Console On
End

**********************************************************
function f3c

   tel_a:= SaveScreen(0, 0, 24, 79)
   Private cod[2], mer[2], pic[2]
   Select cadmerc
   Setcolor("N/BG,W+/R")
   cod[1]:= "Codigo        Mercadoria"
   cod[2]:= "        Mercadoria"
   mer[1]:= "StrZero(CODIGO, 4)"
   mer[2]:= "MERCADO"
   linx:= 10
   xa:= 8
   mer1:= {"Strzero(codigo, 4) + ' ³ ' + mercado"}
   @ linx,  2 To linx + 3 + xa, 47
   @ linx + 2,  2 Say "Ã"
   @ linx + 2, 47 Say "´"
   setcursor(0)
   dbedit(linx + 1, 3, linx + 3 + xa, 46, mer1, .T., .T., cod, "ÄÂÄ", ;
      " ³ ", "ÄÁÄ")
   setcursor(1)
   If (LastKey() == 27)
      RestScreen(0, 0, 24, 79, tel_a)
      Return .T.
   EndIf
   xproduto:= mercado
   RestScreen(0, 0, 24, 79, tel_a)
   Setcolor("W+,B+/BG,,,B+/N")
   Return .T.

*****************************
Function Arruma2(modo,coluna)

Private GetList:= {}
xcoluna:= coluna
campo := dbc[coluna]
masca := xtr[coluna]
If modo >= 0 .And. modo <= 3
   Return(1)
ElseIf modo == 4
   Do Case
      Case ((LastKey() == 65  .Or. LastKey() == 97) .And. ((coluna >= 1  .And. coluna <= 5));
         .And. coluna != 4)
         xd1:= xd:= 1
         While .t.
            If Rlock()
               Exit
            EndIf
         End
         SetCursor(1)
         x2:= &campo
         xcod:= codigo
         If coluna == 1
            Set Key -2 To f3b
         EndIf
         @ Row(), Col() Get &campo Picture (masca) Color "GR+/N"
         Read
         SetKey(-2,Nil)
         x:= RecNo()
         x1:= 0
         If x2 != &campo
            If coluna == 1
               Replace codigo With xcodigo
               xd:= 0
               xd1:= 2
            EndIf
            If xd == 1
               xd1:= 2
            EndIf
         EndIf
         SetCursor(0)
         DbCommit()
         DbUnLock()
         If xd1 == 2
            arruma_sa2(xcod)
            Go x
         EndIf
         Return 2
      Case ((LastKey() == 68 .Or. LastKey() == 100) .And. (coluna == 1 .Or. coluna == 3))
         While .t.
            If Rlock()
               Exit
            EndIf
         End
         Set Order To "cad_011"
         xcod:= codigo
         x1:= entrada
         x2:= saida
         Delete
         x:= RecNo() + 1
         While ! Eof()
            Skip
            If codigo == xcod
               If RegLock(10)
                  Replace estoque With xestoque:= ((estoque - x1) + x2)
               EndIf
            Else
               Exit
            EndIf
         End
         Set Order To "cod_47"
         Go x
         DbCommit()
         DbUnLock()
         Return(2)
      Case LastKey() == 27
         Return 0
   EndCase
EndIf
Return

*****************************
Function Arruma_sa2()
Local xest

Select cadmater
Set Order To "cad_012"
Seek Str(xcod)
If Found()
   xest:= 0
   @ 24, 10 Say Space(70) Color "W+"
   @ 24, 13 Say "Aguarde Arrumando o Saldo!"
   While .t.
      If codigo == xcod
         If entrada == 0 .And. saida == 0
            xest:= estoque
*            If RegLock(10)
*               Replace estoque With xest
*            EndIf
         Else
            If RegLock(10)
               Replace estoque With xest+= (entrada - saida)
            EndIf
         EndIf
      EndIf
      Skip
      If codigo != xcod .Or. Eof()
         Exit
      EndIf
   End
   Select cadmerc
   Set Order To 1
   Seek xcod
   If Found()
      If RegLock(10)
         Replace estoque With xest
      EndIf
   EndIf
   Select cadmater
   Set Order To "cod_47"
   @ 24, 10 Say Space(70) Color "W+"
   @ 24, 13 Say "Confira os Dados [   -> Alterar    -> Deleta] - ESC Sai" Color "W+"
   @ 24, 31 Say " A " Color "B+"
   @ 24, 45 Say " D " Color "B+"
Else
   Return .F.
EndIf
Return .T.
Daniel

Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1298
Registrado em: 06 Jul 2004 00:44
Contato:

Mensagem por ANDRIL »

Ola Marbio,

Tente esta funcao:

Código: Selecionar todos

func pagatecla
parameters modo,campo

*captura o campo e o valor do campo
t=aColunas[campo]  
t1=&t                      

*armazena a linha atual e a coluna do campo
l1=row()                 
c1=col()

*exibe o campo e o valor ao passear pelo dbedit
       @21,07 say"Campo: "+t        
       @22,07 say"Valor: "    
       @22,col()+1 say t1    
do case
       case lastkey()=27
       return 0

       case lastkey()=13
       * caso seja teclado enter edita o campo atual

       setcursor(3)
       @l1,c1 get t1
       read
       setcursor(0)
       if lastkey()#27
            
            *comandos para utilizacao em rede
            if rlock()
                 repla &t with t1
                 dbcommit()
                 unlock
            endif
       endif
       keyb chr(255)
       return 2

       otherwise
       return 1
endcase

*fim da funcao
Desculpe mais o HTML estava desativado e nao consegui alinhar mais acho q vc entendera.

Abraços
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
marbio
Usuário Nível 3
Usuário Nível 3
Mensagens: 206
Registrado em: 29 Jul 2004 16:26

O duvida cruel

Mensagem por marbio »

Ola clippeiros........


Muito obrigado pelas funcoes, so que essas funcoes eu ja tenho a minha duvida e outra nao e edicao em si no dbedit e sim dos compos que eu querro. ex:


O meu DBF esta assim com os campos,

EMPRE, CODCL, MARCAR, CLIENTE, DATA, CODPROD, PRODUTO,QTD, CUSTO, UNIT, VENDA, TOTAL, BONIFICACAO, COMISSAO, VERIF

O meu DBF tem 14 campos, eu estou usando apenas 6 campos, conforme ex acima no 1º post. sao esses


assim que esta mantando na minha funcao, so aparece esses aqui.

MARCAR, DATA, PRODUTO, QTD, UNIT, TOTAL

Agora que vem a minha duvida, Quando eu dou o enter..

MARCAR aparece EMPRE
DATA aparece codcl
PRODUTO aparece MARCAR
QTD aparece CLIENTE
UNIT aparece DATA
VALOR aparece QTD

NAO estou entendo nada......

:'(

:%
Sempre há uma solucao para os nossos problema clipper.....
Avatar do usuário
marbio
Usuário Nível 3
Usuário Nível 3
Mensagens: 206
Registrado em: 29 Jul 2004 16:26

Esqueceu de Mim

Mensagem por marbio »

Ola turma!!!

Sera quem tem, solucao para o meu caso, se nao tiver fico muito grato.

Ha, sobre a edicao esta funcionando e sobre os campos, t+
Sempre há uma solucao para os nossos problema clipper.....
Avatar do usuário
Vander
Usuário Nível 3
Usuário Nível 3
Mensagens: 214
Registrado em: 23 Jul 2004 01:43
Localização: João Monlevade - MG

Mensagem por Vander »

Amigo Marbio uso o seguinte código para editar DBF's, veja se ajuda em algo..

Código: Selecionar todos

******************************************
*  M¢dulo    : DBE.PRG                   *
*  Fun‡Æo    : EDI€ÇO DE BANCOS DE DADOS *
*  VersÆo    : VersÆo 1.00               *
*  Mes / Ano : ABRIL/05                  *
*  Autor     : Vander L£cio              *
*  E-mail    : ndsistema@bol.com.br      *
*              vlnunes@click21.com.br    *
*  Compilar  : Clipper dbe               *
*              rtlink fi dbe             *
******************************************
*  Favor informar melhorias              *
******************************************

set date british
set intensity on
set scoreboard off
set century on
setcancel(.f.)
set wrap on
set epoch to 1990
setcursor(0)
cls
PARA ARQ
ARQU=ALLTRIM(ARQ)
_lof=""
IF EMPTY(ARQU)
   @ 00,00 clear to 24,79
   file0=_lof+'"'+"*.dbf"+'"'
   N_arq=ADIR(&file0)
   DECLARE vedir[N_arq]
   ADIR(&file0,vedir)
   IF EMPTY(VEDIR)
      @ 10,10 SAY "NÇO LOCALIZADO ARQUIVOS DBF"
      @ 11,00 SAY ""
      inkey(10)
      sair()
   ENDIF
   ASORT(vedir)
   DO WHILE .T.
      set color to w+/b
      @ 00,00 say padr(" EDI€ÇO DE BANCOS DE DADOS - VersÆo 1.00.ABRIL/05",80) color "w+/gr"
      @ 01,00,23,79 box"ÚÄ¿³ÙÄÀ³ "
      @ 02,01 say padl("ND Sistemas - (31)9945 5722 ",78) color "w+/gr"
      @ 03,01 say replicate("-",78)
      @ 24,00 say padc("Selecione o banco de dados para edi‡Æo ³ ESC - Finaliza",80) color "w+/gr"
      @ 04,02,22,15 box"ÚÄ¿³ÙÄÀ³ "
      @ 04,16,22,78 box"ÚÄ¿³ÙÄÀ³ "
      @ 05,24 say "
Avatar do usuário
marbio
Usuário Nível 3
Usuário Nível 3
Mensagens: 206
Registrado em: 29 Jul 2004 16:26

Obriado Clippeiros

Mensagem por marbio »

Ola,

Eu quebrei a cabeça, e achei um geito de montar sem mechear no fonte o que fiz: EU REORGANIZEI AS COLUNAS , coloquei os campos que precisava primeiro e deu tudo certo.

t+
Sempre há uma solucao para os nossos problema clipper.....
Responder