Jump to content
Fivewin Brasil

Geraldo (gbsilva)

Membros
  • Posts

    1,495
  • Joined

  • Last visited

  • Days Won

    6

Geraldo (gbsilva) last won the day on February 27 2016

Geraldo (gbsilva) had the most liked content!

Profile Information

  • Gender
    Not Telling
  • Interests
    Fwh1202, Sqllib, TDolphin, Mysql.

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

Geraldo (gbsilva)'s Achievements

Newbie

Newbie (1/14)

9

Reputation

  1. Bom dia! Conforme já postei no outro post eu também uso há bastante tempo, muito bom. A disposição.
  2. Olá Valdir como vai! Hoje que estou vendo o seu post. Sabe que cheguei a montar um tempo atrás um exemplo completo com a TDolphin para você, mas não tive como enviá-lo, nem me lembro mais como fiz, mas tenho ele aqui. Estou de passagem aqui no momento, mas e quanto ao mysql, pode estar faltando algum detalhe, a senha esta correta, onde esta o seu mysql numa máquina local acredito, pois no seu .ini esta localhost. Falo isso porque ao instalar tem uma solicitação de flegar sobre conexão via ip e que deve ser flegada ou não acessa, mas local funcionaria. Tente usar em vez de localhost assim: [mysql] // Endereço de IP host = 127.0.0.1 user = root port = 3306 Você criou no mysql o banco e tabelas? são perguntas bobas, mas pode ser por ai rsss....apanhei muito também. Estou a disposição, se estiver interessado darei uma olhada no exemplo que te falei e te passo para tentar compilar ai. Abaixo um exemplo do que utilizo atualmente, parte de um Main() e uma classe que criei para configurações: Function Main() // Menu Principal local nEntry := 0 local oBar,oIco,oHand local oSfa,cRede:="" Private oConn,oServer PUBLIC oWnd,oGbs //-> Instancia Classe TGbSilva() oGbs := TGbsilva() //-> Instancia objeto e iguala atributos antes de verificar versão do sistema oSfa := TGbConfig():new() oSfa:versao := "1.1.0" //-> Versão oSfa:ini_file := "gb_connect.ini" //-> Nome do arquivo .ini oSfa:sistema := "Sistema de Atendimento - Facilidades (SISAF)" oSfa:ini_set := "mysql" ******************************************************************************************** * Definição do Banco de Dados e senha de acesso ******************************************************************************************** oSfa:ini_dbname := "Sagre" //-> Database mysql oSfa:password := "123" //-> Senha ******************************************************************************************** //-> Chama arquivo .ini oSfa:SetIni() //-> Verifica se o Sistema já esta sendo executado IF !oSfa:SisExec("Sisaf.exe") BringWindowToTop( oWnd ) return(nil) ENDIF //-> Configurações gerais do Sistema oSfa:Set() //-> Chama método para conectar ao banco de dados IF ( oServer := oSfa:Connect() ) == NIL BringWindowToTop( oWnd ) return(nil) ENDIF //-> Chama módulo de acesso ao sistema (acesso.prg) IF !Login(@nEntry) BringWindowToTop( oWnd ) return(.f.) ENDIF //-> Trata retorno do Login() IF nEntry = 1 BringWindowToTop( oWnd ) return(.f.) ENDIF .... .... .... #include "FiveWin.ch" #include "xbrowse.ch" #include "tsbutton.ch" #include "config.ch" #ifdef rdd_tdolphin #include "tdolphin.ch" //-> usando Tdolphin #else #Include "sqllib.Ch" //-> usando sqllib #endif ************************************************************************************************************************ CLASS TGbConfig FROM TGbSoftware DATA sistema,versao,lReturn,CLR_GetFocus DATA apDados,aImagens DATA ini_dbname,ini_empresa,ini_host,ini_user,ini_porta,ini_file,ini_reshor,ini_resver,ini_exe,password DATA ini_rede,ini_endclasse,ini_set,ini_endesp DATA id_imagem,nome,filec METHOD New() CONSTRUCTOR METHOD SisExec(_cSistema) METHOD SisVersao() METHOD Set() METHOD SetIni() METHOD Connect() ENDCLASS METHOD New() CLASS TGbConfig super:New() ::sistema := "Nome do Sistema" ::versao := "" ::lReturn := .f. ::apDados := {} ::aImagens := {} ::CLR_GetFocus := NRGB(255,208,047) // RGB(235,255,145) ::ini_set := "mysql" //-> nome da variável do arquivo .ini ::ini_dbname := "" ::ini_file := "" ::ini_empresa := "" ::ini_host := "127.0.0.1" ::ini_user := "root" ::ini_porta := 3306 ::ini_exe := "" ::ini_reshor := 1024 ::ini_resver := 768 ::password := "123" ::ini_rede := "" ::ini_endclasse := "" ::ini_endesp := "" ::id_imagem := space(2) ::nome := space(20) ::filec := space(20) return self METHOD SisVersao() CLASS TGbConfig local cSql,aVersao[1],lVersao:=space(10) local oQry cSql := "SELECT versao" +; " FROM cadastro.versao" +; " WHERE sistema='"+oGbs:id_sistema+"' AND status='1' LIMIT 1 ;" #ifdef rdd_tdolphin oQry := oServer:Query(cSql) lVersao := oQry:FieldGet(1) oQry:End() #else aVersao := SqlArray(cSql) lVersao := aVersao[1,1] #endif if ::versao <> alltrim(lVersao) If !MsgYesNo("Existe uma nova versão, Deseja atualizar o Sistema (S/N) ?","Atualização do Sistema",2) ::lReturn := .f. Else ::lReturn := .t. Endif return(.f.) endif return(.t.) //-> Verifica se o sistema já esta sendo executado METHOD SisExec(_cSistema) CLASS TGbConfig if (IsExeRunning(_cSistema) ) MsgStop("Sistema "+STRTOKEN(_cSistema,1,".") +" já esta sendo executado","Atenção!!!") return(.f.) endIf return(.t.) METHOD Set() CLASS TGbConfig //-> Configuração Para Todo o Sistema SET 3DLOOK ON SET CENTURY ON // 4 DIGITOS PARA O ANO SET CONFIRM OFF // (mudei, eu) CURSOR NÃO PODE DESLOCAR-SE AUTOMATICAMENTE SET CURSOR ON //-SetCursor( if(Upper("ON") == "ON", 1, 0) ) SET DATE BRITISH // FORMATO DD/MM/AAAA SET DATE FORMAT "dd/mm/yyyy" // IGUAL AO ANTERIOR, APENAS REFOR€O. SET DELETED ON // ON IMPEDIR VER REGISTROS MARCADOS PARA APAGAR SET DECIMALS TO 2 SET EPOCH TO (Year(Date())-50)// PARA IMPEDIR QUE O ANO SEJA 00 SET ESCAPE ON // TECLA ESC LIGADA, POSSO ESCAPAR. SET EXCLUSIVE OFF // REDE NETUSE LIGADA //NOTA: As Funcoes OrdKeyCount() e OrdKeyNo() Nao Trabalham se OPTIMIZE //Esta em OFF, ou se uma variavel de filtro e um elemento de matriz. SET MULTIPLE ON // PARA QUE SE POSSA ACIONAR QUANTAS JANELAS QUISER SET OPTIMIZE ON // OPTIMIZAR OS FILTROS(DBSETFILTER) SET SOFTSEEK OFF // OBRIGATÓRIO "OFF" PARA USO COM MYSQL SET UNIQUE OFF // PERMITIR OU NÇO CHAVES COM DUPLICIDADE SET WRAP ON //-Set( 35, "ON" ) // PARA MENUS SETCANCEL( .F. ) // INUTILIZA ALT + C PARA ABORTAR PROGRAMA #ifdef rdd_sqllib SET CUSTOM INDEXES ON // ATIVA O USO DE ÍNDICES CUSTOMIZADOS (COM FUNÇÃO) #endif REQUEST DBFCDX // CHAMADA AO BANCO DBFCDX OU _DBFCDX REQUEST HB_CODEPAGE_PT850 REQUEST HB_LANG_PT HB_SETCODEPAGE("PT850") HB_LANGSELECT("PT") RDDSETDEFAULT( "DBFCDX" ) // CARREGA RDD DEFINIDO NO CASO, *.CDX DBSETDRIVER( "DBFCDX" ) // CARREGA RDD DEFINIDO NO CASO, *.CDX //SetGetColorFocus( RGB(235,255,145) ) SetGetColorFocus( ::CLR_GetFocus ) return(.t.) METHOD Connect(n) CLASS TGbConfig local c local hIni local oServer,nFlags local oErr c = "mysql" if n != NIL c = "mysql" + AllTrim( Str( n ) ) endif #ifdef rdd_sqllib SQL CONNECT ON ::ini_host ; PORT ::ini_porta ; DATABASE ::ini_dbname ; USER ::ini_user ; PASSWORD ::password ; OPTIONS SQL_NO_WARNING ; LIB "MySQL" IF SQL_ERRORNO() > 0 Alert("Não foi possível conectar ao banco de dados !"+CRLF+; "Informe esta mensagem ao suporte: "+CRLF+; SQL_ErrorMsg()) return(.f.) ENDIF RddSetDefault("MySQL") return(.t.) #else oServer := NIL nFlags := 0 TRY CONNECT oServer HOST ::ini_host ; USER ::ini_user ; PASSWORD ::password ; PORT ::ini_porta ; FLAGS nFlags; DATABASE ::ini_dbname CATCH oErr ? hb_dumpvar( oErr ) RETURN NIL END RETURN oServer #endif return(.f.) METHOD SetIni() CLASS TGbConfig local c,oWnd,hIni c = ::ini_set //-> variável do arquivo .ini #ifdef rdd_sqllib //-> somente usado método com sqllib INI hIni FILE ".\"+::ini_file GET ::ini_host SECTION c ENTRY "host" OF hIni GET ::ini_user SECTION c ENTRY "user" OF hIni GET ::ini_porta SECTION c ENTRY "port" OF hIni ENDINI #else //-> chama o arquivo .ini hIni := HB_ReadIni( ::ini_file ) //-> atribui valores do ini ::ini_host := hIni[ c ]["host"] ::ini_user := hIni[ c ]["user"] ::ini_porta := val(hIni[ c ]["port"]) #endif return nil ************************************ FINAL DA TGBCONFIG ****************************************************************
  3. Só umas considerações sobre o código, não sei se o que faço esta mais correto ou não, mas trabalho com tabelas com muitos registros e não tenho problema com lentidão. Por exemplo se tenho um sub-select e atribui o alias dele como sald os campos do select final sempre referencio como sald.campo. Outra coisa as tabelas pedido e produto uso um ON para relacioná-las e nunca um AND no WHERE como no código. Terceiro nunca coloco ORDER BY no sub-select faço no final usando o alias como coloquei na minha sugestão. Mestre Evandro também não utilizo temporárias e gostei do seu exemplo, qualquer hora farei algum teste para ver se posso melhorar minhas consultas. Sds a todos,
  4. Luiz tenho uma sugestão se quiser tentar. cSql := "SELECT sald.data,sald.produto,sald.descricao" +; " FROM (SELECT MAX(pe.data) AS data,pe.produto,pr.descricao" +; " FROM pedido AS pe" +; " INNER JOIN produto AS pr ON pe.produto = pr.codigo" +; " WHERE pe.tipo='1'" +; " GROUP BY pe.produto ) sald " +; " WHERE sald.data < '2015-11-30'" +; " ORDER BY sald.produto ; "
  5. Boa tarde pessoal! De volta com problema do Windows 7. Compilei o sistema no Win7 32 bits, tudo funciona com exceto quando estou tentando gravar uma planilha de excel usando a TOleauto() dá o erro abaixo. Nas máquinas 32 bits funciona normal, alguém sabe o que devo fazer nas máquinas 64 bits para conseguir gravar? Obs.: Não tenho permissão aqui na empresa para compilar no notebook que são os de 64 bits, para conseguir vai levar muito tempo e burocracia, pois trabalho numa empresa grande e é difícil essas autorizações. Se alguém souber algum maçete agradeço. Application =========== Path and name: D:\Projetos\Sisaf\Sisaf.EXE (32 bits) Size: 3,788,288 bytes Time from start: 0 hours 1 mins 14 secs Error occurred at: 01/02/2016, 12:50:29 Error description: Error Excel.Application/0 S_OK: SAVE Args: Stack Calls =========== Called from TOLEAUTO:SAVE(0) Called from TATENDIMENTO:SAVEPLANILHASAGRE(1321) Called from TATENDIMENTO:PRINTINSPECAOSAGRE(914) Called from GERARPRINT(295) Called from (b)ATEND(239) Called from TBUTTONBMP:CLICK(157) Called from TBUTTON:HANDLEEVENT(1654) Called from TBUTTONBMP:HANDLEEVENT(290)
  6. Bom dia! Alessandro fiz a sua sugestão de copiar a pasta script e funcionou perfeitamente, obrigado a todos que deram as dicas. Sds,
  7. João, Kapi, Alessandro e Crisvan obrigado pelos retornos, estou em casa, mas na segunda farei com certeza e posto aqui. Grato,
  8. Quanto a versão você já havia citado desculpe rsss...
  9. Bom dia João tudo bem! Eu utilizo justamente essa opção do "Módulos do sistema", mas não consigo ver a opção, veja na imagem que postei que estou com a lib selecionada e só aparecem do lado direito duas linhas compile e nome do arquivo, não tem mais opções. Se seleciono um prg aparecem mais opções, mas no caso da lib não. Estou em uma nova empresa e aqui só tenho Win 7 e nunca havia testado antes. Que versão da xDev você esta utilizando? a minha é 0.7. Grato,
  10. Olá pessoal, estou tentando compilar um projeto no Win7, até hoje sempre fiz no XP e acontece que tem algumas lib´s que preciso marcar sim ou não se elas serão compiladas antes do fivewin e quando entro em propriedades do projeto não aparece essa opção, alguém já passou por isso? Agradeço ajudas.
  11. Luiz uma tentativa: SELECT res.produto, res.maiordata FROM (SELECT pe.produto, MAX(pe.data) AS maiordata FROM pedido AS pe GROUP BY pe.produto ) res WHERE res.maiordata < '2014-01-01' ORDER BY res.produto, res.maiordata (se quiser ordenar, por exemplo) Sobre os índices acho que você tem muito índice para uma única tabela e por acaso você não esta criando/atualizando esses índices antes desse select não né, pois índice em mysql cria uma vez e pronto, nem deve mencioná-lo mais, pois o próprio mysql trata de atualizá-los. Pior não fica rsss...., então tenta como acima para ver o que acontece? Sds,
  12. Luiz você consegue acessar um outro banco fazendo assim, não sei mas acho que talvez possa ser a solução. Voce conecta no banco1, por exemplo e usando (banco.tabela) você pode trabalhar em qualquer outro banco do seu mysql. SELECT a.campo1, a.campo2, b.campo3 FROM banco1.tabela a INNER JOIN banco2.tabela b ON a.registro = b.registro ; Sds,
  13. Luiz se tem não sei, mas as vezes acontece algo parecido no meus projetos. Experimente criar uma outra pasta com outro nome e copie todo seu projeto e tente compilar na nova pasta, inclusive com o novo arquivo. É uma tentativa, mas se for o mesmo caso pode dar certo. Como disse não sei precisar o porque, mas as vezes acontece comigo. Sds,
  14. Olá João tudo bem! Sim tranquilo, abaixo uma rotina bem antiga, mas usada ainda. A função para gravar esta dentro do For/Next a cada linha lida da planilha do excel atribui os valores aos atributos do objetos oCpo e grava no mysql, com DBF seria o mesmo processo. Dúvidas a disposição. STATIC function ImportaPastas(oCpo,aBEmpresas,aBServicos,aBPastas,aBTipos,aBases,oMet,nTotal) Local nP,nF,nT,aDados:={},aFalhas:={},nDados:=0,lContrato:="",cServico:="",lPasta:=space(10) Local nFalha :=0,lError:=0,nReg:=1,nFalhas:=0,lNewFile:="",cArquivo:="" Local lHoraInicio,lHoraFim,cTempo,conta:=0,lPeriodo:=space(4),lDefinePeriodo:=space(5) Local aClasses:={},cRetorno:=space(1),lAnexo:=space(4),lTipoObra:=space(1) Local lNumberTel:=space(7),nNumberTel:=0,cContrato:="",cBase:="",lGrupoAcq:=space(7) Local lPep1:="",lPep2:="",cFirstGrupo:=space(7) local nTipoAnexo := 0 If !AutoMan(,2) return(.f.) Endif If empty(left(oCpo:periodo,2)) .or. empty(right(oCpo:periodo,2)) GbMsg("Favor digitar o período das obras!",,2) GbFoco(oMet[1]) return(.f.) Endif If !ClasseObras(aClasses) GbMsg("Não foi carregados tipos de obras!",,2) GbFoco(oMet[1]) return(.f.) Endif lPeriodo := (right(oCpo:periodo,2)+left(oCpo:periodo,2)) lDefinePeriodo := lPeriodo+cRetorno cArquivo:= cGetFile32("*.XLS","Escolha o arquivo") IF !File(cArquivo) RETURN ENDIF lNewFile := cArquivo cursorwait() LeExcel( lNewFile,@aDados, 24, {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24},1,2,,.f. ) nDados:=Len(aDados) lHoraInicio := Time() oMet[2]:ntotal = nDados if nDados = 0 GbMsg("Nenhuma obra foi encontrada na planilha de origem, favor verificar!",,2) GbFoco(oMet[5]) return(.f.) endif //-> Ordena matriz para pegar o menor grupo_acq na primeira linha ASORT(aDados,,,{|x,y| x[1] < y[1] }) //-> Iguala para carregar apenas obras já gravadas a partir do menor grupo_acq da importação cFirstGrupo := STR(aDados[1,1],0) //-> Atualiza texto ao iniciar barra oCpo:processo := "Carregando Tabelas [Empresas, Serviços e Obras]...Aguarde [GbSoftware]" oMet[3]:SetText(oCpo:processo) If !CarregaPastas(@aBPastas,cFirstGrupo) GbFoco(oMet[5]) return(.f.) Endif //-> Carrega array com obras já cadastradas de acordo com maior grupo da planilha a ser importada CarregaEmpresas(@aBEmpresas) CarregaServicos(@aBServicos) CarregaGisBase(aBases) //-> Atualiza texto ao iniciar barra oCpo:processo := "Lendo Planilha Excel...Aguarde [GbSoftware]" oMet[3]:SetText(oCpo:processo) //-> Atualiza texto ao iniciar barra oCpo:processo := "Importando Obras...Aguarde [GbSoftware]" oMet[3]:SetText(oCpo:processo) For nP = 1 to nDados //-> se a coluna tiver preenchimento consulta tabela cad_nome_obras oCpo:tipo_obra := space(1) oCpo:tipo := space(1) nTipoAnexo := 0 if !empty(aDados[nP,7]) if !MClasse(oCpo,aClasses,aDados[nP,7]) aAdd(aFalhas,{alltrim(STR(aDados[nP,1],0)),"Não encontrou classe de obra"} ) loop endif oCpo:tipo := oCpo:tipo_obra else if empty(oCpo:tipo) //-> se for vazio entra nessa opção antiga if empty(aDados[nP,7]) .AND. empty(aDados[nP,10]) //-> Não tem anexo e gerobras então é Manutenção oCpo:tipo := "M" //-> Obra de Manutenção else if empty(aDados[nP,7]) //-> Se for vazio ANEXO aAdd(aFalhas,{alltrim(STR(aDados[nP,1],0)),"Implantação sem ANEXO 1"} ) loop endif oCpo:tipo := "I" //-> Obra de Implantação oCpo:m_obra := "T" lAnexo := aDados[nP,7] nTipoAnexo := 1 endif else oCpo:tipo := oCpo:tipo_obra endif endif if oCpo:tipo = "M" //-> Manutenção if !empty(aDados[nP,7]) //-> Anexo preenchido lAnexo := aDados[nP,7] if alltrim(upper(aDados[nP,8])) == "ATIVIDADE" .OR. upper(aDados[nP,8]) = "ATIVIDADES" oCpo:m_obra := "T" else oCpo:m_obra := "A" endif else If alltrim(upper(aDados[nP,8])) == "ATIVIDADE" .OR. upper(aDados[nP,8]) = "ATIVIDADES" oCpo:m_obra := "T" lTipoObra := "1" Elseif alltrim(upper(aDados[nP,8])) == "ATIVIDADE /POU" oCpo:m_obra := "T" lTipoObra := "2" Elseif alltrim(upper(aDados[nP,8])) == "ACESSO" oCpo:m_obra := "A" lTipoObra := "1" Else aAdd(aFalhas,{alltrim(STR(aDados[nP,1],0)),"Faltou mão de obra"} ) loop Endif If alltrim(aDados[nP,24]) == "FO" If oCpo:m_obra = "T" lAnexo := "OR03" //-> Manutenção Fibra Atividade (ver tabela cad_nome_obras) Else lAnexo := "OR04" //-> Manutenção Fibra Acesso (ver tabela cad_nome_obras) Endif Else If oCpo:m_obra = "T" .AND. lTipoObra = "1" //-> OR normal Atividade lAnexo := "OR02" Elseif oCpo:m_obra = "T" .AND. lTipoObra = "2" //-> POU Atividade lAnexo := "PU01" Elseif oCpo:m_obra = "A" .AND. lTipoObra = "2" //-> POU Acesso lAnexo := "PU01" Elseif oCpo:m_obra = "A" .AND. lTipoObra = "1" //-> OR normal Acesso lAnexo := "OR01" Endif Endif Endif //? "M3 - Anexo",oCpo:tipo,lAnexo,"Com Tipo" else //-> Obras de Implantação if nTipoAnexo = 0 If empty(aDados[nP,7]) //-> Se for vazio ANEXO aAdd(aFalhas,{alltrim(STR(aDados[nP,1],0)),"Implantação sem ANEXO 2"} ) loop Endif oCpo:tipo := "I" //-> Obra de Implantação oCpo:m_obra := "T" lAnexo := aDados[nP,7] endif endif If !MClassificacao(oCpo,aClasses,lAnexo,@cRetorno) aAdd(aFalhas,{alltrim(STR(aDados[nP,1],0)),"Não encontrou classe de obra"} ) loop Endif //-> Definindo número da pasta lDefinePeriodo := lPeriodo+cRetorno //-> Período digitado + classe da tabela cad_nome_obras lNumberTel := StrZero(aDados[nP,1],7) //-> Pega grupo da planilha do gcore oCpo:codigo := lDefinePeriodo+lNumberTel //-> A junção dos dois gera o número da pasta //-> Pega o grupo_acq do gcore para gravar na tabela cad_obras lGrupoAcq := STR(aDados[nP,1],0) oCpo:grupo_acq := VAL(lGrupoAcq) ******************************************************************** //-> Pega o número do contrato na planilha e faz a busca em MEmpresa() para identificar a empresa da obra If valtype(aDados[nP,2]) = "N" cContrato := STR(aDados[nP,2],0) Else cContrato := alltrim(aDados[nP,2]) Endif If MEmpresa(oCpo,aBEmpresas,cContrato) If valtype(aDados[nP,4]) = "N" oCpo:zona := STR(aDados[nP,4],2) Else oCpo:zona := alltrim(aDados[nP,4]) Endif oCpo:escritorio := aDados[nP,5] oCpo:estacao := aDados[nP,6] Else aAdd(aFalhas,{alltrim(STR(aDados[nP,1],0)),"Não achou empresa"} ) loop Endif //-> Identifica o tipo de serviço da obra If !MServico(oCpo,aBServicos,oCpo:nome_obra) aAdd(aFalhas,{alltrim(STR(aDados[nP,1],0)),"Não achou tipo serviço"} ) loop Endif //-> Modificado para tratar se o gerobras estiver na coluna errada If !empty(aDados[nP,9]) //-> se tem gerobras então não tem projeto/sgci ai zera a variável oCpo:projeto oCpo:projeto := space(15) If VALTYPE(aDados[nP,9]) = "N" oCpo:pep := alltrim(STR(aDados[nP,9],10,0)) Else //-> Trata, pois em alguns casos vem apenas um traço na planilha If alltrim(aDados[nP,9]) = "-" oCpo:pep := space(10) Else //-> se tiver traço no meio do pep trata e tira o traço lPep1 := alltrim(StrToken(aDados[nP,9],1,"-")) lPep2 := alltrim(StrToken(aDados[nP,9],2,"-")) oCpo:pep := lPep1+lPep2 Endif Endif //-> Se estiver na coluna 10 o gerobras sai daqui (as vezes o gerobras vem na coluna projeto) If !empty(aDados[nP,10]) If VALTYPE(aDados[nP,10]) = "N" oCpo:gerobras := alltrim(STR(aDados[nP,10],30,0)) Else If alltrim(aDados[nP,10]) = "-" oCpo:gerobras := space(30) Else oCpo:gerobras := alltrim(aDados[nP,10]) Endif Endif Endif //-> Se estiver na coluna 11 o gerobras sai daqui If !empty(aDados[nP,11]) If VALTYPE(aDados[nP,11]) = "N" oCpo:gerobras := alltrim(STR(aDados[nP,11],30,0)) Else //-> Trata, pois em alguns casos vem apenas um traço na planilha If alltrim(aDados[nP,11]) = "-" oCpo:gerobras := space(30) Else oCpo:gerobras := alltrim(aDados[nP,11]) Endif Endif Endif Else //-> se é projeto/sgci zera variáveis pep e gerobras oCpo:pep := space(10) oCpo:gerobras := space(30) If !empty(aDados[nP,11]) If VALTYPE(aDados[nP,11]) = "N" oCpo:projeto := alltrim(STR(aDados[nP,11],15,0)) Else //-> Trata, pois em alguns casos vem apenas um traço na planilha If alltrim(aDados[nP,11]) = "-" oCpo:projeto := space(15) Else oCpo:projeto := alltrim(aDados[nP,11]) Endif Endif Else oCpo:projeto := space(15) Endif Endif //-> Os campos 12 a 15 são tratados se no valor vier ponto em vez de vírgula If !empty(aDados[nP,12]) IF VALTYPE(aDados[nP,12]) = "N" oCpo:pontol := aDados[nP,12] ELSE IF AT(",",aDados[nP,12]) = 0 oCpo:pontol := aDados[nP,12] ELSE oCpo:pontol := STRTRAN(aDados[nP,12],",",".") ENDIF ENDIF Else oCpo:pontol := '0' Endif If !empty(aDados[nP,13]) IF VALTYPE(aDados[nP,13]) = "N" oCpo:pontoc := aDados[nP,13] ELSE IF AT(",",aDados[nP,13]) = 0 oCpo:pontoc := aDados[nP,13] ELSE oCpo:pontoc := STRTRAN(aDados[nP,13],",",".") ENDIF ENDIF Else oCpo:pontoc := '0' Endif If !empty(aDados[nP,14]) IF VALTYPE(aDados[nP,14]) = "N" oCpo:pontog := aDados[nP,14] ELSE IF AT(",",aDados[nP,14]) = 0 oCpo:pontog := aDados[nP,14] ELSE oCpo:pontog := STRTRAN(aDados[nP,14],",",".") ENDIF ENDIF Else oCpo:pontog := '0' Endif If !empty(aDados[nP,15]) IF VALTYPE(aDados[nP,15]) = "N" oCpo:valor := aDados[nP,15] ELSE IF AT(",",aDados[nP,15]) = 0 oCpo:valor := aDados[nP,15] ELSE oCpo:valor := STRTRAN(aDados[nP,15],",",".") ENDIF ENDIF Else oCpo:valor := '0' Endif //-> Título da obra If !empty(aDados[nP,16]) If alltrim(aDados[nP,16]) = "-" oCpo:titulo := space(1) Else oCpo:titulo := alltrim(aDados[nP,16]) Endif Else oCpo:titulo := space(1) Endif //-> Nome da Cidade If !empty(aDados[nP,17]) If alltrim(aDados[nP,17]) = "-" oCpo:localidade := space(1) Else oCpo:localidade := alltrim(aDados[nP,17]) Endif Else oCpo:localidade := space(1) Endif //-> CNL If !empty(aDados[nP,19]) If VALTYPE(aDados[nP,19]) = "N" oCpo:cnl := alltrim(STR(aDados[nP,19],0)) Else If alltrim(aDados[nP,19]) = "-" oCpo:cnl := space(1) Else oCpo:cnl := alltrim(aDados[nP,19]) Endif Endif Else oCpo:cnl := space(1) Endif //-> Nome da Central (Invertido para pegar o CNL pronto) cBase := (oCpo:escritorio+oCpo:estacao+oCpo:cnl) If !MBase(oCpo,aBases,cBase) oCpo:gis := space(4) oCpo:base := space(15) oCpo:central := space(30) Endif cBase := "" //-> Endereço If !empty(aDados[nP,20]) if VALTYPE(aDados[nP,20]) = "N" if aDados[nP,20] = "-" oCpo:endereco := space(1) else oCpo:endereco := aDados[nP,20] endif else If alltrim(aDados[nP,20]) = "-" oCpo:endereco := space(1) Else oCpo:endereco := alltrim(aDados[nP,20]) Endif endif Else oCpo:endereco := space(1) Endif //-> Observações oCpo:historico := "" //-> Limpando variável antes de ler a coluna If !empty(aDados[nP,21]) If alltrim(aDados[nP,21]) = "-" oCpo:historico := "" Else oCpo:historico := alltrim(aDados[nP,21]) Endif Else oCpo:historico := "" Endif lError := 0 //-> Padrão é erro zero se houver algum problema modifica na funçao MPasta() antes de gravar If !GravaObra(oCpo,aDados,aBPastas,@lError) If lError = 1 aAdd(aFalhas,{alltrim(STR(aDados[nP,1],0)),"Duplicidade de pasta"} ) Elseif lError = 2 aAdd(aFalhas,{alltrim(STR(aDados[nP,1],0)),"Erro de gravação"} ) Endif loop Endif oMet[2]:Set(nReg) oMet[2]:cText:="Obra Nº "+ Strzero(nReg,6)+" de "+Strzero(nDados,6)+" Gravado Pasta: "+oCpo:pasta +SPACE(10) oMet[2]:Refresh() nReg++ Next cursorarrow() lHoraFim := Time() cTempo := ElapTime(lHoraInicio,lHoraFim) nFalhas := Len(aFalhas) If nFalhas > 0 oCpo:processo := "Importação concluída - Tempo: "+cTempo oMet[3]:SetText(oCpo:processo) If !MsgYesNo("Não foram importadas "+strzero(nFalhas,4)+" pastas, deseja verificar (S/N) ?"+CRLF+; "Tempo Decorrido: "+cTempo,"Atenção") return(nil) Endif ListaFalhas(aFalhas) Else oCpo:processo := "Importação concluída com sucessco - Tempo: "+cTempo oMet[3]:SetText(oCpo:processo) Endif GbFoco(oMet[5]) return(nil) STATIC Procedure ListaFalhas(aFalhas) local oWnd,oBrw,oFont,nFont,oHand,oIco,oDlg,oFalha[4],oSay local nF,nFalhas := Len(aFalhas) local lAviso := "Botão Direito = Menu Suspenso" DEFINE FONT nFont NAME "Ms Sans Serif" SIZE 0,-10 DEFINE FONT oFont NAME "Time New Roman" SIZE 0,14 BOLD DEFINE CURSOR oHand RESOURCE "Dedo" DEFINE ICON OICO RESOURCE "MONEY" DEFINE DIALOG oDlg RESOURCE "TELA01" OF oDlg ; ICON oIco TITLE "Obras não Importadas" oDlg:lHelpIcon := .F. ********************************************************************************** oBrw := TXBrowse():New( oDlg ) oBrw:CreateFromResource( 601 ) //--> Chamada ao Resource Browse. oBrw:nMarqueeStyle := MARQSTYLE_HIGHLROW //--> Estilo da barra de seleçao. //HBLUE oBrw:bClrSelFocus := {|| { CLR_BRANCO, CLR_HRED } } //--> Cor da barra de seleçao. oBrw:SetArray(aFalhas) oBrw:aCols[1]:cHeader := "PASTA" oBrw:aCols[1]:nDataStrAlign := AL_LEFT oBrw:aCols[1]:nHeadStrAlign := AL_LEFT oBrw:aCols[2]:cHeader := "OBSERVAÇÃO" oBrw:aCols[2]:nDataStrAlign := AL_LEFT oBrw:aCols[2]:nHeadStrAlign := AL_LEFT GbColuna(oBrw,{10,50 }) oBrw:bRclicked :={ |nRow,nCol| PopUp(,,aFalhas[oBrw:nArrayAt,1],aFalhas,oBrw,nRow,nCol,oWnd,oBrw,.f.,.f.) } oBrw:nStretchCol := STRETCHCOL_LAST oBrw:refresh() ********************************************************************************** REDEFINE SAY oSay VAR lAviso ID 501 OF oDlg ; FONT oFont COLORS CLR_HRED,CLR_LGREEN REDEFINE SBUTTON oFalha[1] RESOURCE "FECHAR" PROMPT "Fechar" ID 701 OF oDlg ; ACTION( oDlg:End() ) TOOLTIP "Fecha tela" ACTIVATE DIALOG oDlg CENTERED GbDlg(oDlg) return nil STATIC function GravaObra(oCpo,aDados,aBPastas,lError) Local cMsg,cLog,cCmd,oPasta,lstatus := '00' //-> Verifica se já existe pasta cadastrada (Usando Ascan() ) If !MPasta(aBPastas,oCpo:grupo_acq) lError := 1 return(.f.) Endif TRY if !GbInsert("cad_obras",{ {"pasta",oCpo:codigo},; {"id_empresa",oCpo:id_empresa},; {"id_contrato",oCpo:id_contrato},; {"zona",oCpo:zona},; {"es",oCpo:escritorio},; {"at",oCpo:estacao},; {"id_servico",oCpo:id_servico},; {"m_obra",oCpo:m_obra},; {"periodo",oCpo:periodo},; {"pep",oCpo:pep},; {"gerobras",oCpo:gerobras},; {"projeto",oCpo:projeto},; {"pontol",oCpo:pontol},; {"pontoc",oCpo:pontoc},; {"pontog",oCpo:pontog},; {"valor",oCpo:valor},; {"tipo",oCpo:tipo},; {"status",lStatus},; {"localidade",left(Aspas(oCpo:localidade),30)},; {"central",left(Aspas(oCpo:central),30)},; {"cnl",oCpo:cnl},; {"endereco",left(Aspas(oCpo:endereco),50)},; {"titulo",left(Aspas(oCpo:titulo),50)},; {"gis",oCpo:gis},; {"base",oCpo:base},; {"grupo_acq",oCpo:grupo_acq} } ) cMsg := "Erro ao gravar amostra (Tabela Cad_Obras) - Pasta: "+oCpo:codigo BREAK endif If !empty(oCpo:historico) if !GbInsert("obs_obras",{ {"pasta",oCpo:codigo},{"historico",Aspas(oCpo:historico)} } ) cMsg := "Erro ao histórico da obra" BREAK endif Endif CATCH GbRollBack() GbErro(cMsg) return(.f.) END GbCommit() return(.t.)
  15. Só complementando você perguntar ao próprio desenvolvedor Daniel Garcia. http://tdolphin.blogspot.com.br/
×
×
  • Create New...