Página 1 de 2

Problemas com o Dbstruct()

Enviado: 06 Jul 2015 08:47
por Daiane
No meu prg de gerenciar o banco, tenho um method chamado ::getEstrBco(nbanco) onde é criado
a estrutura do banco num array. Em outra rotinha com o nome ::converterDBF() eu tenho uma opção de converter
o banco ou seja,se eu mudar a estrutura do banco na rotina ::getEstrBco(nbanco) o banco DBF irá mudar também.
O meu problema esta na hora de verificar se a estrutura do meu DBF ta diferente da estrutura criado na rotina ::getEstrBco(nbanco).
Eu vejo a diferença tanto na quantidade de campos quanto no nome do campo,no tipo,no tamanho.
Vou mostrar como faço essa verificação.
Acontece que na hora de verificar a quantidade de campos: eu seleciono o banco e dou um dbstruct() jogando
numa variavel e depois dou um len na variavel. Daí retorno a nova estrutura atraves do method ::getEstrBco(nbanco)
jogo em outra varial e dou um len e depois comparo. Acontece que o dbstruct que eu utilizo na tabela dbf ta vindo com o
a mesma quantida de campos que está na minha nova estrutura, eu não sei como isso está acontecendo,ja abrir o dbf e verifiquei
e não está igual. Mas tem um porém, essa rotina de ::converterDBF() é feito para varias pastas sendo que tem o mesmo
dbf em todas as pastas, algumas tabelas de determinadas pastas estão apresentando a diferença.
E o que eu pude perceber é que ta sendo feita a alteração em dbf sim o outro não,dbf sim outro não, o que não era pra acontecer dessa forma.

Alguem aqui tem disponibilidade p verificar o fonte e me ajudar?
pq ja faz dias que estou tentando resolver e não to conseguindo.

Primeiro: Estrutura nova do banco

Código: Selecionar todos

