DBedit

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
kirua
Usuário Nível 1
Usuário Nível 1
Mensagens: 29
Registrado em: 01 Fev 2007 10:04

Como fazer um comando de add no dbedit?

Mensagem por kirua »

Ola pessoal, la vou eu encher mais o saco de vcs heheh^^'.

Seguinte, meu problema é o seguinte:
Eu criei um Dbedit com o comando

Código: Selecionar todos

Dbedit (Li,Ci,Lf,Cf)
ele abriu o dbedit e quando eu dou enter ele mostras os dados normal...
Ok até ai tudo bem...

Agora como q eu fasso para add um comando q ele possa add dados, tipo assim:

Código: Selecionar todos

*dbedit abriu mostrou os dados
If Lastkey()=-1 
   Procadas()
Endif
OU seja quando apertar F2 abre a função de cadastro de produtos


resumindo:
eu quero criar um atalho pra chamar a funçao de adicionar produtos no banco de dados mas não consigo, nenhuma das minhas ideias da certo...
UM HELP AI GENTE....

vlw pessoal qualquer duvida, plz, me perguntem...
preciso de vcs t+ pessoal
Dércio_Luiz_Zanatta
Usuário Nível 3
Usuário Nível 3
Mensagens: 153
Registrado em: 11 Jan 2006 15:37
Localização: Ibirubá - RS

Mensagem por Dércio_Luiz_Zanatta »

Cara..
Vc terá que usar a função que faz parte dos parametros do DBEDIT.
é mais ou menos assim:

USE ARQDADOS
GOTO TOP
MAT1:={"CODIGO","NOME"} // CAMPOS DO ARQUIVO
MAT2:={"9999999".""} // MASCARA DOS CAMPOS
MAT3:={"Código","Nome"} // cabeçalho do Dbedit
MAT4:=CHR(196) // CARACTERE QUE DIVIDE O CABEÇALHO DOS DADOS
DBEDIT(LI,CI,LF,CF,MAT1,"FNDB",MAT2,MAT3,MAT4)

FUNCTION FNDB()
IF LASTKEY()=27
RETURN 0
ENDIF
IF LASTKEY()=13 // ENTER
PROCESSA...
KEYBOARD CHR(4)
RETURN 1
ENDIF

O retorno da função é assim:
0 = Encerra o Dbedit
1 = Volta para o DBedit
2 = Atualiza o Dbedit e volta para ele.

ahh. Agora lembrei.. O NG do clipper ou qualquer outro manual de clipper explica cada parametro do DBedti. Se quiser posso te enviar...
Espero ter ajudado.
Dércio Zanatta
Avatar do usuário
kirua
Usuário Nível 1
Usuário Nível 1
Mensagens: 29
Registrado em: 01 Fev 2007 10:04

Mensagem por kirua »

claro q quero cara...
vlw mesmo
meu e-mail é
spyanimex@hotmail.com
Avatar do usuário
kirua
Usuário Nível 1
Usuário Nível 1
Mensagens: 29
Registrado em: 01 Fev 2007 10:04

Mensagem por kirua »

Meu num tah dando certo eu ja coloquei um monte de coisa mas da um erro de um tal de DBGOBOTON de novo esse erro me encomodando...
eu acho q é sobre abrir o B.D....
ME AJUDEM PLZ UM POUQUINHO SUPER URGENTE!! HEHE
vlw
Avatar do usuário
Clipper
Colaborador
Colaborador
Mensagens: 1334
Registrado em: 23 Ago 2004 00:04
Localização: Recife/PE

Mensagem por Clipper »

Prezado Kirua

Poste seu código para nós podermos analisar.

Até logo.

Marcelo
Programador que é programador, quando tá de folga vai inventar função nova, fazer testes, ou seja... se divertir
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
Avatar do usuário
kirua
Usuário Nível 1
Usuário Nível 1
Mensagens: 29
Registrado em: 01 Fev 2007 10:04

Mensagem por kirua »

Olha eu quero um dbedit para mostrar essa função só q com o dbedit aberto eu qeruo usar o lastkey() para quando eu precionar o "F2"(-1)
apareça a função procadastro...

Código: Selecionar todos

Function propesquisa 
    
Local save_v 
Local codig_v  := space (3)                  
save_v         := savescreen(0,0,24,79) 

DO WHILE .T. 
DBCLOSEALL() 
SetColor ("7/8*")  
@ 08, 39, 8, 47 Box [] 
@ 08, 39 Say "Pesquisar" 
SetColor("15/9") 

USE PRODUTO NEW ALIAS PRODUTO 

