Jump to content
Fivewin Brasil

Geraldo (gbsilva)

Membros
  • Posts

    1,495
  • Joined

  • Last visited

  • Days Won

    6

Everything posted by Geraldo (gbsilva)

  1. Everton se a sua sqllib for free acho que não funciona os comandos dbf, acho tá não tenho certeza.
  2. Judson e se voce fizer assim: //-> Pega resolução da tela nResHor := oWnd:nHorzRes() nResVer := oWnd:nVertRes() DEFINE WINDOW osii60 FROM 0,0 to nResHor, nResVer ; NO CAPTION ; BORDER NONE ; of ownd_principal ; BRUSH oBrush1 Sds,
  3. Luiz além do que disse o Evandro, fazer atribuição em linha no for/next não estaria errado? Eu faria assim: local cSql,cCmd local nVendas := len(aVendas), nClientes := len(aCliente) for i = 1 to nVendas j := 3 SQLBeginTrans() //-> Fiquei em dúvida porque iniciar essa transação aqui, eu não uso em select simples e se for //-> mesmo necessário deveria ser um só e não dois for y = 1 to nClientes cCmd := "select codigo from produto where nome ='"+aVendas[i,2]+"'" nTmp5 :=SqlArray(cCmd) if len(nTmp5)=0 nProd:='' else nProd:=nTmp5[1,1] endif cSql := "select qtd,vlr" cSql += " from pedido" cSql +=" where regiao='"+nGet[1]+"'" cSql +=" and data ="+Any2Sql(nGet[2]) cSql +=" and cliente ='"+aCliente[y,1]+"'" cSql +=" and produto ='"+nProd+"'" nTmp4 :=SqlArray(cSql) if len(nTmp4)>0 aVendas[i,j] := val(nTmp4[1,1]) aVendas[i,j+1] := val(nTmp4[1,2]) endif j = j+2 next SQLEndTrans() //-> como disse se for necessário só fecharia a transação aqui next
  4. Obrigado aos dois, testei e ambos funcionam. Ainda tenho mais algumas coisas a fazer e vou de precisar da ajuda de voces e de outros amigos aqui. Sds,
  5. Pessoal como faço para que a cor de fundo utilizando Folderex não fique apenas branco.
  6. Luiz não sei se entendi bem seu problema, eu já passei por várias situações ao ter de deletar linha na xbrowse com array. Abaixo uma função que uso para deletar uma linha no browse e um exemplo de chamada dentro de um for/next. Mesmo não sendo a solução quem sabe pode dar uma idéia do que voce precisa. For nT = 1 to nCart //-> Deleta do browse item marcado e diminui em 1 os contadores nT e nCart DelRowBrowse(oCart:aCartoes,oCart:aCartoes[nT,2],2,oBrw) nCart-- nT-- Next Function DelRowBrowse(Vetor,Item,nItem,oVetor) ************************************************************************************ * Função atualização xBrowse na exclusão de registros * Parâmetros: Vetor = Matriz * Item = Item a ser buscado dentro da matriz * nItem = Posição do Item carregado na matriz no browse (coluna) * oVetor = Objeto do browse * Retorno...: Nenhum * Chamada...: DelRowBrowse(aUsuarios,aUsuarios[oBrw:nArrayAt,1],1,oBrw) * Data......: 30/12/2010 ************************************************************************************ Local nRet,linha,nVetor nRet := Ascan(Vetor,{|aVal|aVal[nItem]=Item }) nVetor := Len(Vetor) Adel(Vetor,nRet) If nVetor > nRet aSize(Vetor,Len(Vetor)-1) Else //-> Se for o último registro volta 1 pois se não fizer assim dá erro de array oVetor:Skip(-1) aSize(Vetor,Len(Vetor)-1) Endif return(.t.)
  7. Dorneles veja este link. http://www.fivewin.com.br/forum/topic.asp?TOPIC_ID=20166 Pelo jeito o banco esta mesmo protegido por senha. Sds Geraldo B. Silva Fwh1202 Fev/2012, xHarbour 2.0, Bcc582, Pelles, xDev, Sqllib, Tdolphin e MySql. lucgera@terra.com.br São Paulo - SP
  8. Luiz acho que assim funciona. Fiz um IF() para testar o retorno. SELECT data_teste, DATE(now()), DATE_ADD(data_teste, INTERVAL 10 DAY), IF(DATE_ADD(data_teste,INTERVAL 10 DAY) < DATE(NOW()), 'Menor','Maior') AS Teste_Data FROM cad_obras ; id=code>id=code>Geraldo B. Silva Fwh1202 Fev/2012, xHarbour 2.0, Bcc582, Pelles, xDev, Sqllib, Tdolphin e MySql. lucgera@terra.com.br São Paulo - SP
  9. Elitenet abaixo uma rotina onde abro o access, jogo numa array e depois gero um relatório em excel. O Código não tá lá grande coisa, fiz apenas para uma necessidade específica, mas funciona. Local lZona:=space(8),lSegmento:=space(50),lEmpresa:="" Local cSql,aLista:={},conta_terminal:=0,soma_avaliacao:=0,conta:=0 Local lTerminal := space(8),lAta:=space(8),aTeste:={},hHoras:=space(5),Dia:="",lNoturno:="" local lAcq:=space(10),nAnoBase:=0,nMesBase:=0 local nDiasOcorridos := 0,cRetorno:="" // 1 2 3 4 5 6 7 cSql := "SELECT a.ano,a.mes,b.id,a.acq,a.data_fisc,b.DATA_APROVACAO,right(b.DATA_APROVACAO,8) as Oito " if oCpo:nTipo = 1 //-> Serviços cSql += " FROM tab_dados_acq_ext a INNER JOIN CAD_INF_ADIC b ON a.acq = b.ACQ " elseif oCpo:nTipo = 2 //-> Imagem e Segurança cSql += " FROM tab_dados_acq_ext_img_seg a INNER JOIN CAD_INF_ADIC b ON a.acq = b.ACQ " elseif oCpo:nTipo = 3 //-> Obras Implantação cSql += " FROM tab_dados_acq_ext_obras_imp a INNER JOIN CAD_INF_ADIC b ON a.acq = b.ACQ " elseif oCpo:nTipo = 4 //-> Obras Manutenção cSql += " FROM tab_dados_acq_ext_obras_man a INNER JOIN CAD_INF_ADIC b ON a.acq = b.ACQ " endif IF !empty(oCpo:n_acq) lAcq := oCpo:n_acq cSql += " WHERE a.acq = '"+lAcq+"' AND (a.status=5 OR a.status=11 ) AND b.data_aprovacao IS NOT NULL" ELSEIF !empty(oCpo:ano_base) .AND. !empty(oCpo:mes_base) IF val(oCpo:ano_base) = 0 .AND. val(oCpo:mes_base) = 0 GbMsg("Favor Digitar ano e mês para gerar relatório!",,2) return(nil) ENDIF nAnoBase := oCpo:ano_base nMesBase := oCpo:mes_base cSql += " WHERE a.ano='"+nAnoBase+"' AND a.mes='"+nMesBase+"' AND (a.status=5 OR a.status=11 ) AND b.data_aprovacao IS NOT NULL" ELSEIF !empty(oCpo:data_inicio) IF empty(oCpo:data_fim) oCpo:data_fim := date() ENDIF cSql += " WHERE a.data_fisc >='"+GbDatag(oCpo:data_inicio)+"' AND a.data_fisc <='"+GbDatag(oCpo:data_fim)+"' AND (a.status=5 OR a.status=11 ) AND b.data_aprovacao IS NOT NULL" ELSE GbMsg("Seleção Inválida, verifique!",,2) return(nil) ENDIF cSql += " GROUP BY a.ano,a.mes,b.id,a.acq,a.data_fisc,b.DATA_APROVACAO " cSql += " ORDER BY a.acq ; " oDbf := TDbOdbcDirect():new( cSql,oOdbc) oDbf:Open() oDbf:Gotop() //-> Testa se há serviços aprovados no período if oDbf:RecCount() = 0 oDbf:End() GbMsg("Nenhuma Serviço/Obra foi aprovado no período selecionado!",,2) LimpaTela(oCad) GbFoco(oCad[2]) return(nil) endif While !oDbf:Eof() nDiasCorrido := DiasUteis(oDbf:FieldGet(5),oDbf:FieldGet(6)) if oCpo:nTipo <= 2 IF nDiasCorrido > 2 cRetorno := "Perdido" ELSE cRetorno := "Ok" ENDIF elseif oCpo:nTipo > 2 IF nDiasCorrido > 10 cRetorno := "Perdido" ELSE cRetorno := "Ok" ENDIF endif TrataHora(oDbf:FieldGet(7),@hHoras) DiaSemana(oDbf:FieldGet(6),@Dia) if val(left(hHoras,2)) > 18 lNoturno := "Noturno" else lNoturno := "Diurno" endif aAdd(aLista,{oDbf:FieldGet(3),oDbf:FieldGet(4),oDbf:FieldGet(5),oDbf:FieldGet(6),hHoras,; Dia,lNoturno,nDiasCorrido,cRetorno } ) hHoras := space(5) Dia := "" lNoturno := "" nDiasCorrido := 0 cRetorno := "" oDbf:Skip() End oDbf:End() RelatorioExcel(aLista) return(nil) id=code>id=code>Geraldo B. Silva Fwh1202 Fev/2012, xHarbour 2.0, Bcc582, Pelles, xDev, Sqllib, Tdolphin e MySql. lucgera@terra.com.br São Paulo - SP
  10. Elitenet esse é um exemplo conectando ao access, voce chegou a testar a sua ODBC? #include "FiveWin.ch" #include "sql.ch" oOdbc := TOdbc():New("Amostra", " ", "") If !oOdbc:lSuccess oOdbc:ShowErrorList("ODBC session not successfully initialized, aborting...") oOdbc:End() return nil Else MsgWait("Aguarde conectando ao banco de dados!","Conexão",0.5) Endif id=code>id=code>No meu caso "Amostra" é o nome da ODBC e não tem usuário e senha se tiver tem que colocar como abaixo. oOdbc := TOdbc():New("odbc", "usuario", "senha") Sds, Geraldo B. Silva Fwh1202 Fev/2012, xHarbour 2.0, Bcc582, Pelles, xDev, Sqllib, Tdolphin e MySql. lucgera@terra.com.br São Paulo - SP
  11. Ana sei que resolveu, mas concordo com a maioria que não esta certo. Entendendo seu código voce procura um determinado valor e quer um while/end enquanto for isso no while ok. //-> IMPORTANTE: o índice é pelo mesmo campo que esta igualando a variável no while? Talvez pareça bobagem, mas há muito tempo eu usava bastante dbf e me lembro de fazer muito esse tipo de rotina, então lá vai. SET ORDER TO Ordem IF !DbSeek(variavel) ? "existe" ELSE ? "nao existe vou voltar" return(.f.) ENDIF //-> Se existe tem que entrar no while, mas vamos testar antes onde esta o ponteiro ? SeuDbf->(recno()) // acho que é isso né como disse não uso dbf há muito tempo // Iguale a a variável antes de entrar no while porque voce só quer o while da // variável certo? variável := SeuDbf->CampoDoBanco // Inverta a linha abaixo //DO WHILE !EOF() .AND. CampoDoBanco == Variavel DO WHILE variavel = CampoDoBanco .AND. SeuDbf->(!Eof() ) (...) SKIP ENDDO id=code>id=code>Sds, Geraldo B. Silva Fwh1202 Fev/2012, xHarbour 2.0, Bcc582, Pelles, xDev, Sqllib, Tdolphin e MySql. lucgera@terra.com.br São Paulo - SP
  12. Sérgio acho que o problema é na versão, pesquisei no forum internacional, mas também não achei solução. Estou no aguardo se o Gilmer saberia o que tem de fazer diferente nessas versões novas, pois deve estar faltando algo. Grato, Geraldo B. Silva Fwh1202 Fev/2012, xHarbour 2.0, Bcc582, Pelles, xDev, Sqllib, Tdolphin e MySql. lucgera@terra.com.br São Paulo - SP
  13. Pessoal como faço para alinhar a direita um valor no rodapé com a xBrowse. Tentei como abaixo, mas não funcionou. oBrw:aCols[7]:cFooter := TRANSFORM(oEdit:nSHoras,"@KE) 999.9") oBrw:aCols[7]:nFootStrAlign := AL_RIGHT Grato, Geraldo B. Silva Fwh1202 Fev/2012, xHarbour 2.0, Bcc582, Pelles, xDev, Sqllib, Tdolphin e MySql. lucgera@terra.com.br São Paulo - SP
  14. Pessoal como faço para alinhar a direita um valor no rodapé com a xBrowse. Tentei como abaixo, mas não funcionou. oBrw:aCols[7]:cFooter := TRANSFORM(oEdit:nSHoras,"@KE) 999.9") oBrw:aCols[7]:nFootStrAlign := AL_RIGHT Grato, Geraldo B. Silva Fwh1202 Fev/2012, xHarbour 2.0, Bcc582, Pelles, xDev, Sqllib, Tdolphin e MySql. lucgera@terra.com.br São Paulo - SP
  15. Eu tive um problema parecido e não conseguia entender, no meu caso travava apenas uma das tabelas e não gravava nada e dava estouro de tempo, passava um tempo ou reiniava o servidor do sistema e tudo voltava ao normal. Falei com o responsável do TI na empresa e ele fez não sei o que no servidor e desde então não tivemos mais problema. Ele é do tipo que diz que não havia nada de errado com o servidor, mas desde então não acontece mais. No seu caso também deve ser algo assim, pois só acontece num cliente. Sds, Geraldo B. Silva Fwh1202 Fev/2012, xHarbour 2.0, Bcc582, Pelles, xDev, Sqllib, Tdolphin e MySql. lucgera@terra.com.br São Paulo - SP
  16. Erciley peguei esse texto no manual do mysql, mas é por ai a coisa. Por padrão, MySQL é executado em modo autocommit. Isto significa que assim que você executa uma instrução que atualiza (modifica) uma tabela, o MySQL armaena a atualização no disco. Se você estiver usando tabelas com segurança a transação (como InnoDB \ ou BDB), você pode colocar o MySQL em modo não autocommit com o seguinte comando: SET AUTOCOMMIT=0 Depois de disabilitar o modo autocommit configurando a variável AUTOCOMMIT com zero, você deve utilizar COMMIT para armazenar suas alterações em disco ou ROLLBACK se você deseja ignorar as alterações que você fez desde o início da sua transação. Se você quiser disabilitar o modo autocommit para uma única série de instruções, você pode utiliar a instrução START TRANSACTION: START TRANSACTION; SELECT @A:=SUM(salary) FROM table1 WHERE type=1; UPDATE table2 SET summmary=@A WHERE type=1; COMMIT; Sds, Geraldo B. Silva Fwh1202 Fev/2012, xHarbour 2.0, Bcc582, Pelles, xDev, Sqllib, Tdolphin e MySql. lucgera@terra.com.br São Paulo - SP
  17. Luiz eu tive alias tenho esse problema e até hoje não resolvi num sistema que fiz para uma amiga com Fwh1202 depois que atualizei o meu. http://www.fivewin.com.br/forum/topic.asp?TOPIC_ID=20373 Até hoje não resolvi esse problema nesse meu caso uso DBF e se o campo for data não alinha a esquerda e o Gilmer não me respondeu esse dúvida. No meu caso usei dtoc(), pois o campo era só apresentação. Geraldo B. Silva Fwh1112 Novembro/2011, xHarbour 2.0, Bcc582, Pelles, xDev, Sqllib e MySql. lucgera@terra.com.br São Paulo - SP
  18. Luiz imagino que voce esteja usando um select para trazer esses dados para o browse. Eu trato o tipo de dado retornado pela SqlArray() antes de jogar no browse, não sei se vai resolver o seu caso, mas faço assim. //-> ao adicionar a array do browse trato os dados aAdd(::aDados,{aDados[n,1],; aDados[n,2],; aDados[n,3],; Gbdataf(aDados[n,4]),; Padr(aDados[n,6],5),; Padr(aDados[n,7],5),; Gbdataf(aDados[n,8]) } ) //-> Trata campo data na Sqllib retornado pela Sqllib com SqlArray() ou USE SQL Function GbDataf(_dData,_lDefault) local lNewDate DEFAULT _lDefault := .t. if _lDefault = .t. //-> data simples do sql aaa-mm-dd lNewDate := right(_dData,2)+"/"+substr(_dData,6,2)+"/"+left(_dData,4) else //-> campo data/time aaa-mm-dd hh:mm:ss lNewDate := substr(_dData,9,2)+"/"+substr(_dData,6,2)+"/"+left(_dData,4) endif if _dData = "01/01/0001" _dData := ctod("") else _dData := ctod(lNewDate) endif return(_dData) id=code>id=code>Geraldo B. Silva Fwh1112 Novembro/2011, xHarbour 2.0, Bcc582, Pelles, xDev, Sqllib e MySql. lucgera@terra.com.br São Paulo - SP
  19. Luiz como te disse via msn tem um amigo que manja bastante de sql, conversei com ele hoje e mostrei sua tela e dados e ele isso ai que voce postou sobre fazer um segundo select retornando apenas os totais, mas tudo é questão de ir testando as opções. Sds, Geraldo B. Silva Fwh1112 Novembro/2011, xHarbour 2.0, Bcc582, Pelles, xDev, Sqllib e MySql. lucgera@terra.com.br São Paulo - SP
  20. Poste parte do código, pois eu uso normalmente combobox com mysql. Geraldo B. Silva Fwh1112 Novembro/2011, xHarbour 2.0, Bcc582, Pelles, xDev, Sqllib e MySql. lucgera@terra.com.br São Paulo - SP
  21. Oi João sim tudo normal, mas a dica é para que como eu precisei ordenar um campo caractere e ficava como abaixo e essa foi uma ótima solução. Exemplo: 1 10 11 2 3 etc Ok sua solução esta correta no caso do Luiz. Sds, Geraldo B. Silva Fwh1112 Novembro/2011, xHarbour 2.0, Bcc582, Pelles, xDev, Sqllib e MySql. lucgera@terra.com.br São Paulo - SP
  22. Luiz e João sei que resolveu, mas tem situações que as vezes não podemos só alterar a ordem do campo, falo porque tive esse problema. Uma solução muito boa é usar a função CAST() e transformar campos caractere em númericos e ai a ordem fica belezinha. SELECT CAST(id_contrato AS UNSIGNED INTEGER) AS Ultimo,sap FROM contratos ORDER BY CAST(id_contrato AS UNSIGNED INTEGER); Nesse exemplo mostro 2 campos o campo id_contrato usado no order by é caractere e fazendo assim mostra corretamente. Sds, Geraldo B. Silva Fwh1112 Novembro/2011, xHarbour 2.0, Bcc582, Pelles, xDev, Sqllib e MySql. lucgera@terra.com.br São Paulo - SP
  23. Luiz acho que não é isso que voce quer, mas mesmo assim vai o que eu acho, só inclui no group by o sub-grupo. " COUNT(p.grupo)," +; " SUM(p.estoque)," +; " SUM(p.estoque*p.custo)," +; " SUM(p.estoque*p.valor)" +; " FROM produto as p LEFT JOIN grupo ON p.grupo = grupo.codigo " +; " GROUP BY concat(p.grupo,) ; " id=code>id=code>Sds, Geraldo B. Silva Fwh1112 Novembro/2011, xHarbour 2.0, Bcc582, Pelles, xDev, Sqllib e MySql. lucgera@terra.com.br São Paulo - SP
  24. Eric na mosca era isso mesmo. Muito obrigado. Sds, Geraldo B. Silva Fwh1112 Novembro/2011, xHarbour 2.0, Bcc582, Pelles, xDev, Sqllib e MySql. lucgera@terra.com.br São Paulo - SP
  25. Pessoal gostaria de alterar alguns fontes para compilar condicionalmente dependendo da rdd usando um .ch, mas não deu certo. Criei um config.ch e usando #define para a constante da rdd, mas no prg não reconhece. Veja abaixo defini como rdd_sqllib, mas ao tentar o #ifdef ele não acha e compila após o #else. Aonde estou errando? Grato, No prg esta assim: #include "config.ch" #ifdef rdd_sqllib #Include "sqllib.Ch" #Include "sqlerror.ch" #Include "sqlevents.ch" #else #include "tdolphin.ch" #endif Function Main() ... comandos ... comandos return Grato, Conteúdo do config.ch //-> Usando TDolphin //#define rdd_TDolphin //-> Usando Sqllib #define rdd_Sqllib Geraldo B. Silva Fwh1112 Novembro/2011, xHarbour 2.0, Bcc582, Pelles, xDev, Sqllib e MySql. lucgera@terra.com.br São Paulo - SP
×
×
  • Create New...