Página 1 de 2
Como fazer um comando de add no dbedit?
Enviado: 16 Mar 2007 11:43
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
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
Enviado: 16 Mar 2007 12:51
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
Enviado: 16 Mar 2007 13:17
por kirua
claro q quero cara...
vlw mesmo
meu e-mail é
spyanimex@hotmail.com
Enviado: 16 Mar 2007 13:35
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
Enviado: 16 Mar 2007 14:11
por Clipper
Prezado Kirua
Poste seu código para nós podermos analisar.
Até logo.
Marcelo
Enviado: 16 Mar 2007 14:26
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?
^^'
Enviado: 16 Mar 2007 15:37
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
Enviado: 16 Mar 2007 16:13
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 :'(
DBedit
Enviado: 19 Mar 2007 09:42
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
Enviado: 19 Mar 2007 11:13
por Dércio_Luiz_Zanatta
Cara...
To montando um pequeno "manualzinho" desta função Dbedit. Quando estiver pronto, envio para vc. ok ?
Enviado: 19 Mar 2007 11:26
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
Enviado: 19 Mar 2007 12:50
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")
Enviado: 19 Mar 2007 13:34
por kirua
a minha duvida é:
tem como criar um dbedit sem vetor?
Enviado: 19 Mar 2007 15:31
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
Enviado: 19 Mar 2007 16:13
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?