IF !FILE("INDIC3.NTX")                
   INDEX ON CODIGO TO INDIC3 
ENDIF 
                              
SET INDEX TO INDIC3 

SetColor ("7/8*")    
@ 9, 39 SAY "Codigo:" 
@ 9, 45 GET codig_v  
Read    

SetColor("15/9") 
Clear screen 
Restscreen (0,0,24,79, save_v) 
If Lastkey()=27 
   Return 
EndIf 

GO TOP 
SEEK codig_v 

IF FOUND( ) 
   Alert('Registro Encontrado') 
   @ 07, 00 Clear To 19, 57 
   @ 07, 00 To  19, 57 double 
   @ 08, 01 To  10, 56            
   @ 09, 02 Say 'Cadastro de Produto:'              
   SetColor ("14/9")    
   @ 09, 02 Say "Cadastro de Produto:" 
   SetColor("7/1")                              
   @ 11, 02 Say "Codigo.......:                                        " 
   @ 12, 02 Say "Nome.........:                                        "    
   @ 13, 02 Say "Tipo.........:                                        "    
   @ 14, 02 Say "Quantidade...:                                        "    
   @ 15, 02 Say "Peso.........:              Tamanho....:              "    
   @ 16, 02 Say "Preco Venda..:              Preco Custo:              "    
   @ 17, 02 Say "Fornecedor...:                                        "  
   @ 18, 02 SAY "Observacao...:                                        " 
    
   SetColor("15/9") 
   @ 11, 17 Say codig_v      
   @ 12, 17 Say nome                    
   @ 13, 17 Say tipo                
   @ 14, 17 Say quanti    
   @ 15, 17 Say Peso          
   @ 15, 43 Say taman                              
   @ 16, 17 Say precv                    
   @ 16, 43 Say precc          
   @ 17, 17 Say forne                                
   @ 18, 17 Say obser                          
                                                                                                      
   Inkey (0)
   SetColor("15/9")
   clear screen 
   Restscreen (0,0,24,79, save_v) 
Else 
   Alert("Nao foi encontrado nenhum registro") 
    clear screen 
   Restscreen (0,0,24,79, save_v) 
   exit 
Endif 
enddo 

dbcloseall() 

Return 
entendeu o dbedit tem q aparecer nessa função para mostrar os dados do produto só q eu quero adicionar produto apartir desse dbedit....

deu pra entender?

^^'
Dércio_Luiz_Zanatta
Usuário Nível 3
Usuário Nível 3
Mensagens: 153
Registrado em: 11 Jan 2006 15:37
Localização: Ibirubá - RS

Mensagem por Dércio_Luiz_Zanatta »

Não sei se entendi direito, mas pelo que vi no código q vc postou, vc quer chamar essa função "pesquisar" qdo pressionar um determinada tecla com o Dbedit aberto.
Se for isso, vc não poderá ter o DBCLOEALL(), pois dessa forma vc vai estar fechando todos so arquivos abertos, inclusive o que está sendo mostrado no Dbedit.
Outra dica importante. Sempre que vc chamar uma função dentro de outra função para pedir dados na tela, use o clear gets depois de montar a tela.
Veja se resolve, caso contrário, vamos tentar alguma outra coisa. Um dia a gente chega la.. ehehe
Um abraço
Dércio Zanatta
Avatar do usuário
kirua
Usuário Nível 1
Usuário Nível 1
Mensagens: 29
Registrado em: 01 Fev 2007 10:04

Mensagem por kirua »

Não

é assim:
eu abri a função pesquisa
mostra um get pra vc digitar o codigo do produto
se o cara não souber ele da um enter com o get do codigo vazio ai mostra o dbedit com todos os codigos e produtos...
-------------------------------------------------------------------
o cliente escolhe o produto da enter pra ver as infos (do produto q ele escolheu)....

blz até ai tudo bem, porem um detalhe q eu quero é o seguinte:

quando o dbedit for aberto (antes do cara escolher o produto) tenha 3 opçoes (exemplo)
1- F2 p/ adcionar um outro produto
2- F3 p/ alterar o produto q ele selecionar
3- Del p/ deletar o tal produto

isso é o q eu quero
--------------------------------------------------------------------
as 3 funçoes esta feita e tah funcionando perfeitamente, mas eu não onsigo tratar nenhuma tecla pra chamar sa funçoes criadas, o DBedit não responde a funçao lastkey() ele não consegue ver os lastkey

--------------------------------------------------------------------
sera q alguem sabe um jeito de eu conseguir chamar essas funcoes com o DBEdit aberto????????
--------------------------------------------------------------------