METHOD getEstrBco(nbanco) CLASS SGBD
	local i := nbanco
	
	astruct := {}
	
	DO CASE                                         
		CASE i == 1 // TABELA DE FUNCIONÁRIO - FLFUNC
			AADD( astruct, {"CODIGO"    , "N",  6,  0} )
			AADD( astruct, {"CCUSTO"    , "C",  3,  0} )
			AADD( astruct, {"CCUSTO1"   , "C",  3,  0} )
			AADD( astruct, {"NOME"      , "C", 52,  0} )
			AADD( astruct, {"PAI"       , "C", 50,  0} )
			AADD( astruct, {"MAE"       , "C", 50,  0} )
			AADD( astruct, {"ENDERECO"  , "C", 45,  0} )
			AADD( astruct, {"CIDADE"    , "C", 20,  0} )
			AADD( astruct, {"BAIRRO"    , "C", 15,  0} )
			AADD( astruct, {"CEP"       , "N",  9,  0} )
			AADD( astruct, {"ESTADO"    , "C",  2,  0} )
			AADD( astruct, {"FONE"      , "C", 10,  0} )
			AADD( astruct, {"BCOFGTS"   , "N",  3,  0} )
			AADD( astruct, {"CTAFGTS"   , "C", 11,  0} )
			AADD( astruct, {"IDENT"     , "C", 11,  0} )
			AADD( astruct, {"CPF"       , "C", 11,  0} )
			AADD( astruct, {"CRPROF"    , "C", 13,  0} )
			AADD( astruct, {"CTPSDTE"   , "D",  8,  0} )
			AADD( astruct, {"TITNUM"    , "N", 13,  0} )
			AADD( astruct, {"TITZON"    , "N",  3,  0} )
			AADD( astruct, {"TITSEC"    , "N",  4,  0} )
			AADD( astruct, {"CBO"       , "C",  7,  0} )
			AADD( astruct, {"PISPASEP"  , "C", 11,  0} )
			AADD( astruct, {"TPSAL"     , "N",  1,  0} )
			AADD( astruct, {"SINDICATO" , "N",  3,  0} )
			AADD( astruct, {"SEXO"      , "C",  1,  0} )
			AADD( astruct, {"NACIONAL"  , "N",  2,  0} )
			AADD( astruct, {"INSTRUCAO" , "N",  2,  0} )
			AADD( astruct, {"PROFISSAO" , "C", 15,  0} )
			AADD( astruct, {"CARGO"     , "C", 20,  0} )
			AADD( astruct, {"RESERV"    , "C", 20,  0} )
			AADD( astruct, {"LOCTRAB"   , "C", 30,  0} )
			AADD( astruct, {"ESTCIVIL"  , "N",  1,  0} )
			AADD( astruct, {"DESCSIN"   , "C",  1,  0} )
			AADD( astruct, {"COTAFAM"   , "N",  2,  0} )
			AADD( astruct, {"HSNORMAL"  , "N",  6,  2} )
			AADD( astruct, {"NASCTO"    , "D",  8,  0} )
			AADD( astruct, {"ADMISSAO"  , "D",  8,  0} )
			AADD( astruct, {"DEMISSAO"  , "D",  8,  0} )
			AADD( astruct, {"DEMAVISO"  , "D",  8,  0} )
			AADD( astruct, {"DATAFAST"  , "D",  8,  0} )
			AADD( astruct, {"OPCFGTS"   , "D",  8,  0} )
			AADD( astruct, {"OPTANTE"   , "N",  1,  0} )
			AADD( astruct, {"NFERIAS"   , "N",  5,  2} )
			AADD( astruct, {"FERIAS"    , "D",  8,  0} )
			AADD( astruct, {"FERIAS1"   , "D",  8,  0} )
			AADD( astruct, {"FERGOZO"   , "D",  8,  0} )
			AADD( astruct, {"FERGOZO1"  , "D",  8,  0} )
			AADD( astruct, {"FERABONO"  , "D",  8,  0} )
			AADD( astruct, {"FERABONO1" , "D",  8,  0} )
			AADD( astruct, {"TPFER"     , "C",  1,  0} )
			AADD( astruct, {"FERPGTO"   , "D",  8,  0} )
			AADD( astruct, {"FERCOMP"   , "D",  8,  0} )
			AADD( astruct, {"FERAVISO"  , "D",  8,  0} )
			AADD( astruct, {"SALARIO"   , "N", 12,  2} )
			AADD( astruct, {"TXADIANT"  , "N",  6,  2} )
			AADD( astruct, {"CODADM"    , "C",  2,  0} )
			AADD( astruct, {"CODMOV"    , "C",  2,  0} )
			AADD( astruct, {"RAIS"      , "L",  1,  0} )
			AADD( astruct, {"DATMATI1"  , "D",  8,  0} )
			AADD( astruct, {"DATMATF1"  , "D",  8,  0} )
			AADD( astruct, {"RSVINC"    , "C",  2,  0} )
			AADD( astruct, {"RSINST"    , "C",  2,  0} )
			AADD( astruct, {"RSTPADM"   , "C",  1,  0} )
			AADD( astruct, {"RSCDESL"   , "C",  2,  0} )
			AADD( astruct, {"REGISTRO"  , "C", 10,  0} )
			AADD( astruct, {"BANCO"     , "C",  4,  0} )
			AADD( astruct, {"CONTA"     , "C", 15,  0} )
			AADD( astruct, {"RESMAIORV" , "N", 12,  2} )
			AADD( astruct, {"RESNUMFER" , "N",  3,  0} )
			AADD( astruct, {"RESFERPRO" , "N",  2,  0} )
			AADD( astruct, {"RESDECPRO" , "N",  2,  0} )
			AADD( astruct, {"RESVERBA"  , "C",  6,  0} )
			AADD( astruct, {"RESCODSAC" , "C",  2,  0} )
			AADD( astruct, {"DEDIRRF"   , "N",  2,  0} )
			AADD( astruct, {"CLASSE"    , "N",  3,  0} )
			AADD( astruct, {"LIVRO"     , "N",  3,  0} )
			AADD( astruct, {"FOLHA"     , "N",  3,  0} )
			AADD( astruct, {"INSS"      , "L",  1,  0} )
			AADD( astruct, {"CODFUN"    , "C",  3,  0} )
			AADD( astruct, {"GERAL1"    , "C", 10,  0} )
			AADD( astruct, {"VAL01"     , "N",  9,  2} )
			AADD( astruct, {"PER01"     , "N",  5,  2} )
			AADD( astruct, {"IDENTOE"   , "C",  8,  0} )
			AADD( astruct, {"IDENTUF"   , "C",  2,  0} )
			AADD( astruct, {"IDENTDT"   , "D",  8,  0} )
			AADD( astruct, {"DTPRIEMP"  , "D",  8,  0} )
			AADD( astruct, {"UFCTPS"    , "C",  2,  0} )
			AADD( astruct, {"GERAL2"    , "C", 20,  0} )
			AADD( astruct, {"FERGOZADA" , "N",  2,  0} )
			AADD( astruct, {"NOMECOMP"  , "C", 52,  0} )
			AADD( astruct, {"CONJUGUE"  , "C", 40,  0} )
			AADD( astruct, {"FATORH"    , "C",  4,  0} )
			AADD( astruct, {"HISTORICO" , "M", 10,  0} )
			AADD( astruct, {"SLDFGTS"   , "N", 10,  2} )
			AADD( astruct, {"LIQUIDO"   , "N", 10,  2} )
			AADD( astruct, {"VLEXTRA"   , "N", 10,  2} )
			AADD( astruct, {"QUEMAVIS"  , "C",  1,  0} )
			AADD( astruct, {"TIPOAVIS"  , "C",  1,  0} )
			AADD( astruct, {"OPER"      , "C",  3,  0} )
			AADD( astruct, {"CIDNASCTO" , "C", 30,  0} )
			AADD( astruct, {"CODCEI"    , "C",  4,  0} )
			AADD( astruct, {"IMPLIQ"    , "C",  1,  0} )
			AADD( astruct, {"DATFCONT"  , "D",  8,  0} )
			AADD( astruct, {"DIACONT"   , "N",  3,  0} )
			AADD( astruct, {"DIACONT1"  , "N",  3,  0} )
			AADD( astruct, {"MANEQUIM"  , "C", 10,  0} )
			AADD( astruct, {"DATAPPP"   , "D",  8,  0} )
			AADD( astruct, {"MULTAFGTS" , "N", 10,  2} )
			AADD( astruct, {"GRMESANT"  , "C",  1,  0} )
			AADD( astruct, {"GRMESANT13", "C",  1,  0} )
			AADD( astruct, {"UFNASCTO"  , "C",  2,  0} )
			AADD( astruct, {"TPCONTRAT" , "C",  1,  0} )
			AADD( astruct, {"CUMPJORND" , "C",  1,  0} )
			AADD( astruct, {"COMPSABAD" , "C",  1,  0} )
			AADD( astruct, {"FRMCLCMED" , "C",  1,  0} )
			AADD( astruct, {"FRMAPBS13" , "C",  1,  0} )
			AADD( astruct, {"PERCSQFGT" , "N",  6,  3} )
			AADD( astruct, {"PERCSQFGT1", "N",  6,  3} )
			AADD( astruct, {"CODOUTVNC" , "N",  6,  0} )				
			AADD( astruct, {"HENTRADA"  , "C",  5,  0} )				
			AADD( astruct, {"HSAIDA"    , "C",  5,  0} )
			AADD( astruct, {"HDESCENT"  , "C",  5,  0} )
			AADD( astruct, {"HDESCSAI"  , "C",  5,  0} )
			AADD( astruct, {"CARTMODEL" , "C", 12,  0} ) //FALTA CONFIRMAR
			AADD( astruct, {"DECRETO"   , "C", 15,  0} )
			AADD( astruct, {"RGERAL"    , "C", 20,  0} )
			AADD( astruct, {"QUANTOSF"  , "N",  3,  0} )
			AADD( astruct, {"CASADOCOM" , "L",  1,  0} )
			AADD( astruct, {"FILHOS"    , "L",  1,  0} )	
			AADD( astruct, {"ANOCHEGA"  , "D",  8,  0} )
			AADD( astruct, {"COMISSAO"  , "C", 25,  0} )
			AADD( astruct, {"PORTARIANA", "C", 15,  0} ) //VERIFICAR A QUANTIDADE DE NÚMEROS
			AADD( astruct, {"DATANATU"  , "D",  8,  0} ) 
																					
			AADD( astruct, {"NUMPAS"    , "C", 15,  0} )
			AADD( astruct, {"EMISSPAS"  , "C", 15,  0} )
			AADD( astruct, {"UFPAS"     , "C",  2,  0} )
			AADD( astruct, {"DATAEMIPAS", "D",  8,  0} )
			AADD( astruct, {"DATAVALPAS", "D",  8,  0} )
			AADD( astruct, {"PAISPAS"   , "C", 20,  0} )
			
			// Residência
			AADD( astruct, {"RPAIS"		 , "N",  3,  0} )
			AADD( astruct, {"RLOGRAD"	 , "C", 80,  0} )
			AADD( astruct, {"RNUM"		 , "C", 10,  0} )
			AADD( astruct, {"RBAIRRO"	 , "C", 60,  0} )
			AADD( astruct, {"RCOMPL"	 , "C", 30,  0} )
			AADD( astruct, {"RCITY"		 , "C", 30,  0} )
			AADD( astruct, {"RCEP"		 , "C", 10,  0} )
			
			// CAMPO REFERENTE AO CADASTRO PIS (CERTIDÃO)
			AADD( astruct, {"CCTIPO"    , "C", 50,  0} )
			AADD( astruct, {"CCDATA"    , "D",  8,  0} )
			AADD( astruct, {"CCTERM"    , "C", 20,  0} )
			AADD( astruct, {"CCLIVR"    , "C",  5,  0} )
			AADD( astruct, {"CCFOLH"    , "C",  3,  0} )
			AADD( astruct, {"CCCART"    , "C", 30,  0} )
			AADD( astruct, {"CCUF  "    , "C",  2,  0} )
			AADD( astruct, {"CCMUNI"    , "C", 20,  0} )
			AADD( astruct, {"NUM"       , "N",  6,  0} )
			AADD( astruct, {"COMPEND"   , "C", 21,  0} )
			AADD( astruct, {"ENVIAR"    , "L",  1,  0} )
			AADD( astruct, {"ENVCAGED"  , "L",  1,  0} )
			AADD( astruct, {"DTENVIO"   , "C",  6,  0} )
			AADD( astruct, {"TPREMESSA" , "C",  1,  0} )
			AADD( astruct, {"ENVIARPIS" , "L",  1,  0} )
			AADD( astruct, {"ENVPIS"    , "L",  1,  0} )
			AADD( astruct, {"DTENVIOPIS", "D",  8,  0} )
			//E-Social
			AADD( astruct, {"CODMUNICP" , "N",  7,  0} )
			AADD( astruct, {"CODNATURA" , "N",  7,  0} )
			AADD( astruct, {"CODLOG"    , "C",  4,  0} )
			AADD( astruct, {"INDALV"    , "N",  1,  0} )
			//ABA E-Social
			AADD( astruct, {"NUMRIC"    , "C", 14,  0} )
			AADD( astruct, {"EMISSAORIC", "D",  8,  0} )
			AADD( astruct, {"RICOE"     , "C", 20,  0} )
			
			AADD( astruct, {"NUMOC"     , "C", 14,  0} )
			AADD( astruct, {"DTEXPEDOC" , "D",  8,  0} )
			AADD( astruct, {"VALIDOC"   , "D",  8,  0} )
			AADD( astruct, {"ORGEMIOC"  , "C", 20,  0} )
			
			AADD( astruct, {"NUMCNH"    , "C", 14,  0} )
			AADD( astruct, {"DTEXPEDCNH", "D",  8,  0} )
			AADD( astruct, {"VALIDCNH"  , "D",  8,  0} )
			AADD( astruct, {"ORGEMICNH" , "C", 20,  0} )			
			AADD( astruct, {"UFCNH"		 , "C",  2,  0} )
			AADD( astruct, {"DTPRIMCNH" , "D",  8,  0} )
			AADD( astruct, {"CATEGCNH"	 , "C",  2,  0} )

			AADD( astruct, {"FONEALTER" , "C", 13,  0} )
			AADD( astruct, {"EMAILPRIN" , "C", 60,  0} )
			AADD( astruct, {"EMAILALT"  , "C", 60,  0} )
			
			AADD( astruct, {"PERHRFLEX" , "L",  1,  0} )
			AADD( astruct, {"TPINTERV"  , "N",  1,  0} )
			AADD( astruct, {"CLSESTRG"  , "C",  2,  0} )
		CASE i == 2 // ok
			AADD( astruct, { "CODIGO"    , "C",  6,  0} )
			AADD( astruct, { "NOME"      , "C", 50,  0} )
			AADD( astruct, { "FICHA"     , "C", 10,  0} )
			AADD( astruct, { "FILIAL"    , "C", 10,  0} )
			AADD( astruct, { "DTNASTCO"  , "C", 10,  0} )
			AADD( astruct, { "SEXO"      , "C", 10,  0} )
			AADD( astruct, { "ECIVIL"    , "C", 20,  0} )
			AADD( astruct, { "NACIONAL"  , "C", 20,  0} )
			AADD( astruct, { "NATURAL"   , "C", 30,  0} )
			AADD( astruct, { "INSTRUCAO" , "C", 30,  0} )
			AADD( astruct, { "CTPSNUM"   , "C",  7,  0} )
			AADD( astruct, { "CTPSSER"   , "C",  5,  0} )
			AADD( astruct, { "CTPSDATA"  , "C", 10,  0} )
			AADD( astruct, { "CTPSUF"    , "C",  2,  0} )
			AADD( astruct, { "PIS"       , "C", 11,  0} )
			AADD( astruct, { "TITNUM"    , "C", 20,  0} )
			AADD( astruct, { "TITSEC"    , "C",  3,  0} )
			AADD( astruct, { "TITZONA"   , "C",  4,  0} )
			AADD( astruct, { "RESERVISTA", "C", 20,  0} )
			AADD( astruct, { "DATAADM"   , "C", 10,  0} )
			AADD( astruct, { "CARGO"     , "C", 20,  0} )
			AADD( astruct, { "DEPARTO"   , "C", 20,  0} )
			AADD( astruct, { "ENDERECO"  , "C", 45,  0} )
			AADD( astruct, { "NUMERO"    , "C",  0,  0} )
			AADD( astruct, { "COMPLEMEN" , "C", 20,  0} )
			AADD( astruct, { "CEP"       , "C", 10,  0} )
			AADD( astruct, { "BAIRRO"    , "C", 20,  0} )
			AADD( astruct, { "MUNICIPIO" , "C", 30,  0} )
			AADD( astruct, { "UF"        , "C",  2,  0} )
			AADD( astruct, { "RGNUMERO"  , "C", 10,  0} )
			AADD( astruct, { "RGDATAEMIS", "C", 10,  0} )
			AADD( astruct, { "RGORGEMIS" , "C",  8,  0} )
			AADD( astruct, { "RGUR"      , "C",  2,  0} )
			AADD( astruct, { "DEMISSAO"  , "C", 10,  0} )
			AADD( astruct, { "DDD"       , "C",  2,  0} )
			AADD( astruct, { "FONE"      , "C", 10,  0} )
			AADD( astruct, { "CPF"       , "C", 14,  0} )
			AADD( astruct, { "TIPOSANGUE", "C",  3,  0} )
			AADD( astruct, { "ESCALA"    , "C", 20,  0} )	
		
		CASE i == 3 // OK
			AADD( astruct, { "CODIGO"   , "C",  3,  0} )
			AADD( astruct, { "CODIGO1"  , "C",  3,  0} )
			AADD( astruct, { "DESCRICAO", "C", 30,  0} )
			AADD( astruct, { "TPCLCSAL" , "C",  1,  0} )
			AADD( astruct, { "EXTRA"    , "C",  1,  0} )
			AADD( astruct, { "EXTRA1"   , "C",  1,  0} )
			AADD( astruct, { "EXTRA2"   , "C",  1,  0} )
			AADD( astruct, { "EXTRA3"   , "C",  1,  0} )
			AADD( astruct, { "GERAL"    , "C", 20,  0} )
	   
		CASE i == 4 // OK
			AADD( astruct, {"CODIGO"   , "C",  3,  0} )
			AADD( astruct, {"PRODES"   , "C",  1,  0} )
			AADD( astruct, {"DESCRICAO", "C", 30,  0} )
			AADD( astruct, {"DESCSALC" , "C", 12,  0} )
			AADD( astruct, {"FORMULA"  , "C", 67,  0} )
			AADD( astruct, {"FORMULA1" , "C", 67,  0} )
			AADD( astruct, {"ESCLSALC" , "C", 60,  0} )
			AADD( astruct, {"DHV"      , "C",  1,  0} )
			AADD( astruct, {"FATOR"    , "N", 11,  7} )
			AADD( astruct, {"USFOR"    , "L",  1,  0} )
			AADD( astruct, {"INSS"     , "L",  1,  0} )
			AADD( astruct, {"FGTS"     , "L",  1,  0} )
			AADD( astruct, {"IRRF"     , "L",  1,  0} )
			AADD( astruct, {"XIII"     , "L",  1,  0} )
			AADD( astruct, {"FERIAS"   , "L",  1,  0} )
			AADD( astruct, {"RESC"     , "L",  1,  0} )
			AADD( astruct, {"RAIS"     , "L",  1,  0} )
			AADD( astruct, {"VALE"     , "L",  1,  0} )
			AADD( astruct, {"SALF"     , "L",  1,  0} )
			AADD( astruct, {"FPAS"     , "L",  1,  0} )
			AADD( astruct, {"EBIRR"    , "L",  1,  0} )
			AADD( astruct, {"EBINS"    , "L",  1,  0} )
			AADD( astruct, {"EBFER"    , "L",  1,  0} )
			AADD( astruct, {"EBFAM"    , "L",  1,  0} )
			AADD( astruct, {"EBFGT"    , "L",  1,  0} )
			AADD( astruct, {"DSCFER"   , "L",  1,  0} )
			AADD( astruct, {"INSDED"   , "L",  1,  0} )
			AADD( astruct, {"ATIV1"    , "L",  1,  0} )
			AADD( astruct, {"ATIV2"    , "L",  1,  0} )
			AADD( astruct, {"ATIV3"    , "L",  1,  0} )
			AADD( astruct, {"ATIV4"    , "L",  1,  0} )
			AADD( astruct, {"SOMA"     , "L",  1,  0} )
			AADD( astruct, {"PEGAMES"  , "L",  1,  0} )
			AADD( astruct, {"QTDMES"   , "N",  4,  0} )
			AADD( astruct, {"VALC"     , "N", 15,  2} )
			AADD( astruct, {"QTDC"     , "N",  4,  0} )
			AADD( astruct, {"VALT"     , "N", 15,  2} )
			AADD( astruct, {"QTDT"     , "N",  4,  0} )
			AADD( astruct, {"QTDCONV"  , "N",  7,  4} )
			AADD( astruct, {"QTD2"     , "N",  8,  4} )
			AADD( astruct, {"REDOND"   , "N",  5,  0} )
			AADD( astruct, {"EXTRA1"   , "L",  1,  0} )
			AADD( astruct, {"EXTRA2"   , "L",  1,  0} )
			AADD( astruct, {"CODLIG"   , "C",  3,  0} )
			AADD( astruct, {"MESLIG"   , "C",  2,  0} )
			AADD( astruct, {"CODDEB"   , "C",  5,  0} )
			AADD( astruct, {"CODCRE"   , "C",  5,  0} )
			AADD( astruct, {"HISDEB"   , "N",  3,  0} )
			AADD( astruct, {"HISCRE"   , "N",  3,  0} )
			AADD( astruct, {"VALCTB"   , "N", 12,  2} )
			AADD( astruct, {"INTEGRA"  , "L",  1,  0} )
			AADD( astruct, {"USABASE"  , "C",  1,  0} )
			AADD( astruct, {"BASE01"   , "L",  1,  0} )
			AADD( astruct, {"BASE02"   , "L",  1,  0} )
			AADD( astruct, {"BASE03"   , "L",  1,  0} )
			AADD( astruct, {"BASE04"   , "L",  1,  0} )
			AADD( astruct, {"BASE05"   , "L",  1,  0} )
			AADD( astruct, {"BASE06"   , "L",  1,  0} )
			AADD( astruct, {"BASE07"   , "L",  1,  0} )
			AADD( astruct, {"BASE08"   , "L",  1,  0} )
			AADD( astruct, {"BASE09"   , "L",  1,  0} )
			AADD( astruct, {"CODPFER"  , "C",  3,  0} )
			AADD( astruct, {"CODFUMT"  , "C",  3,  0} )
			AADD( astruct, {"CODPABN"  , "C",  3,  0} )
			AADD( astruct, {"CODFDOB"  , "C",  3,  0} )
			AADD( astruct, {"PROPORC"  , "L",  1,  0} )
			AADD( astruct, {"TODOMES"  , "L",  1,  0} )
			AADD( astruct, {"CLCM01"   , "L",  1,  0} )
			AADD( astruct, {"CLCM02"   , "L",  1,  0} )
			AADD( astruct, {"CLCM03"   , "L",  1,  0} )
			AADD( astruct, {"CLCM04"   , "L",  1,  0} )
			AADD( astruct, {"CLCM05"   , "L",  1,  0} )
			AADD( astruct, {"CLCM06"   , "L",  1,  0} )
			AADD( astruct, {"CLCM07"   , "L",  1,  0} )
			AADD( astruct, {"CLCM08"   , "L",  1,  0} )
			AADD( astruct, {"CLCM09"   , "L",  1,  0} )
			AADD( astruct, {"CLCM10"   , "L",  1,  0} )
			AADD( astruct, {"CLCM11"   , "L",  1,  0} )
			AADD( astruct, {"CLCM12"   , "L",  1,  0} )
			AADD( astruct, {"DPCOND01" , "C",  1,  0} )
			AADD( astruct, {"DPEVEN01" , "C",  3,  0} )
			AADD( astruct, {"DPMESES01", "N",  2,  0} )
			AADD( astruct, {"DPMONTA01", "C",  1,  0} )
			AADD( astruct, {"DPOPERA01", "C",  1,  0} )
			AADD( astruct, {"DPCOMPA01", "C",  1,  0} )
			AADD( astruct, {"DPVALOR01", "N", 10,  3} )
			AADD( astruct, {"DEDLIQINS", "L",  1,  0} )
			AADD( astruct, {"DESCRES"  , "L",  1,  0} )
			AADD( astruct, {"DESC13"   , "L",  1,  0} )
			AADD( astruct, {"DESCAFAS" , "L",  1,  0} )
			AADD( astruct, {"EPENSAO"  , "L",  1,  0} )
			AADD( astruct, {"ICDPENSAO", "L",  1,  0} )
			AADD( astruct, {"COD13"    , "C",  3,  0} )
			AADD( astruct, {"COD13A"   , "C",  3,  0} )
			AADD( astruct, {"CODRES"   , "C",  3,  0} )
			AADD( astruct, {"CDRSPFER" , "C",  3,  0} )
			AADD( astruct, {"CDRSFUMT" , "C",  3,  0} )
			AADD( astruct, {"CDRSPABN" , "C",  3,  0} )
			AADD( astruct, {"CDRSFDOB" , "C",  3,  0} )
			AADD( astruct, {"CDRSPFERP", "C",  3,  0} )
			AADD( astruct, {"CDRSFUMTP", "C",  3,  0} )
			AADD( astruct, {"CDRSPABNP", "C",  3,  0} )
			AADD( astruct, {"CDRSFDOBP", "C",  3,  0} )
			AADD( astruct, {"SEQCALC"  , "C",  1,  0} )
			AADD( astruct, {"DSCFRMENS", "L",  1,  0} )
			AADD( astruct, {"RUBRICA"  , "C",  3,  0} )
			AADD( astruct, {"CODTRCT"  , "C",  5,  0} )
			AADD( astruct, {"DEDLIQIRF", "L",  1,  0} )
		CASE i == 5 // ok
			AADD( astruct, { "CODIGO"    , "C",  3,  0} ) // quando for gerar para o eSocial, usar STRZERO(VAR, 30)
			AADD( astruct, { "DESCRICAO" , "C",100,  0} ) // alterado de 20 para 100 para se adaptar ao eSocial
			AADD( astruct, { "CBO"       , "C",  7,  0} )
			AADD( astruct, { "CODOCUPBC" , "C",  5,  0} )
			AADD( astruct, { "QTDE"      , "N",  5,  0} )
			AADD( astruct, { "NIVEL"     , "C",  3,  0} )
			AADD( astruct, { "CLASSE"    , "C",  3,  0} )
			AADD( astruct, { "REFERENCIA", "C",  3,  0} )
			AADD( astruct, { "SALARIOI"  , "N", 10,  2} )
			AADD( astruct, { "SALARIOF"  , "N", 10,  2} )
			AADD( astruct, { "LEI"       , "C",  7,  0} )
			AADD( astruct, { "EXTRA"     , "C", 10,  0} )
			AADD( astruct, { "DATALEI"   , "D",  8,  0} )
			AADD( astruct, { "DESC1"     , "C", 65,  0} )
			AADD( astruct, { "DESC2"     , "C", 65,  0} )
			AADD( astruct, { "DESC3"     , "C", 65,  0} )
			AADD( astruct, { "DESC4"     , "C", 65,  0} )
			AADD( astruct, { "DESC5"     , "C", 65,  0} )
			AADD( astruct, { "DESC6"     , "C", 65,  0} )
			AADD( astruct, { "INIVALID"  , "C",  7,  0} )
			AADD( astruct, { "FIMVALID"  , "C" , 7,  0} )		
