Página 1 de 1
Função pra testar se campo existe
Enviado: 03 Ago 2015 23:14
por JoséQuintas
Tem alguma função pronta no Harbour pra testar se campo existe?
Por enquanto criei esta:
Código: Selecionar todos
FUNCTION TemCampo( cCampo )
LOCAL nCont
FOR nCont = 1 TO FCount()
IF FieldName( nCont ) == cCampo
RETURN .T.
ENDIF
NEXT
RETURN .F.
Motivo:
Estou acrescentando campos em arquivos, e estou deixando preparado pra funcionar com e sem o campo.
Só precaução, caso tenha que atualizar versão antes de modificar a estrutura.
Função pra testar se campo existe
Enviado: 03 Ago 2015 23:40
por fladimir
Pronta não conheço, eu usava como vc depois refiz pra forma abaixo (outra opção)
Código: Selecionar todos
function TemCampo( cCampo )
return (fieldpos( cCampo ) != 0 )
[]´s
Função pra testar se campo existe
Enviado: 04 Ago 2015 08:37
por JoséQuintas
Valeu.
Com FieldPos() acaba nem precisando de função extra.
Função pra testar se campo existe
Enviado: 04 Ago 2015 08:49
por paiva_dbdc
BOM dia
precisei semana pasada (rs)
if type("p_id_dav") = "U"
p_id_dav = [ ]
endif
o try tambem funciona
Paiva
Função pra testar se campo existe
Enviado: 04 Ago 2015 14:21
por sambomb
If aScan(DbStruct(),,{|X| x[1] = cCampo}) > 0
Função pra testar se campo existe
Enviado: 06 Ago 2015 16:12
por porter
ola pessoal, gostaria de saber, em qual momento voces fazem o teste se o campo existe, seria testar em todos os arquivos procurando todos os campos, ou somente no momento que vai gravar um campo do arquivo ?
obrigado.
Função pra testar se campo existe
Enviado: 08 Ago 2015 01:54
por alxsts
Olá!
JoséQuintas escreveu:Motivo:
Estou acrescentando campos em arquivos, e estou deixando preparado pra funcionar com e sem o campo.
Em meu entendimento, este tratamento é aplicado apenas em rotinas que alteram estruturas de tabelas via programa. Seria um programa que verifica e atualiza versões de tabelas. Em situações normais de processamento, cada programa tem que, obrigatoriamente, conhecer as tabelas que lê e grava. Ficaria inviável ter que, antes de gravar qualquer campo, verificar se o mesmo existe.
Função pra testar se campo existe
Enviado: 08 Ago 2015 14:32
por asimoes
Pode testar assim também:
Código: Selecionar todos
use tabela alias tabela shared new
aStruct:=tabela->(DbStruct())
nPosicao:=ASCAN(aStruct,{|AVAL|AVAL[1] == "CODIGO"})
If nPosicao > 0
? "Campo: " + aStruct[nPosicao,1]
Endif
* ou
If aScan(tabela ->(DbStruct()),{|x| x[1] = cCampo}) > 0
MsgInfo("Tem o campo: " + cCampo)
Endif
Função pra testar se campo existe
Enviado: 09 Ago 2015 20:38
por JoséQuintas
Uso atualização automática no meu aplicativo.
Tudo que vou fazendo vou deixando na internet.
Atualiza tudo automático, EXE e estruturas se precisar.
Acontece que tenho outro aplicativo além desse.
O EXE também pode ser atualizado, mas as estruturas são atualizadas somente se solicitada a reindexação.
Vai que por algum motivo precise atualizar o EXE, a estrutura não vai coincidir com o programa.
Só precaução temporária.
Código: Selecionar todos
IF TemCampo( "CRDATPAG" ); REPLACE corrente->crDatPag WITH Date(); ENDIF
Esse aplicativo continua me surpreendendo.
Pra mim, a coisa mais comum num arquivo que registra pagamentos, e é apresentado ao cliente, é a data do pagamento.
Como está há muitos anos sem isso, apenas deixei preparado.
Assim que foi feita a reindexação, já começou a registrar, sem precisar atualizar novamente.
Foi um jeito diferente que encontrei pra adiantar o serviço, sem precisar manter uma versão de espera, e sem correr o risco de liberar uma versão que poderia causar erro.
É um único cliente, com aplicativo exclusivo, então é temporário.
Função pra testar se campo existe
Enviado: 11 Ago 2015 10:53
por rochinha
Amiguinhos,
"Vivendo e aprendendo..."
Eu também tive muito trabalho no inicio pois todos os dias criava campo novo e o sistema já estava rodando. Fui criando o meu módulo de manutenção que logo ficou monstruoso. Fazia uma comparação prévia de uma tabela e marcava como para atualizar caso encontrasse diferenças em campos.
No caso do JoséQuintas ele levou em consideração somente a existência do campo. Mas pode ser que tenhamos de aumentar tamanho, decimais, etc.
E ai entra a atualização automática que deve fazer antes um backup dos dados antes de alterar, travar o sistema para evitar acesso enquanto o processo roda, fazer o append dos dados quando concluída a alteração e verificar se os registros foram recuperados com exito.
É coisa de louco.