VLW pessoal mas é meio urgente isso :'(
Avatar do usuário
kirua
Usuário Nível 1
Usuário Nível 1
Mensagens: 29
Registrado em: 01 Fev 2007 10:04

DBedit

Mensagem por kirua »

Olá pessoal, criei esse topico apenas para pedir uma ajuda sobre Dbedit.
Sera q alguem poderia me explicar passo a passo como funiona o dbedit ja procurei em um monte dewlugar mas não achei uma resposta concreta ainda para solucionar minhas duvidas.

para criar um Dbedit precisa de vetores? (essa tbm é uma das minhas duvidas pois todos os exemplos tem vetores e eu queria fazer sem vetores)

Obrigado
Dércio_Luiz_Zanatta
Usuário Nível 3
Usuário Nível 3
Mensagens: 153
Registrado em: 11 Jan 2006 15:37
Localização: Ibirubá - RS

Mensagem por Dércio_Luiz_Zanatta »

Cara...
To montando um pequeno "manualzinho" desta função Dbedit. Quando estiver pronto, envio para vc. ok ?
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á

Mensagem por Pablo César »

Viu pessoal, eu acho mais vantajoso utilizar o TBROWSE do que DBEDIT. O TBROWSE tem mais flexibilidade que o DBEDIT. Se a questão é como fazer ?. Dê uma olhada no SOURCE\SAMPLE\TBROWSE.PRG dentro da sua pasta do CLIPPER.

Você não vai se arrepender NUNCA de usat o TBROWSE.

Intente entender bem ele.

Um clip-abraço :)Pos
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem por gvc »

O dbedit usa vetores para saber com o que trabalha.
O primeiro identifica os campos, o segundo as mascaras de exibição e o terceiro, os cabeçalhos.

Quais são as suas dúvidas?

Do NG:

DBEDIT()*
Faz um browse em registros no formato de tabela
------------------------------------

Sintaxe

DBEDIT([<nTopo>], [<nEsquerda>],
[<nBase>], <nDireita>],
[<acColunas>],
[<cFuncaoUsuario>],
[<acMascarasColunas> | <cMascaraColunas>],
[<acCabecalhosColunas> | <cCabecalhoColunas>],
[<acSeparadoresCabecalhos> | <cSeparadorCabecalhos>],
[<acSeparadoresColunas> | <cSeparadorColunas>],
[<acSeparadoresRodapes> | <cSeparadorRodapes>],
[<acRodapesColunas> | <cRodapeColunas>]) --> NIL

Argumentos

<nTopo>, <nEsquerda> e <nBase>, <nDireita> definem as coordenadas do canto superior esquerdo e o canto inferior direito da janela da DBEDIT(). Os valores da linha podem variar de zero ate MAXROW() e os posicionamentos de coluna podem variar de zero ate MAXCOL(). Caso nao sejam especificados, as coordenadas assumidas sao 0, 0, MAXROW(), e MAXCOL().

<acColunas> e um vetor de expressoes caractere contendo os nomes de campos do arquivo de dados ou expressoes para utilizar como valores para cada linha exibida. Se este argumento nao e especificado, DBEDIT() exibe todos os campos presentes na area corrente como sendo as colunas.

<cFuncaoUsuario> e o nome de uma funcao definida pelo usuario que e executada quando uma tecla nao reconhecivel e pressionada ou quando nao ha nenhuma tecla pendente no buffer do teclado. O nome da funcao e especificada como sendo uma expressao caractere sem os parenteses ou argumentos. Note que o comportamento da funcao DBEDIT() e afetado pela presenca desses argumentos. Para maiores informacoes veja os topicos discutidos abaixo.

<acMascarasColunas> e um vetor paralelo contendo as mascaras de formatacao de cada coluna. Especificando <cMascaraColunas> em vez do vetor, este sera assumido para a exibicao de todas as colunas com o mesmo formato. Consulte tambem TRANSFORM() ou @...SAY para maiores informacoes sobre mascaras.

<acCabecalhosColunas> e um vetor paralelo contendo expressoes caractere que definem os cabecalhos para cada coluna. Se especificada <cCabecalhoColuna> em vez do vetor de cabecalhos, e assumido o mesmo cabecalho para todas as colunas. Para exibir cabecalhos em mais de uma linha, inclua um ponto-e-virgula dentro da expressao de cabecalho onde voce deseje que a cadeia seja separada.
Caso nao seja especificado, os cabecalhos das colunas sao tomados do vetor <acColunas>, ou sao assumidos os nomes dos campos presentes na area corrente se o argumento <acColunas> nao for mencionado.