OTHERWISE
			astruct := {}
	ENDCASE
RETURN astruct
Segundo,Checa se houve alterações:

Código: Selecionar todos

METHOD checaAlter(nbanco) CLASS SGBD
	local curstruct, fstruct
	   select(nbanco)    
	
	curstruct := dbstruct()
	fstruct   := ::getEstrBco(nbanco)   
	
	if len(curstruct) <> len(fstruct)
		 RETURN .T.
	else
		for i := 1 to len(curstruct) 
			if alltrim(curstruct[i][DBS_NAME]) <> alltrim(fstruct[i][DBS_NAME])
			 	  RETURN .T.
			elseif alltrim(curstruct[i][DBS_TYPE]) <> alltrim(fstruct[i][DBS_TYPE])
			     RETURN .T.
			elseif curstruct[i][DBS_LEN] <> fstruct[i][DBS_LEN]
			    RETURN .T.
			elseif curstruct[i][DBS_DEC] <> fstruct[i][DBS_DEC]
			   RETURN .T.
   		endif
   	next
  	endif
	 
	
RETURN .F.
Em relação a segunda parte do codigo essa rotinha de ::checaAlter(nbanco) o correto era entrar no primeiro if ja que estou incluindo mais um campo na estrutura. so que isso so está acontecendo em dbf sim e o outro não.
So para deixar claro o meu method converterDbf sai verificando todas as pastas que contem o dbf que eu escolho para alteração.

