Dica Dbedit()

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

JuniorVaz
Usuário Nível 3
Usuário Nível 3
Mensagens: 100
Registrado em: 16 Jul 2004 15:49

Dica Dbedit()

Mensagem por JuniorVaz »

Dai dalera, eu mais uma vez aqui. hehehe. ..precisava de uma dica de como posso criar um Dbedit(), no meu caso preciso que ele abra o dbf LANGRA.DBF, que tem os campos:

t01
t02
t03
t04
t05
t06
t07
t08

Precisaria que o dbedit abrisse esse arquivo e o ponteiro ficasse no ultimo registro, e que eu pudesse alterar e inserir novos dados no dbf através dele. é dificil? Alguém pode me passar algum exemplo? Tentei fazer alguma coisa aqui mas sempre da erro, peguei alguns exemplo ja existentes no forum, mas não consegui adapta-los, por isso estou sendo mais especifico aqui. Vlw ai mais uma vez se alguem tiver alguma dica... -:]
MARCELOG
Usuário Nível 4
Usuário Nível 4
Mensagens: 546
Registrado em: 15 Mar 2005 16:54
Localização: Divinópolis/MG

Mensagem por MARCELOG »

Caro Júnior,
escreva e compile/link o seguinte:

ver()

Function ver()

Use Langra.DBF
DbGoBottom()
Browse()

Return

É certo que, tal qual pessoas que gostam de Clipper, VB, etc., você também deve gostar da função DbEdit().

Infelizmente, usando a mesma, eu não sei te ajudar.

Mas sei que, embora DbEdit() resolva a maioria das situações para exibição do conteúdo de arquivos, ela não é 100%.

Foi o que eu li e, por isso, preocupei-me com a classe criada para sua substituição - TBROWSE.

Dê uma olhada na pasta source do Clipper.
Lá você encontrará exemplos para inserir, visualizar/ editar e deletar dados com tbrowse.
Pegue o exemplo n. 1, compreenda o funcionamento e, com o tempo vá aprimorando e verificando ou outros exemplos - o quê mudou? quais variáveis ? quais valores? etc. (um passo de cada vez).
Há coisas fantásticas que você pode fazer com este recurso.

Espero ter ajudado.

MGS

PS: atenção - comece simples, somente assim você vai entender o funcionamento e aplicar o recurso máximo.
JuniorVaz
Usuário Nível 3
Usuário Nível 3
Mensagens: 100
Registrado em: 16 Jul 2004 15:49

:)

Mensagem por JuniorVaz »

poiseh, mas desta forma com o tbrowse tb me ajudou, ja consegui fazer o que eu queria, muito obrigado pela dica. :)
JuniorVaz
Usuário Nível 3
Usuário Nível 3
Mensagens: 100
Registrado em: 16 Jul 2004 15:49

Duvida

Mensagem por JuniorVaz »

poiseh, agora pintou uma duvida, neste meu DBF tenho os campos codref,codmat, t01,t02,t03... t14

Como faço para no lugar de codref aparecer REFETENCIA, no lugar de codmat, MATERIAL, e no lugar dos t01...t14 33,34,35,36 e assim por diante, no caso precisaria de uma mascara para o nome dos campos. Eu iria apenas mudar o nome dos campos no DBF conforme minha necessidade, mas o problema é que tenho um dbf secundario que faz o cadastro desses t01 até t14, que são os tamanhos, no caso estes tamanhos tem suas variaveis. Tem jeito pra fazer isto? VLW
JuniorVaz
Usuário Nível 3
Usuário Nível 3
Mensagens: 100
Registrado em: 16 Jul 2004 15:49

Sem opção

Mensagem por JuniorVaz »

como não tive mais nenhuma ideia, e achando esta conveniente, resolvi criar este dbf em modo de execução, sendo que ele é zerado a cada inserção, por isso fiz o seguinte:

sele gra
seek str(xcodgra,2)
xt01=t01
xt02=t02
xt03=t03
xt04=t04
xt05=t05
xt06=t06
xt07=t07
xt08=t08
xt09=t09
xt10=t10
xt11=t11
xt12=t12
xt13=t13
xt14=t14
sele 0
adbf={}
aadd(adbf, {"Ref", "C", 8, 0})
aadd(adbf, {"Mat", "C",30, 0})
aadd(adbf, {"Cor", "C",30, 0})
aadd(adbf, {"Ean", "C",12, 0})
aadd(adbf, {"Figura", "C",8, 0})
aadd(adbf, {"Obs", "C",20, 0})
if !empty(xt01)
aadd(adbf, {xt01, "C",4, 0})
endif
if !empty(xt02)
aadd(adbf, {xt02, "C",4, 0})
endif
if !empty(xt03)
aadd(adbf, {xt03, "C",4, 0})
endif
if !empty(xt04)
aadd(adbf, {xt04, "C",4, 0})
endif

if !empty(xt05)
aadd(adbf, {xt05, "C",4, 0})
endif

if !empty(xt06)
aadd(adbf, {xt06, "C",4, 0})
endif

if !empty(xt07)
aadd(adbf, {xt07, "C",4, 0})
endif

if !empty(xt08)
aadd(adbf, {xt08, "C",4, 0})
endif

if !empty(xt09)
aadd(adbf, {xt09, "C",4, 0})
endif

if !empty(xt10)
aadd(adbf, {xt10, "C",4, 0})
endif

if !empty(xt11)
aadd(adbf, {xt11, "C",4, 0})
endif

if !empty(xt12)
aadd(adbf, {xt12, "C",4, 0})
endif

if !empty(xt13)
aadd(adbf, {xt13, "C",4, 0})
endif

if !empty(xt14)
aadd(adbf, {xt014, "C",4, 0})
endif
//
dbcreate("estru",adbf)


neste caso ele cria o arquivo dbf da exata forma de que necessito, o problema é que quando eu executo ele via DBU, alguns campos da pra digitar normalmente, e outro, quando eu tento digitar qualquer coisa, aparece a seguinte mensagem de erro:

No exported Method: Eval

Se eu conseguir resolver apenas isto, ja vai funcionar como eu preciso, que depois eu dou um browse, e aparece ele com os nomes dos campos exatos, variando para cada CODGRA. Se alguem souber como posso resolver este erro. :)
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Mensagem por Stanis Luksys »

Ola amigo, quanto a alterar o conteudo direto no dbEdit() é simples:


Na funcao que controla o dbEdit:

Código: Selecionar todos

function Exemplo
parameters mode, counter   // aqui vc pega mode de operação e a coluna corrente

do case   // testa o modo, aqui vou ao que interessa
.....
case mode = 4

  if lastkey() = K_ENTER 
    
    Campo := FieldName(Counter)   
    @ Row(), Col() get &Campo  // usando macro pra incluir direto no campo
    set cursor on
    read
    set cursor off

  endif

.........

endcase   

É mais ou menos por aí, agora é só uma questão de incrementar, fazer validações e etc.


Para poder também incluir registros no estilo DBU, basta testar o pressionamente da tecla seta pra baixo, dar um append, posicionar corretamente linha e cursor (se necessario usar scroll pra dar a a sencacao de rolagem) e utilizar o tradicional replace para gravar no arquivo.
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Responder