Página 1 de 2
Letodb e Append from
Enviado: 13 Jan 2023 11:45
por Nascimento
amigos fiz uma função nova e não estou tendo exito com o leto no comando append from
este comando não tem no letodb? e se tiver como é o comando e uso do mesmo?
agradeço desde já
Letodb e Append from
Enviado: 13 Jan 2023 13:40
por Itamar M. Lins Jr.
Olá!
É um comando que uso.
Qual versão do seu LetoDb ? Cadê o erro ?
Saudações,
Itamar M. Lins Jr.
Letodb e Append from
Enviado: 13 Jan 2023 13:57
por Nascimento
Itamar M. Lins Jr. escreveu:Olá!
É um comando que uso.
Qual versão do seu LetoDb ? Cadê o erro ?
Saudações,
Itamar M. Lins Jr.
Nobre estou usando o Leto ultima versão do Elch
Objetivo da Função abaixo é:
É criado um arquivo temporário de nome arq_tmp que receberá a estrutura com novos campos adicionados por outra função no vetor _mat_arq, e ao abrir o arquivo temporário novo eu uso o appe from pra adicionar os registros que existem no arquivo antigo, então eu apago o velho e renomeio o novo já com os registros e campos novos.
Código: Selecionar todos
Function Main()
public _mat_arq := {}
_nom_arq := "men001.dbf"
_mat_arq := {}
aadd(_mat_arq,{"cod_men","c",04,00})
aadd(_mat_arq,{"dia_ven","c",02,00})
aadd(_mat_arq,{"msg_mes","c",01,00})
Verdbf(_nom_arq)
Return Nil
----------------------------------------------------------------------
FUNC VERDBF(_nom_arq)
----------------------------------------------------------------------
if ! leto_file(_nom_arq)
* DbCreate(_nomarq,_mat_arq) // assim não funciona no leto
DbCreate(_nom_arq,_mat_arq,,.t.,'alias') // assim funciona
retu .t.
else
if _atual # '1'
leto_ferase('arq_tmp') // Perfeito
* //DbCreate('arq_tmp',_mat_arq,,.t.,'alias') // funcionou assim e em baixo tb
DbCreate(PathLeto + 'arq_tmp',_mat_arq,,.t.,'alias') // Perfeito
use (PathLeto + 'arq_tmp')
* appe from &_nom_arq // era assim mas não funciona no leto
arquivo := PathLeto
appe from (_nom_arq)
leto_ferase(_nom_arq)
DbCloseArea()
leto_frename('arq_tmp.dbf',_nom_arq)
endif
retu .f.
endif
Letodb e Append from
Enviado: 13 Jan 2023 14:24
por Itamar M. Lins Jr.
Olá!
Respondi errado "acredito" e apaguei.
Veja ai:
Código: Selecionar todos
***************************************
FUNCTION MyAppendFrom(cAO,cAD,cTempDBF) //cAO = Alias Origem, cAD Alias Destino
***************************************
*
*
LOCAL nCount, nCampos := (cAD)->(FCount()), x:=1, nRec:=1, nTotRec := (cAO)->(LastRec())
LOCAL cType := "" , xField
oBar := HProgressBar():NewBox("Importando " + cTempDBF + ", " + (cAO)->(Dbf()) + ": "+lTrim(str(1,9))+" De "+lTrim(Str(nTotRec,9))+" Registro(s)" ,,0,400,, nTotRec, nTotRec,,.f. )
DO WHILE (cAO)->(!Eof())
(cAD)->(dbAppend())
FOR nCount := 1 TO nCampos
cField := (cAD)->(Field(nCount))
IF ( (cAO)->(fieldpos( cField )) != 0 )
cTypeDest := ValType( (cAD)->&cField )
cTypeOrig := ValType( (cAO)->&cField )
IF cTypeDest <> cTypeOrig
IF cTypeDest == "C" .AND. cTypeOrig == "N"
xField := hb_ntos( (cAO)->&cField )
ELSE
xField := (cAO)->&cField
ENDIF
ELSE
//hwg_msginfo(cField + " --- " +cTypeOrig)
xField := (cAO)->&cField
//hwg_msginfo(cField + " --- " +ValType(xField))
ENDIF
(cAD)->&cField := xField
ENDIF
NEXT
(cAO)->(dbSkip())
iif(x++==100,(nRec+=x,x:=1,ShowGrafico(oBar,nRec,nTotRec)),.t.)
EndDO
oBar : Close()
FechaDb(cAD)
FechaDb(cAO)
/*
oBar := HProgressBar():NewBox( cDirImport + " - Importando... "+lTrim(str(1,9))+" De "+lTrim(Str(nTotRec,9))+" Registro(s)" ,,0,400,, nTotRec, nTotRec,,.f. )
x := 0
nRec := 0
//dbSelectArea('dbc')
//hwg_msginfo(Alias()+"---"+string+'---'+cTempDBF)
Append from &cDirImport via iif(lRddLeto,"LETO","DBFCDX") For iif(x++==100,(nRec+=x,x:=0,ShowGrafico(oBar,nRec,nTotRec)),.t.)
oBar : Close()
dbc->(DbCloseArea())
*/
RETURN .T.
Eu fiz o meu, pq o "append from" não verifica a estrutura "N" para "C"
Mas a forma antiga está ai usando o flag "VIA"
Saudações,
Itamar M. Lins Jr.
Letodb e Append from
Enviado: 13 Jan 2023 15:24
por Nascimento
vou testar aqui amigo , mais a minha função funciona legal para o que foi determinado, no harbour direto
agora no leto deu pau, como seria essa linha de comando para usar o proprio append from no leto? vc
poderia me explicar e ou corrigir a linha que devo ter cometido Mer....
Letodb e Append from
Enviado: 13 Jan 2023 15:48
por Itamar M. Lins Jr.
Olá!
Usava com sucesso... Muitos anos usando. Mudei pq precisei mudar um campo NUMERICO para CARACTERE, só isso. "append from" não faz isso.
agora no leto deu pau,
Como está ai.
APPEND FROM ... VIA "LETO" ou "DBFCDX" não dá erro.
Saudações,
Itamar M. Lins Jr.
Letodb e Append from
Enviado: 13 Jan 2023 15:51
por Itamar M. Lins Jr.
Olá!
Na verdade agora estou na dúvida dessa MACRO... Tem tempo que fiz isso.
Caso usando a cláusula VIA dê erro, não pode usar MACRO substituição.
Saudações,
Itamar M. Lins Jr.
Letodb e Append from
Enviado: 13 Jan 2023 16:15
por Itamar M. Lins Jr.
Olá!
Olhando o Changelog.
Código: Selecionar todos
2010-10-09 13:00 UTC+0300 Pavel Tsarenko (tpe2/at/mail.ru)
* source/server/letofunc.c
* source/client/leto1.c
+ leto_SetAreaEnv() and leto_ClearAreaEnv() functions for navigation
operations on server
+ added support for letoTrans(). The commands COPY TO / APPEND FROM
(functions __dbCopy() / __dbApp()) can evaluated on the server now
* tests/test_tr.prg
+ added sample for functions Leto_dbTrans(), Leto_dbCopy(), Leto_dbApp().
The difference of these functions from standard __dbTrans(), __dbCopy(),
__dbApp() that instead of codeblocks for "for" and "while" their
string representation is transferred.
Saudações,
Itamar M. Lins Jr.
Letodb e Append from
Enviado: 14 Jan 2023 15:51
por Nascimento
sem querer abusar da sua boa vontade e ja abusando ... eu li o changelog , mais na pratica a minha função teima em não querer funcionar corretamente ,
teria com vc analisar onde esta esse maledeto erro na minha função??
agradeço desde ja
Letodb e Append from
Enviado: 14 Jan 2023 18:12
por JoséQuintas
Código: Selecionar todos
IF cTypeDest <> cTypeOrig
IF cTypeDest == "C" .AND. cTypeOrig == "N"
xField := hb_ntos( ValType( (cAO)->&cField ) )
ELSE
xField := (cAO)->&cField
ENDIF
Sei lá.... me parece errado... deveria ser hb_Ntos() do conteúdo, e não de ValType() que retorna uma letra com o tipo.
Letodb e Append from
Enviado: 14 Jan 2023 20:37
por Itamar M. Lins Jr.
Olá!
me parece errado...
Tá errado mesmo.
Só usei 1 vez isso, depois devo ter alterado e ficou sem usar e com esse bug. tem que tirar valtype... e outro if sem necessidade.
Saudações,
Itamar M. Lins Jr.
Letodb e Append from
Enviado: 15 Jan 2023 00:05
por Nascimento
É fui usar sua função n deu certo e ainda batendo cabeça com a minha
Letodb e Append from
Enviado: 17 Jan 2023 13:28
por Nascimento
JoséQuintas escreveu:Código: Selecionar todos
IF cTypeDest <> cTypeOrig
IF cTypeDest == "C" .AND. cTypeOrig == "N"
xField := hb_ntos( ValType( (cAO)->&cField ) )
ELSE
xField := (cAO)->&cField
ENDIF
Sei lá.... me parece errado... deveria ser hb_Ntos() do conteúdo, e não de ValType() que retorna uma letra com o tipo.
rapaz né que essa eu achei engraçado rsrs, a função que eu uso e estou batendo cabeça , n teve resposta , a do amigo que eu não uso teve correção kkkk
vou pedir pra o itamar postar a minha , quem sabe se não dou sorte assim rsrs
Letodb e Append from
Enviado: 17 Jan 2023 13:53
por JoséQuintas
É que erro referente Harbour dá pra identificar, mas de lib que não uso, aí complica.
Mas pensando em RDDs.... talvez o APPEND FROM não esteja identificando direito de onde pra onde.
Lembrando que, como o Itamar já comentou, APPEND FROM dá erro se foi alterado o tipo do campo de numérico pra caractere e vice-versa, tratar campo a campo pode ser mais interessante.
Considerando que você consegue ler DBF e gravar DBF, substituir o APPEND FROM por uma rotina "manual" vai acabar eliminando o possível problema no APPEND FROM.
Letodb e Append from
Enviado: 17 Jan 2023 15:05
por Nascimento
entendo mestre quintas só foi para descontrair mesmo rsrs