Problemas com o Dbstruct()

Enviado: 06 Jul 2015 09:49
por Kapiaba
Daiane bom dia, neste caso o melhor é usar o comando: FieldName() do xHarbour.

Código: Selecionar todos

   LOCAL lExiste, nConta, cAlias

    IF FILE( "TERMINAL.DBF" )

       lExiste := .F.

       USE TERMINAL ALIAS TERMINAL EXCLUSIVE NEW

       cAlias := ALIAS()

       FOR nConta := 1 TO (cAlias)->(fCount())

          // Se o campo ja existir, nao cria o novo campo.
          IF (cAlias)->(FieldName(nConta)) = "TIPODESOM"

             lExiste := .T.

             EXIT

          ENDIF

       NEXT

       //-> Nao existe o campo, TIPODESOM vai criar
       IF .NOT. lExiste

          //->Avisa e Vai Pedir a Senha Master
          AVISO_DE_ATUALIZACAO_DO_BANCO() //-> ESTA EM FUNCOES.PRG

          DBCLOSEALL()

          USE TERMINAL ALIAS TERMINAL EXCLUSIVE NEW

          COPY TO TERMICOP.DBF  // Faca uma copia de seguranca do Banco.

          DBCLOSEALL()

          oText:SetText( " Processando, Aguarde... Criando TERMINAL.DBF " )

          DbCreate( "TERMINAL.DBF", { { "SERIALHD",   "C", 15, 00 }, ;
                                      { "TERMINAL",   "N", 05, 00 }, ;
                                      { "TAMANCUPOM", "C", 01, 00 }, ;
                                      { "SUPRIMECAB", "C", 01, 00 }, ;
                                      { "PORTALEITO", "C", 01, 00 }, ;
                                      { "PORTADOECF", "C", 01, 00 }, ;
                                      { "VERSAOECF",  "C", 01, 00 }, ;
                                      { "PORTABALAN", "C", 01, 00 }, ;
                                      { "PORTAGAVET", "C", 01, 00 }, ;
                                      { "ABRIRGAVET", "C", 20, 00 }, ;
                                      { "PORTAIMPCH", "C", 01, 00 }, ;
                                      { "MODIMPCHEQ", "C", 01, 00 }, ;
                                      { "MODELOECF",  "C", 01, 00 }, ;
                                      { "MTELAPAGTO", "C", 01, 00 }, ;
                                      { "TEFDISCADO", "C", 01, 00 }, ;
                                      { "TOTTERMINA", "N", 03, 00 }, ;
                                      { "LEITBALANC", "C", 01, 00 }, ;
                                      { "MODELBALAN", "C", 01, 00 }, ;
                                      { "DESCMAXIMO", "N", 05, 02 }, ;
                                      { "IMPALIQUOT", "C", 01, 00 }, ;
                                      { "PERM4PRECO", "C", 01, 00 }, ;
                                      { "VLMAXTROCO", "N", 06, 02 }, ;
                                      { "IMPROUTMIC", "C", 01, 00 }, ;
                                      { "IMPQTDECOP", "N", 01, 00 }, ;
                                      { "IMPCUPITEM", "C", 01, 00 }, ;
                                      { "SUPCODPROD", "C", 01, 00 }, ;
                                      { "PULARLINHA", "N", 02, 00 }, ;
                                      { "VELOCBALAN", "C", 04, 00 }, ;
                                      { "NAOCOMPCUP", "C", 01, 00 }, ;
                                      { "TECLAREDUZ", "C", 01, 00 }, ;
                                      { "TIPODESOM",  "C", 01, 00 }, ;
                                      { "VALMAXSANG", "N", 12, 02 } } )

          DbCloseAll()

          USE TERMINAL ALIAS TERMINAL EXCLUSIVE NEW

          APPEND FROM TERMICOP.DBF

          INDEX ON Field->TERMINAL TAG TERMINAL TO TERMINAL FOR !DELETED()

          DbCloseAll()

       ENDIF

    ENDIF

