Página 1 de 1
Ajuda em Indice NTX
Enviado: 02 Jun 2021 20:12
por a.lima.silva
Caros, não entendo nada de Clipper, por isso se eu falar algum absurdo, desculpem.
Preciso acessar uma tabela DBF com a estrutura abaixo :
Uso Delphi e o componente VKDBF (
https://sourceforge.net/projects/vkdbf/) escrito por um Russo.
Consigo abrir a tabela normalmente e acessar qualquer operação, o problema é que as operações não são indexadas, de forma que outros aplicativos feitos em clipper não conseguem ver dados inseridos, a não ser que eu reindexe por um utilitário feito em clipper.
Consigo carregar alguns indices da tabela, mas alguns possuem expressões que não carregam, por exemplo XPREVR3.NTX > AjustaCod(cod_ref)+DTOS(dt_emissao)+tipo_lanc
Ocorre um erro informando que AJUSTACOD não é um field valido. Suponho que AjustaCod seja algum tipo de função.
Alguma luz por favor ?
Obrigado
Antonio Carlos
Name Type Length Prec Offset Extended Type
---------- ---- ------ ---- -------- ---------------
N_DOCUM C 10 0 1
HISTORICO C 25 0 11
COD_REF N 7 1 36
DT_EMISSAO D 8 0 43
DT_VENC D 8 0 51
VALOR N 15 2 59
N_LANC C 8 0 74
COD_CC C 7 0 82
SITUACAO C 2 0 89
LOCAL C 1 0 91
BCO_LOCAL C 3 0 92
TIPO_LANC C 2 0 95
COD_GER C 4 0 97
COD_CON C 4 0 101
SE_LOTE L 1 0 105
SE_DUPLIC L 1 0 106
NO_BANCO C 13 0 107
COD_VEND N 7 1 120
REC_TRAV L 1 0 127
SE_ENVIA C 1 0 128
JUROS N 13 2 129
DESCONTO N 13 2 142
Ajuda em Indice NTX
Enviado: 02 Jun 2021 20:31
por JoséQuintas
Você está certo, é uma função, mas infelizmente não vai ter opção de atualizar o índice pelo Delphi.
Só se tiver os fontes do aplicativo em Clipper, e tentar usar alguma coisa alternativa.
Ou, num caminho mais longo, tentar substituir NTX, DBF, e até o próprio Clipper.
Possibilidades:
- Alterar pra Harbour
- Alterar pra DBF/CDX
- Tentar algo compatível com ADS Local (Advantage Database Server), ou até algum ODBC de Foxpro/Visual Foxpro.
- A vantagem do ADS seria poder usar comandos SQL encima dos DBFs
Como eu disse, um caminho mais longo, que depende de aprendizado, mas pelo menos poderia fazer gradativo.
Harbour é um compilador 32/64 bits, que é muito compatível com o Clipper, só testando mesmo pra saber se pode compilar direto os fontes, sem qualquer alteração, ou com poucas alterações.
ADS é pra usar uma base cliente/servidor PAGA, mas que tem opção de usar SEM servidor e GRÁTIS, podendo usar compatível com DBF/CDX e comandos SQL
DBFCDX é uma "versão mais nova" do DBFNTX, mais eficiente, e poderíamos dizer, que é compatível com FOXPRO/VISUAL FOXPRO.
É mais nova que DBFNTX, mas mesmo assim é de dezenas de anos atrás. A questão seria pra ter uma maior compatibilidade com ODBCs de outras linguagens de programação, como por exemplo, ODBC de FOXPRO ou ADS, permitindo atualização simultânea de tudo.
Seja qual for a opção, precisa trabalho encima dos fontes originais.
Ou isso, ou converter o aplicativo inteiro de uma vez pra Delphi.
Ajuda em Indice NTX
Enviado: 03 Jun 2021 13:43
por a.lima.silva
Oi Jose Quintas, obrigado pelo retorno.
Então usando o componente VKDBFNTX, os índices que consigo abrir eles indexam normalmente e são vistos sem problemas pelos aplicativos feito em clipper ele trata os NTX com perfeição.
Acho que o programador que criou esse componente era um profundo conhecedor do clipper pois foi escrito do zero.
Não tenho os fontes desse sistema.
Tenho uma ideia do que seja a função, que seria converter o valor númerico de 1 ponto flutuante para string.
Quando você confirmou se tratar de uma função verifiquei que DTOS também é e é reconhecido.
Abri o código do componente e achei a função DTOS e várias outras
(CompareText(S, 'UPPER') = 0) or
(CompareText(S, 'LOWER') = 0) or
(CompareText(S, 'ANSIUPPER') = 0) or
(CompareText(S, 'ANSILOWER') = 0) or
(CompareText(S, 'SUBSTRING') = 0) or
(CompareText(S, 'SUBSTR') = 0) or
(CompareText(S, 'STUFF') = 0) or
(CompareText(S, 'STRTRAN') = 0) or
(CompareText(S, 'ALLTRIM') = 0) or
(CompareText(S, 'TRIM') = 0) or
(CompareText(S, 'TRIMLEFT') = 0) or
(CompareText(S, 'LTRIM') = 0) or
(CompareText(S, 'TRIMRIGHT') = 0) or
(CompareText(S, 'RTRIM') = 0) or
(CompareText(S, 'PADR') = 0) or
(CompareText(S, 'PADL') = 0) or
(CompareText(S, 'PADC') = 0) or
(CompareText(S, 'DTOS') = 0) or
(CompareText(S, 'DTTOS') = 0) or
(CompareText(S, 'STR') = 0) or
(CompareText(S, 'VAL') = 0) or
(CompareText(S, 'YEAR') = 0) or
(CompareText(S, 'MONTH') = 0) or
(CompareText(S, 'DAY') = 0) or
(CompareText(S, 'HOUR') = 0) or
(CompareText(S, 'MINUTE') = 0) or
(CompareText(S, 'SECOND') = 0) or
(CompareText(S, 'GETDATE') = 0) or
(CompareText(S, 'DATE') = 0) or
(CompareText(S, 'TIME') = 0) or
(CompareText(S, 'IF') = 0) or
(CompareText(S, 'IIF') = 0) or
(CompareText(S, 'LEFT') = 0) or
(CompareText(S, 'RIGHT') = 0) or
(CompareText(S, 'SPACE') = 0) or
(CompareText(S, 'STRZERO') = 0) or
(CompareText(S, 'DESCEND') = 0) or
(CompareText(S, 'SUM') = 0) or
(CompareText(S, 'MIN') = 0) or
(CompareText(S, 'MAX') = 0) or
(CompareText(S, 'AVG') = 0) or
(CompareText(S, 'COUNT') = 0);
Vou tentar escrever a funcão no componente e ver.
Está sendo feito um novo sistema em Delphi de tres camadas trafegando JSON.
Ajuda em Indice NTX
Enviado: 03 Jun 2021 15:54
por JoséQuintas
O problema é descobrir o que faz AjustaCod().
De repente pode ser trocado por uma expressão que use essas funções padrão, e assim se torne compatível.
Ajuda em Indice NTX
Enviado: 03 Jun 2021 16:28
por a.lima.silva
Caro José, resolvi a situação e posto aqui para outros que possam precisar.
Como falei, não tenho acesso ao Código Fonte do Aplicativo em Clipper.
Mas tenho acesso ao código fonte do componente VKDBF (
https://sourceforge.net/projects/vkdbf/) escrito por Vladimir Karpov que devia entender muito de clipper.
Quando você me disse que AjustaCod(cod_ref) era uma função verifiquei que em outros indices que tinham DTOS() não havia ocorria em erro.
Vasculhando o código do componente descobri a função DTOS que transforma uma data para string.
Abri o arquivo de indice no notepadd++ e verifiquei o conteúdo vide imagem abaixo
Depois foi escrever a função abaixo.
No parser havia uma parte que identificava as funções
(CompareText(S, 'DTOS') = 0) or
Bastou criar essa chamada
(CompareText(S, 'AJUSTACOD') = 0) or
e dentro da parte de tratamento que basicamente era de estivesse null preencher com ' 0.0'
Consegui implementar a rotina de inserção e alteração na tabela, através do aplicativo Delphi, ela indexou normalmente e o erro DBFNTX/1210 que acontecia dentro do aplicativo clipper ao realizar buscas sumiu completamente.
Agradeço a ajuda.
function AjustaCod(value: Double): AnsiString;
const
lSize : integer = 7;
var
aux, numero, k : string;
lTamanho, I : integer;
begin
aux := FormatFloat('###,#0.0',value);
aux := ReplaceStr(aux,'.','');
numero := ReplaceStr(aux,',','.');
lTamanho := Length(numero);
case lTamanho = lSize of
True : Result := numero;
False : begin
k := EmptyStr;
for I := 1 to lSize - lTamanho do
k := k + ' ';
Result := k + numero;
end;
end;
end;
Ajuda em Indice NTX
Enviado: 18 Nov 2021 09:33
por microvolution
opa... bom dia A.LIMA.SILVA, seja bem vindo(a) ao fórum PCTOLEDO!
Estou no mesmo dilema que V.Sa.
Estou querendo apenas criar um app mobile para facilitar o meu cliente, onde os(as) vendedores(as) dessa loja, possam realizar as vendas, sem a intervenção de um computador, bastando apenas, o smartphone com o app instalado.
Acontece, que meu sistema está todo usando ainda, infelizmente, e, não pretendo mudar para algum SGDB SQL, DBFNTX.
Com isso, me indicaram que se fizer um servidor em 3 camadas usando o componente VKDBF, o delphi faria um CRUD normalmente como se fosse o próprio clipper/harbour.
Pergunto, você conseguiu desvendar esse "troço"?
o meu app, terá, dentre todas as funcionalidades, 3 principais:
- usar a câmera como um leitor de código de barras EAN13 (não é o QRCODE que o cliente usa);
- acessar as tabelas DBF/NTX e fazer um CRUD;
- acessar uma impressora da rede e imprimir.
Bom, pelo que percebi, temos algo em comum de interesse. Se quiser pra que ambos nos ajudemos, me chame aqui no PV do fórum ou me mande um email
MICROVOLUTION@HOTMAIL.COM ou se sentir à vontade, pode me chamar no meu canal do telegram:
https://t.me/microvolution e eu lhe passo o meu zap/telegram.
Sucesso!
Ajuda em Indice NTX
Enviado: 18 Nov 2021 09:58
por Itamar M. Lins Jr.
Olá!
Estou querendo apenas criar um app mobile para facilitar o meu cliente, onde os(as) vendedores(as) dessa loja, possam realizar as vendas, sem a intervenção de um computador, bastando apenas, o smartphone com o app instalado.
Isso vc faz até com CLIPPER ou BAT do DOS 6X.
Use CGI, desenha suas telas em HTML e use CGI(Harbour/Clipper) para gravar nos DBFs.
Estude GET e POST do HTML.
Vai bater cabeça querendo entender o BROWSE dos ITENS (pesquisa) uma coisa que vc já sabe como é. Mas não vai aprender fácil ai no seu Delphi...
Saudações,
Itamar M. Lins Jr.
Ajuda em Indice NTX
Enviado: 24 Dez 2021 08:43
por vailton
Olá,
- usar a câmera como um leitor de código de barras EAN13 (não é o QRCODE que o cliente usa);
Um ponto importante a lembrar é que a câmera da maioria dos celulares apresenta uma certa lentidão para capturar os dados de um barcode ou qrcode. Muitas vezes não é tão eficiente quanto um leitor de mão ou similar. Vale a pena estudar isto para evitar maiores frutrações.