<acSeparadoresCabecalhos> e um vetor paralelo contendo expressoes do tipo caractere que definem os caracteres que serao utilizados para desenhar as linhas horizontais separando os cabecalhos das colunas da area de exibicao dos campos. Especificando a expressao <cSeparadorCabecalhos> em vez do vetor e utilizado o mesmo separador para todas as colunas. Caso este argumento nao seja mencionado, o separador assumido e uma linha grafica dupla.

<acSeparadoresColunas> e um vetor paralelo contendo expressoes caractere que definem os caracteres utilizados para desenhar as linhas verticais que separam as colunas. Especificando a expressao <cSeparadorColunas> em vez do vetor e utilizado o mesmo separador para todas as colunas. Caso este argumento nao seja mencionado, o separador assumido e uma linha grafica simples.

<acSeparadoresRodapes> e um vetor paralelo contendo expressoes caractere que definem os caracteres que serao utilizados para desenhar as linhas horizontais que separam os rodapes das colunas da area de exibicao dos campos. Especificando a expressao <cSeparadorRodapes> em vez do vetor e utilizado o mesmo separador de rodape para todas as colunas. Caso este argumento nao seja mencionado, nao e exibido nenhum separador para os rodapes.

<acRodapesColunas> e um vetor paralelo contendo expressoes caractere que definem os rodapes para cada coluna. Especificando a expressao <cRodapeColunas> em vez do vetor e utilizado o mesmo rodape para todas as colunas. Para exibir rodapes em mais de uma linha, inclua um ponto-e-virgula na expressao contendo o rodape onde voce deseje que a cadeia seja separada. Caso este argumento nao seja mencionado, nao e exibido nenhum rodape para as colunas.

Retorno

DBEDIT() sempre retorna NIL.

Descricao

DBEDIT() alem de ser uma funcao de interface com o usuario e tambem uma funcao de compatibilidade que exibe registros de uma ou mais areas de trabalho na forma de tabela. A janela de visualizacao da DBEDIT() e uma area com celulas dividida em colunas e linhas. As colunas correspondem aos campos do arquivo de dados e as linhas aos registros deste arquivo. Cada coluna e definida por um elemento do vetor

<acColunas>. A largura assumida para a exibicao de cada coluna e determinada pela avaliacao da expressao da coluna contida no vetor <acColunas> ou pela mascara da coluna especificada no vetor <acMascarasColunas>.

Todas as teclas de movimentacao do cursor sao manipuladas dentro do DBEDIT(), incluindo PgUp, PgDn, Home, End, as quatro setas de navegacao, e todas as combinacoes validas da tecla Ctrl que realizam a movimentacao do cursor. As teclas de navegacao …s quais a DBEDIT() responde quando o argumento da funcao do usuario nao e especificado estao mostradas na tabela Teclas Ativas na proxima pagina.

Tabela 5-8: Teclas Ativas em DBEDIT()
------------------------------
Tecla Acao
------------------------------
Cursor para cima Sobe uma linha
Cursor para baixo Desce uma linha
Cursor para esquerda Coluna … esquerda
Cursor para direita Coluna … direita
Ctrl-Cursor para esquerda Painel uma coluna para esquerda
Ctrl-Cursor para direita Painel uma coluna para direita
Home Coluna mais … esquerda na tela
End Coluna mais … direita na tela
Ctrl-Home Coluna inicial
Ctrl-End Coluna final
PgUp Tela anterior
PgDn Proxima tela
Ctrl-PgUp Primeira linha da coluna corrente
Ctrl-PgDn Ultima linha da coluna corrente
Return Encerra DBEDIT()
Esc Encerra DBEDIT()
------------------------------

Quando o argumento da funcao do usuario (<cFuncaoUsuario>) e especificado, todas as teclas indicadas na tabela Teclas Ativas estao ativas com excecao do Esc e Return. Quando a DBEDIT() chama a funcao do usuario, esta passa automaticamente dois argumentos:

* O modo corrente passado como um valor numerico

* O indice da coluna corrente com base no vetor <acColunas> passado como um valor numerico

O parametro modo indica o estado corrente da DBEDIT() dependendo da ultima tecla que foi executada. Os possiveis valores dos modos estao mostrados na tabela Modos da DBEDIT().

Tabela 5-9: Modos de DBEDIT()
------------------------------
Status Dbedit.ch Descricao
------------------------------
0 DE_IDLE Inativa, todas teclas foram manipuladas
e nao ha teclas pendentes
1 DE_HITTOP Tentativa de passar inicio de arquivo
2 DE_HITBOTTOM Tentativa de passar final de arquivo
3 DE_EMPTY Arquivo vazio na area corrente
4 DC_EXCEPT Teclagem excecao
------------------------------