Abs.

Problemas com o Dbstruct()

Enviado: 06 Jul 2015 10:04
por Itamar M. Lins Jr.
Ola!
Coloque a variável aStruct como LOCAL.
Cheque se o Select(nBanco) esta falhando.
If select(nBanco) = 0
alert("falha...")
EndIf
No mais teste com estruturas menores.
Outro detalhe é que se usar o Mediator, ele irá criar outros campos que não tem na sua estrutura.

Saudações,
Itamar M. Lins Jr.

Problemas com o Dbstruct()

Enviado: 06 Jul 2015 14:33
por Daiane
Itamar M. Lins Jr, Eu fiz esse teste que vc disse,ai mostra a mensagem de falha,mas coloquei dessa forma
If select(nBanco) = 0
alert("falha..." + nbanco)
EndIf


P mostrar qual banco iria aparecer na hora da falha, e o que apareceu foi o numero referente ai banco e não zero
não entendi mto bem o que aconteceu q se ele entrou no if como poderia ser diferente de "0"

Problemas com o Dbstruct()

Enviado: 06 Jul 2015 14:36
por Daiane
Olá Kapiaba, dessa forma não vai me ajudar mto,pq de qualquer forma ja usei o dbstruct e fiz um print mostrando os nomes de cada campo,ai se fizesse desse jeito q vc disse ele iria dizer q esta igual tbm. na hora do print ele mostra a estrutura que deveria ser atualizada e não a estrutura q está no banco. na verdade to sem entender como isso está acontecendo.

