Problemas com o Dbstruct()

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
Daiane
Usuário Nível 3
Usuário Nível 3
Mensagens: 122
Registrado em: 28 Out 2014 16:19
Localização: Feira de Santana - BA

Problemas com o Dbstruct()

Mensagem 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.
XHb 1.2.1 + FW 12.05 + Pelles C IDE
"Eu adoraria mudar o mundo, mas não me deram o código-fonte."
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

Problemas com o Dbstruct()

Mensagem 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.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Problemas com o Dbstruct()

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Daiane
Usuário Nível 3
Usuário Nível 3
Mensagens: 122
Registrado em: 28 Out 2014 16:19
Localização: Feira de Santana - BA

Problemas com o Dbstruct()

Mensagem 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"
Anexos
Attention.jpg
XHb 1.2.1 + FW 12.05 + Pelles C IDE
"Eu adoraria mudar o mundo, mas não me deram o código-fonte."
Avatar do usuário
Daiane
Usuário Nível 3
Usuário Nível 3
Mensagens: 122
Registrado em: 28 Out 2014 16:19
Localização: Feira de Santana - BA

Problemas com o Dbstruct()

Mensagem 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.
XHb 1.2.1 + FW 12.05 + Pelles C IDE
"Eu adoraria mudar o mundo, mas não me deram o código-fonte."
Avatar do usuário
Daiane
Usuário Nível 3
Usuário Nível 3
Mensagens: 122
Registrado em: 28 Out 2014 16:19
Localização: Feira de Santana - BA

Problemas com o Dbstruct()

Mensagem 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á.
XHb 1.2.1 + FW 12.05 + Pelles C IDE
"Eu adoraria mudar o mundo, mas não me deram o código-fonte."
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Problemas com o Dbstruct()

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Daiane
Usuário Nível 3
Usuário Nível 3
Mensagens: 122
Registrado em: 28 Out 2014 16:19
Localização: Feira de Santana - BA

Problemas com o Dbstruct()

Mensagem 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
Anexos
error.txt
(11.49 KiB) Baixado 30 vezes
XHb 1.2.1 + FW 12.05 + Pelles C IDE
"Eu adoraria mudar o mundo, mas não me deram o código-fonte."
Avatar do usuário
Daiane
Usuário Nível 3
Usuário Nível 3
Mensagens: 122
Registrado em: 28 Out 2014 16:19
Localização: Feira de Santana - BA

Problemas com o Dbstruct()

Mensagem 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.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7929
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Problemas com o Dbstruct()

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

Problemas com o Dbstruct()

Mensagem 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.


Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Problemas com o Dbstruct()

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Problemas com o Dbstruct()

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Daiane
Usuário Nível 3
Usuário Nível 3
Mensagens: 122
Registrado em: 28 Out 2014 16:19
Localização: Feira de Santana - BA

Problemas com o Dbstruct()

Mensagem 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 :)
XHb 1.2.1 + FW 12.05 + Pelles C IDE
"Eu adoraria mudar o mundo, mas não me deram o código-fonte."
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Problemas com o Dbstruct()

Mensagem 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
[]´s
Alexandre Santos (AlxSts)
Responder