O parametro indice aponta para a posicao da coluna corrente definida o vetor <acColunas>. Caso o vetor <acColunas> nao seja especificado, o parametro indice apontara para a posicao do campo da estrutura do arquivo de dados corrente. O nome do campo pode ser acessado utilizando a funcao FIELD().

Quando a funcao do usuario tiver sido chamada, um valor deve ser retornado para instruir … DBEDIT() que acao realizar em seguida. A tabela Valores de Retorno da Funcao do Usuario sumariza os possiveis valores de retorno e as acoes correspondentes:

Tabela 5-10: Valores de Retorno da Funcao de Usuario de DBEDIT()
------------------------------
Valor Dbedit.ch Descricao
------------------------------
0 DE_ABORT Aborta DBEDIT()
1 DE_CONT Continua DBEDIT()
2 DE_REFRESH Forca reler e reescrever a tela e
continuar; apos reescrever, processa
teclas, e vai para inativa
------------------------------

A funcao do usuario e chamada nos seguintes casos:

* Ocorrencia de uma tecla de excecao. Isto acontece quando a DBEDIT() captura uma tecla pressionada e esta nao e reconhecida. Quaisquer teclas pendentes permanecem no buffer do teclado ate que seja capturada dentro da funcao do usuario ou ate que a DBEDIT() continue.

* DBEDIT() entra no modo inativo (i.e., quando todas as teclas pendentes tenham sido executadas). Isto acontece quando o buffer do teclado esta vazio ou apos ser efetuado um refresh da tela. Nesta ocorrencia, ha uma chamada para a funcao do usuario e entao a DBEDIT() espera por uma tecla.

* Inicio ou final do arquivo e encontrado. Esta ocorrencia e a mesma que a inatividade da DBEDIT(). Todas as teclas pendentes sao executadas, e ha uma chamada … funcao do usuario com a mensagem de status indicadora.

Note que quando a DBEDIT() e executada pela primeira vez, todas as teclas pendentes no buffer do teclado sao executadas e logo apos a DBEDIT() entra no modo inativo com a chamada … funcao do usuario. Caso nao existam teclas pendentes, o modo inativo e imediato.

A estrutura da funcao do usuario deve ser desenhada para manipular todos os modos e as mensagens de status recebidas da DBEDIT().

DBEDIT() e completamente recursiva, isto significa que voce pode realizar chamadas aninhadas a ela. Utilizando esta caracteristica, voce pode ter multiplas janelas de browse na tela ao mesmo tempo.

DBEDIT() e uma funcao de compatibilidade e, portanto, nao e recomendada sua utilizacao como dispositivo de browse. Para este proposito, ela esta superada pela classe de objeto TBrowse. Para maiores informacoes, consulte o capitulo Classes Padrao presente neste livro.

Exemplos

Este exemplo demonstra como chamar a DBEDIT() com uma funcao do usuario:

USE Customer INDEX Customer NEW
USE Sales INDEX Sales NEW
SET RELATION TO CustNum INTO Customer
//
acColumns = {"Branch", "Salesman", "Amount", "Customer->Customer"}
DBEDIT(4, 0, 22, 79, acColumns, "UserFunc")
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
Avatar do usuário
kirua
Usuário Nível 1
Usuário Nível 1
Mensagens: 29
Registrado em: 01 Fev 2007 10:04

Mensagem por kirua »

a minha duvida é:

tem como criar um dbedit sem vetor?
Dércio_Luiz_Zanatta
Usuário Nível 3
Usuário Nível 3
Mensagens: 153
Registrado em: 11 Jan 2006 15:37
Localização: Ibirubá - RS

Mensagem por Dércio_Luiz_Zanatta »

Cara..
Mandei um manual da função DBEDIT pro teu e-mail.
Sobre a sua pergunta..
Tem sim como usar o DBEDIT sem vetor, porém desta forma, vc estará mostrando todos os campos do arquivo sem formatação nehuma (cabeçalho, limitadores, etc..).

Um exemplo: (sem vetor, mas com função de usuário)

DBEDIT(05,05,15,60,,"FNDB")

Recomendo a vc usar os vetores, fica muito mais "bonitinho" ehehe
Um grande abraço.
Dércio Zanatta
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem por gvc »

Desculpe a pergunta, mas por que vc quer criar um dbedit se usar array?

Vc não esta sabendo criar os array´s ou vc que fazer isso dinamicamente?
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
Responder