Problemas com o Dbstruct()

Enviado: 06 Jul 2015 14:45
por Daiane
Itamar M. Lins Jr,eu descobrir pq tava mostrando a mensagem falha, é pq meu nbanco é numerico,então coloquei desse jeito select(alias(nbanco)). então com isso descarta a possibilidade do select esta dando erro.
Mas,não sei mais oq fazer para descobrir oq está acontecendo.
ja ate verifiquei se ele está no diretorio certo e ele está.

Problemas com o Dbstruct()

Enviado: 06 Jul 2015 14:46
por Itamar M. Lins Jr.
Ola!
Quando o select() falha retorna 0.
Então vc deverá saber qual é o nome do banco em questão.
No caso está dizendo que nBanco que é 1(um) não foi aberto, está fechado o select falhou

Então abra ele!
use DBF_tal... new alias...
ou
DbUseArea(.T.,"DBFCDX",cMeuDBF,cAlias,.T.,.F.,'PTISO')
Novamente verifique se o USE ou DBUSEAREA irá falhar com NETERR()

Saudações,
Itamar M. Lins Jr.

Problemas com o Dbstruct()

Enviado: 07 Jul 2015 09:50
por Daiane
Tentei fazer mas deu erro
fiz dessa maneira
cAlias:= ::GetNameById(nbanco) // retorna o nome do dbf
cMeuDBF := ::GetFilenameById(nbanco) //Method retona o diretorio e o dbf
DbUseArea(.T.,"DBFCDX",cMeuDBF,cAlias,.T.,.F.,'PTISO')
If NETERR() = 0
alert("falha..." + cAlias)
EndIf

ai deu este erro

Problemas com o Dbstruct()

Enviado: 07 Jul 2015 09:58
por Daiane
Itamar, eu fiz outro teste tambem aq, p me retornar o banco quando select(nbanco) <> 0
ele nunca entra nessa condição. não acho q seja probelma no select,ja q da segunda vez que mando verificar
se ta diferente meu dbf com minha nova estrutura ele enxerga isso. o meu problema é que de primeira ele n ver e na segunda tentativa ele consegue identificar
a mudança.

Problemas com o Dbstruct()

Enviado: 07 Jul 2015 10:55
por Itamar M. Lins Jr.
Ola!
Daine vc colocou um exemplo muito grande.
Teste com estruturas menores, e se der erro, postar aqui p/ nós, mas é bom colocar um exemplo bem pequeno que todos possam testar nas nossas máquinas sem mexer no seu código.
Pelo que estou vendo é um erro de lógica e não de uma função do Harbour.

Saudações,
Itamar M. Lins Jr.

Problemas com o Dbstruct()

Enviado: 07 Jul 2015 11:14
por Kapiaba

Código: Selecionar todos

   Error description: Error DBCMD/1015  Argument error: DBUSEAREA

   Called from: C:\mfolhawin\sgbd.000 => SGBD:CHECAALTER( 8567 )
Daiane, verifique a linha: 8567 de CHECAALTER() tem um erro de logica nela.

Abs.



Problemas com o Dbstruct()

Enviado: 07 Jul 2015 13:23
por JoséQuintas
Daiane, não sei se já resolveu, mas o mais prático seria usar o DEBUG.
Só acompanhar a execução linha a linha e pode verificar arquivo em uso, variáveis, etc.

Problemas com o Dbstruct()

Enviado: 07 Jul 2015 13:45
por JoséQuintas
Em todo caso, seu fonte tem um erro básico, que ninguém percebeu, de tão pequeno que é o nome da variável.

Não se usa uma variável sem declarar como LOCAL, ainda mais numa função tão importante quanto essa.

Código: Selecionar todos

FOR I = 1 TO ...
Já dá pra imaginar que deve ter muitos FOR I dentro dos fontes, e com certeza um pode interferir no outro.

Se não acredita, compile este exemplo:

Código: Selecionar todos

PROCEDURE Main
   FOR I = 1 TO 10
      Rotina2()
   NEXT
   RETURN

FUNCTION Rotina2()
   FOR I = 1 TO 10
      ? I
   NEXT
   RETURN NIL
À primeira vista deveriam ser mostrados os números de 1 a 10, por 10 vezes.
Na prática, só vai mostrar 1 vez, isso porque falta declarar I como LOCAL, e a rotina2 altera o conteúdo de I.

Não parece, mas declarar variáveis é uma coisa muito importante.
Quanto mais o sistema vai crescendo, mais isso faz diferença.

Problemas com o Dbstruct()

Enviado: 07 Jul 2015 14:29
por Daiane
Pessoal,acredito que consegui resolver o problema,pois fiz o teste aqui e ta tudo ok.
So preciso ter a certeza fazendo o teste no cliente usando rede.
Com a ajuda do Itamar,eu fiz da seguinte forma
Continue usando o select(nbanco) mas acrescentei o USE que o Itamar havia me dito p colocar.
Ficou dessa forma:
select(nbanco)
XARQUIVO := ::GetFilenameById(nBanco)
USE (XARQUIVO) EXCLUSIVE
Eu continuei usando o select,pois quando tirei ele ocorreu muitos erros
e dessa forma que fiz corrigiu o erro,pelo menos é o que parece.

Dessa forma que eu fiz esta incorreto? usar o select e depois o USE?

JoséQuintas,Eu acredito em vc e cuidei aqui para declarar todas que estavam faltando,obrigada.

Obrigada a todos que me ajudou,inclusive o Itamar :)

Problemas com o Dbstruct()

Enviado: 07 Jul 2015 15:27
por alxsts
Olá!
Daiane escreveu:Dessa forma que eu fiz esta incorreto? usar o select e depois o USE?
Creio que o mais lógico seria:

Código: Selecionar todos

XARQUIVO := AllTrim( ::GetFilenameById(nBanco)  )

IF Select( XARQUIVO ) == 0 
   USE (XARQUIVO) EXCLUSIVE
ELSE
   Select( XARQUIVO )
ENDIF