Ir para conteúdo
Fórum Script Brasil

paulobergo

Membros
  • Total de itens

    295
  • Registro em

  • Última visita

Tudo que paulobergo postou

  1. Puxa... fico tão preocupado em otimizar as queries que me esqueço de outros recursos... Realmente, uma tabela temporária é uma boa idéia... mas não para a situação específica, que a verificação de modificação de dados na tabela precisa ser feita --sempre--. Também recebi uma sugestão de criar um campo varchar(32) para conter o MD5 com o "valor" (concatenado) de todos os outros campos que precisam ser monitorados... até sonhei que no MySQL eu pudesse fazer isso: update estoque set saldo=saldo+10, data_ult_operacao=now(), campomd5 = md5(saldo, data_ult_operacao) where codigo="78920240"; Assim, caso alguém fizesse qualquer alteração nos campos saldo e data_ult_operacao, fora da aplicação (pelo Prompt, DBExplorer, PHPMyAdmin, etc...), eu conseguiria identificar, comparando o MD5 do campo "campomd5" com o MD5 do conteudo modificado... E ainda vou tentar criar esta função, assim que tiver mais tempo... Quanto à tabela temporária, vou sim implementá-la e ver se funciona melhor do que com a trigger... De Qualquer forma, Grato! Abraços!
  2. Claro! claro! é isso mesmo!!!! Tinha que usar "set" mesmo... Funcionou certíssimo... Agora, ainda apareceu mais uma dúvida... Tem jeito de criar uma variável em tempo de execução na query de update que possa ser "lida" pela trigger? Tenho que usar duas queries no momento: uma para definir a variável e outra para a query propriamente dita... Isso, já funciona: Quero fazer um update em um campo na tabela e quero que a trigger atualize ou não outro campo. A trigger é esta: delimiter | create trigger estoque_upd before update on estoque for each row begin if ((old.codigo!=new.codigo)or(old.nome!=new.nome))&&(@fix=1) then set new.flag=1; set new.modificado=now(); end if; end; | delimiter; Quando faço: set @fix=0; e em seguida: update estoque set nome="hellmanns light", preço=2.40, codigo="7894000050737", compra="2010/07/19" where codigo="7898905153289"; O produto tem seu nome e codigo alterados, mas o campo "flag" e o campo "modificado" permanecem intalterados. Mas, se fizer: set @fix=1; e em seguida: update estoque set nome="hellmanns light", preço=2.40, codigo="7894000050737", compra="2010/07/19" where codigo="7898905153289"; O produto tem seu nome e codigo alterados, e também o campo "flag" e o campo "modificado" atualizados. Daí, queria juntar as queries numa só... algo como: update estoque set @fix=1, nome="hellmanns light", preço=2.40, codigo="7894000050737", compra="2010/07/19" where codigo="7898905153289"; Mas dá erro... Consigo, fazendo isso, para definir a variável fix=1: update estoque set unidade = if(@fix := 1, unidade, unidade), nome="TIC TAC TUTTI-FRUTTI" where codigo="7892024041011"; Ou para definir a variável fix=0: update estoque set unidade = if(@fix := 0, unidade, unidade), nome="TIC TAC TUTTI-FRUTTI" where codigo="7892024041011"; Mas creio que haja um método mais "bonito"... De qualquer forma, mais uma vez, grato por qualquer ajuda! Abraços!
  3. Olá pessoal... Já quebrei a cabeça para fazer algo que identifique alterações em determinados campos em uma tabela... Explicando melhor, tenho uma tabela assim: CREATE TABLE `teste`.`compra` ( `idcompra` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, `codigo` VARCHAR(14) NOT NULL DEFAULT 'codigoean?', `nome` VARCHAR(40) NOT NULL DEFAULT 'descriçao?', `unidade` VARCHAR(3) NOT NULL DEFAULT 'un?', `saldo` DECIMAL(10,2) NOT NULL DEFAULT 0, `preço` DECIMAL(10,2) NOT NULL DEFAULT 0, `pedir` TINYINT UNSIGNED NOT NULL DEFAULT 0, `flag` VARCHAR(4) NOT NULL DEFAULT '0000', PRIMARY KEY (`idteste`) ) ENGINE = InnoDB; Bom... o que eu preciso é de algo como um evento automático controlado pelo próprio MySQL que: a) quando crio um registro, automaticamente o campo `flag` é "setado" para '0000'; B) se eu alterar o codigo de um produto, o primeiro "bit" do campo flag passa a ser "1"... mas só se realmente o conteúdo for modificado... isto é... se o campo continha "78928201" e eu fizer um 'update `compra` set codigo="78928201';" sei que o proprio MySQL não efetuará a operação... c) se eu alterar o nome, o segundo "bit" passa para "1" e assim por diante... ou seja, se eu quiser saber se um campo, dentre estes quatro, sofreu alteração, basta olhar o campo flag... Pensei em algo assim, que seria executado pelo próprio MySQL antes ou após um update na tabela: delimiter | create trigger teste_upd after update on teste for each row begin if (old.codigo!=new.codigo) then update teste set flag=concat('1', substring(flag, 2, 3)); end if; end; | delimiter; Mas... como implementá-la? quando tento fazer um update (update teste set codigo="39393";), aparece uma mensagem de erro... can't update table 'teste' in stored funcion/trigger because it is already used by statement which invoked this stored function/trigger. Grato por qualquer ajuda!!! Abraços!
  4. Bem pessoal... Resolvida a parada... Foi preciso o administrador do servidor de email da corporação "permitir" ao meu PC enviar emails também... isto é, minha máquina, a "p0392893@marte.mg.gov.br" foi acrescentada à lista de "servidores de email confiáveis"... Não sei como ele fez isso, nem qual o SO nem programa de correio instalado... quando souber, posto aqui... De qualquer forma, grato! Abraços! Em tempo... ficou valendo para o PHP a instalação do PostFix+Mail+Mailx... :P :P :P Então, Resolvido!!!
  5. Grato pela atenção... Mas veja... o problema não é no PHP e sim no sendmail do Linux... O php.ini não requer nenhuma alteração.. porém, quando seu site em PHP está no Linux, a função mail acaba usando o programa sendmail... E é com ele o problema... Então, caso alguém tenha alguma idéia de outra forma de enviar emails pelo PHP em computadores com o Linux (Ubuntu 10.04 p.exemplo), e que não dependam de que o servidor de email da empresa possa estar em outra máquina da rede, então é isso que eu preciso... Grato por qualquer dica! Abraços
  6. Ver o último cliente cadastrado, independentemente de qual usuário tenha feito esse cadastro: select * from cliente where idcliente=(select max(idcliente) from cliente); Ver o penúltimo cliente cadastrado, independentemente de qual usuário tenha feito esse cadastro: select * from cliente where idcliente=(select max(idcliente) from cliente)-1; Ok? Espero ter ajudado!
  7. Olá... Acabei de instalar a mesma versão (embora não saiba se é beta ou não...). O que aparece com um uname -a é: Linux pmachine 2.6.32-22-generic-pae #33-Ubuntu SMP Wed Apr 28 14:57:29 UTC 2010 i686 GNU/Linux e usei uma cópia hospedada na UFPR... Está funcionando bem (exceto por outros problemas que irei até citar aqui para ver se consigo alguma solução)... Bom... quanto ao Ubuntu, já me aconteceu o seguinte: - Para instalar a 9.04 em uma máquina, só deu certo a partir do ubuntu totalmente carregado no modo "direto do cd"... - Ao tentar atualizar da 9.04 para a atual, meu segundo monitor não foi reconhecido e os dois não conseguiam ser rotacionados (uso dois monitores iguais na vertical)... a solução foi instalar do zero... - Na versão atual, o login vem antes da rotação do vídeo.... como a máquina fica ligada direto, isto não causa grandes problemas... Ok? Espero ter ajudado!
  8. Olá pessoal... Bom... recebi, onde trabalho, um novo computador e, em troca de instalar o Ubuntu numa VBox dentro do XP, resolvi detonar o Windows7 original da máquina e instalar o Ubuntu (10.04) e um XP numa VBox... Até aí, tudo bem... configurei a máquina toda com o gerenciador de instalações e foi tudo bem (exceto alguns caracteres trocadas nos bancos importados no MySQL) mas, principalmente, a função mail do PHP não funciona de jeito nenhum no Ubuntu/Apache2/PHP5... O código PHP original enquanto hospedado no XP+IIS+PHP5 é simples... um exemplo: ini_set('SMTP', 'smtp.marte.mg.gov.br'); $to = 'joao@ig.com.br'; $subject = 'Atribuição de Tarefa em Projeto'; $msg = 'Olá. Queremos informá-lo(a) sobre a designação de tarefa.'; $from = "From: <paulobergo@marte.mg.gov.br>"; mail($to, $subject, $msg, $from); Em todas as páginas, quando é preciso enviar um email, apenas uso o código como visto acima... e não foi preciso configurar nada na máquina, nem no PHP.INI, IIS, etc... e sempre funcionou... O servidor de email (smtp.marte.mg.gov.br) fica em outra máquina na rede... meu computador antigo, assim como o novo, obtém o IP via outro servidor DHCP, e nunca precisou de nenhum esquema ou permissão especial para enviar email pelo meu código em PHP... No entanto, ao mudar os sites para o Apache/Linux, a função deixou de funcionar... Muitos colegas "especialistas" em Linux deram, é claro, sua opinião, desde a condenar o Ubuntu, o Sendmail, postfix pra lá, mail pra cá e nada de descobrir porque não funciona... e configura arquivo .fc, .conf, apt-get nisso, apt-get naquilo, e nada... creio que por falta de saber como realmente o PHP funciona ou do que ele precisa na hora de enviar emails... Então, gostaria de saber se alguém já passou por isso e se saberia exatamente o que precisa ser configurado no Linux para que a função mail funcione... Grato! Abraços!
  9. Olá pessoal... No código a seguir: $sql = 'update cadastro '; $sql = $sql.'set reavaliar=1, reavaliar_data="'.$sqldata4prog.'" '; $sql = $sql.'where reavaliar=0 '; $sql = $sql.' and passelivre_cancelado=0 '; $sql = $sql.' and deficiencia_codigo='.$iddeficiencia.' '; $sql = $sql.'limit '.$qtde_pessoas.'; '; $result = mysql_query($sql, $base); $linhas = mysql_affected_rows($base); Exemplo: update cadastro set reavaliar=1, reavaliar_data="2010/03/21" where reavaliar=0 and passelivre_cancelado=0 and deficiencia_codigo=4 limit 30; no programa php, $linhas receber sempre 1 (como se estivesse retornando um "ok" - a query executou corretamente), em troca da quantidade de registros processados... Para que tenham uma idéia, a mesma query do exemplo, executada no próprio prompt do MySQL, ou em algum cliente, como o DBExplorer via ODBC, retorna 30 rows affected... O problema é só no código em PHP... alguma idéia? Grato! Abraços!
  10. Olá... Veja... eu continuo com o Kurumin, porém versão 7... Agora, também baixei e gravei um cd com o Ubuntu e fiz três instalações dele, sendo duas em máquina virual (Virtual Box da Sun, dentro de WindowsXP) e uma diretamente no hd... Numa das VirtualBoxes, não consegui instalar o Ubuntu diretamente ao fazer o boot e escolhendo a instalação... foi preciso primeiro iniciar o computador (o virtual) com o Ubuntu "rodando" diretamente no cd e depois, já com ele ativado, fazer a instalação no hd... aí, deu tudo certo... Então, se você for instalar diretamente no hd, talvez deva escolher, primeiro, usá-lo tal qual o Kurumin (é a primeira opção na tela de inicialização, algo como "testar sem modificar nada no computador")... e aí, depois dele já funcionando pelo cd, escolher a opção de instalar no hd... A versão 9.04 até agora me pareceu completamente estável, tal como o Kurumin7, que ainda mantenho... Aprecie o Linux... vale a pena tentar! Abraços!
  11. Olá pessoal! Desculpa a demora... mas consegui instalar o Code::Blocks sim... precisou atualizar o Kurumin completamente e ele (o Kurumin7), infelizmente, deixou de inicializar depois de já estar atualizado e funcionando... aí... cinco horas depois da "última desligada"... não inicializou mais... Bom... aí a solução foi instalar o Kurumin7 do zero e reinstalar o básico que funcionava antes (Apache2, Mysql, PHP, PHPMyAdmin, Proftp), deixando de lado o Code::Blocks e o Firefox3... Aí, peguei outra máquina (um athlon 2200 com 1gigaRAM) e instalei o Ubuntu 9.04, e, nele, já instalei o os mesmos programas e, ainda, o NetBeans, MySQL Administrator e o Code::Blocks, tudo pelo Synaptic, sem - até agora - reportar problemas como gtk desatualizado, etc, etc... Ainda não migrei os dados do Kurumin para ele... percebo uma velocidade maior na rede (Internet e no MySQL) no Kurumin... mas nada alarmante, que me faça colocar de lado o Ubuntu agora... Depois, irei novamente atualizar o Kurumin e, caso se repitam as falhas na inicialização depois de tudo atualizado e funcionando, posto a tela em outra mensagem...
  12. Olá pessoal... Tenho uma planilha com apenas duas colunas... Assim: +------------+----------+ |Area Isotima|Quantidade| +------------+----------+ | AD200 | 200 | | AD201 | 123 | | AE442 | 1020 | | AX451 | 400 | . . . . | ZR399 | 340 | +------------+----------+ Como a planilha tem aproximadamente 4500 linhas, ao fazer a impressao apenas a parte esquerda das folhas é usada... Então, gostaria de saber se alguém conhece uma forma de fazer a impressão de forma que o Excel (ou o BrOffice) conseguisse continuar a impressao até encher horizontalmente a página... É como se eu pudesse criar uma "subpágina" interna na página... Alguma idéia? Grato! Abraços!
  13. Olá pessoal... eu e o Linux... Seguinte... Tem algum comando ou programa no Linux equivalente ao MsInfo32 do XP? (para ver as características do hardware, sistema operacional, etc...)? Grato! Abraços!
  14. Olá! Grato pela dica! Fiz uma bateria do "certificacaolinux" e acertei 20% (as questões básices e de uso geral)... as demais foram questões mais avançadas, sobre funções que não uso no dia-a-dia e outras que nem sabia que existiam... Os testes são uma excelente fonte para direcionar os estudos... Grato! Abraços!
  15. Olá pessoal... De novo, com o Linux... Tenho o Code::Blocks no XP e gostaria também de instalar a versão para o Linux... No caso, como uso o Kurumin7, qual seria o pacote correto? No site estão disponíveis: - Ubuntu: codeblocks_8.02-0ubuntu1.deb.tar.gz - Debian: codeblocks-8.02debian-i386.tar.gz (inclusive baixei este mas não tenho idéia do que fazer com os arquivos .deb) - Fedora: codeblocks-8.02-0fc8-i586.tar.gz - Suse: codeblocks-8.02-0suse102-i586.tar.gz - Suse: codeblocks-8.02-0suse103-i586.tar.gz Mais uma vez, muito grato por qualquer dica! Abraços!
  16. Olá pessoal... Seguinte... Domingo irei fazer uma prova prática laborátorio de computação, que inclui o seguinte: «Redes de computadores (configuração) «Hardware (processador placa mãe, periféricos) «Sistema Operacional Linux (estrutura, comandos) «Pacote de Escritório: Microsoft Office / OpenOffice. «Programação C/C++ (IDE utilizada Code::Blocks. De Linux, sou usuário do Kurumin7 (Mysql/PHP4/Apache2) e gostaria de pedir aos colegas aí que fizessem algumas perguntas para que eu pudesse, mais ou menos, direcionar um pouco de estudo... Algo assim... se você tivesse que elaborar algumas questões para aplicar em um teste por um técnico em matéria de Linux, quais seriam...? Grato por qualquer colaboração! Abraços!
  17. Olá pessoal... Seguinte... Minhas aplicações Delphi+MySQL+ODBC/Zeus, na maioria das queries, salvam uma cópia da query na pasta c:\temp, como neste exemplo: . . . ClientesQuery.SQL.SaveToFile('c:\temp\clientes_rel_cnpj_cpf_cnae_simples_nacional.sql'); ClientesQuery.Open; . . . Gostaria de saber como incluir a referência para o arquivo salvo na pasta "Documentos Recentes"... assim poderia ter acesso ao código da query mais rapidamente... No entanto, não consegui descobrir onde fica a pasta "Documentos Recentes"... Alguma idéia? Grato! Abraços...
  18. paulobergo

    Diretorio Mysql

    Olá... Parece que você não conhece nada do MySQL ou de outro gerenciador de banco de dados "orientado" a SQL, como Oracle, MS SQLServer, PostGreSQL, Firebird, etc... não é? Não criamos pastas... criamos bancos de dados ou, no MySQL, catálogos... e eles podem até mesmo ficar em pastas... mas não é digitando md acme pelo Prompt do MsDos, na pasta de dados do servidor MySQL, que irá criar o catálogo (no qual ficarão nossas tabelas)... Você terá que aprender a usar o próprio console do MySQL ou um outro sistema de acesso ao servidor, cmo PHPMyAdmin, o MySQLAdministrator, etc... Aí, sugiro que você leia a documentação de ajuda do próprio MySQL e/ou siga os inúmeros tutoriais disponíbilizados para isso... Ok?
  19. paulobergo

    Diretorio Mysql

    Olá. Bom... eu nunca instalo o MySQL com a pasta "default" que, se não me falhe a memória, é a pasta "DATA"... Sempre coloco a pasta de dados em outra unidade... Assim: Base Directory: C:\Arquivos de Programas\MySQL\MySQL Server 5.0 Data Directory: G:\MySQL Datafiles Creio que na instalação padrão seria: Base Directory: C:\Arquivos de Programas\MySQL\MySQL Server 5.0 Data Directory: C:\Arquivos de Programas\MySQL\MySQL Server 5.0\Data Então, você deve verificar se existe a pasta Data... ou, caso seja uma reinstalação, os dados estejam em outro diretório. Para conferir, dê também uma olhada no arquivo my.ini Procure por: #Path to installation directory. All paths are usually resolved relative to this. basedir="C:/Arquivos de programas/MySQL/MySQL Server 5.0/" #Path to the database root datadir=G:/MySQL Datafiles Ok? Espero ter ajudado...
  20. Tem Crie um campo "ordinal" virtualmente... daí, use a função mod. Se você quer o registro 1, 4, 7, 10... use (ordinal-1) mod 3 Veja o exemplo: select * from (select if((@row is null), @row := 1, @row := @row+1 ) as Ordinal, idcadastro, nome, sobrenome from (select * from cadastro order by nome, sobrenome ) as parte3 union select * from (select @row := 0 as Ordinal, 0 as idcadastro, "" as nome, "" as sobrenome limit 1 ) as parte2 where (1=0) ) as parte1 where (ordinal-1) mod 3 = 0 * O truque ao usar a query alí após "union" é para sempre "zerar" o contador a cada consulta... Ok? Espero haver ajudado...
  21. Olá... Bom... coloquei as funções para mostrar o que se pode fazer com funções do próprio MySQL. Se você ainda não o fez, instale a ajuda do MySQL e use-a como referência. Um resumo breve das funções utilizadas: day(): retorna o dia (o número) de uma data. date(): retorna a data (dia/mês/ano) de uma data (pois now() retorna um conteúdo tipo "timestamp", isto é, data e hora... com date(), obtemos somente a parte da data mesmo. dayofweek(): retorna o dia da semana (o número), sendo 1=domingo, 2=segunda-feira, etc... now(): retorna a data e hora atuais do servidor. if(): retorna um conteúdo dependendo de uma condição lógica. date_add(): retorna uma data acrescida de uma determinada quantidade de dias, meses, anos. Na query, basicamente, subtraio uma quantidade X de dias, se o dia da semana em que estamos é maior do que 2 - ou seja, a segunda feira, e incremento em um dia, caso hoje seja domingo e, claro, se hoje for segunda-feira, nem subtraio nem incremtento. Então... para saber que data foi na segunda passada, sabemos que, se hoje é quarta, temos que subtrair dois, se hoje é terça, subtrair um, se hoje fosse a própria segunda não subtraimos ou incrementamos, e assim por diante... Veja que, se hoje fosse domingo, teriamos que subtrair 6 (usar -6 onde está +1)... coloquei o +1 para exemplificar como obteríamos a próxima segunda-feira, ao invés da segunda-feira passada. Quanto à função date_add, observe que ela precisa de vários parâmetros. Imagine precisar saber em que data vai cair um vencimento contando 121 dias de hoje... é onde usamos a função. Veja: select date(now()), date_add(now(), interval 121 day) 02/09/2009 01/01/2010 17:00:05 E se fossem 60 meses? date_add(now(), interval 60 month) Veja: select date(now()), date_add(now(), interval 60 month); 02/09/2009 02/09/2014 17:08:09 Observe: select date(now()), date_add(now(), interval 365 day), date_add(now(), interval 1 year); 02/09/2009 02/09/2010 17:12:52 02/09/2010 17:12:52 Ok?
  22. Olá. Veja o seguinte exemplo: select if(dayofweek(now())=1, "domingo", if(dayofweek(now())=2, "segunda", if(dayofweek(now())=3, "terça", if(dayofweek(now())=4, "quarta", if(dayofweek(now())=5, "quinta", if(dayofweek(now())=6, "sexta", "sábado")))))) as dia_de_hoje, date(now()) as hoje_eh, if(dayofweek(now())=1, +1, if(dayofweek(now())=2, +0, if(dayofweek(now())=3, -1, if(dayofweek(now())=4, -2, if(dayofweek(now())=5, -3, if(dayofweek(now())=6, -4, -5)))))) as dias_menos, date(date_add(now(), interval if(dayofweek(now())=1, +1, if(dayofweek(now())=2, +0, if(dayofweek(now())=3, -1, if(dayofweek(now())=4, -2, if(dayofweek(now())=5, -3, if(dayofweek(now())=6, -4, -5)))))) day)) as nivers_de from users Note que, para saber os aniversariantes desta segunda-feira, preciso olhar dois dias atrás, já que hoje é quarta... Caso quisesse os de sábado, deveria "somar" 3 à data de hoje, para obter o sábado... Então: select nome, data_nasc from users where day(data_nasc)=day(date(date_add(now(), interval if(dayofweek(now())=1, +1, if(dayofweek(now())=2, +0, if(dayofweek(now())=3, -1, if(dayofweek(now())=4, -2, if(dayofweek(now())=5, -3, if(dayofweek(now())=6, -4, -5)))))) day))) and month(data_nasc)=month(date(date_add(now(), interval if(dayofweek(now())=1, +1, if(dayofweek(now())=2, +0, if(dayofweek(now())=3, -1, if(dayofweek(now())=4, -2, if(dayofweek(now())=5, -3, if(dayofweek(now())=6, -4, -5)))))) day))) irá listar só os aniversariantes da segunda passada. Note que, do jeito que preparei a query, você obterá os aniversariantes da próxima segunda-feira, caso a execute no domingo. Ok? Espero haver ajudado...
  23. Olá! Valeu pela dica... Grato pela colaboração! Encontrei também outra solução... Editar o arquivo netbeans.conf em ..etc\ e incluir, nas opções "default" (netbeans_default_options=), ao final da linha: -Dfile.encoding=ISO-8859-1 E, claro... definir ISO-8859-1 nas propriedades do projeto... Grato! Abraços!
  24. Olá pessoal... Gostaria de fazer com que o código criado no Netbeans se mantivesse os acentos quando exibido nos navegadores... Escrevendo códigos com o Frontpage, Notepad, Winword ou BrOffice, EditPlus, etc... tanto os acentos como cedilha são exibidos corretamente nos browsers... já o que faço no NetBeans, não... E como é muito texto, muitos artigos, etc..., não dá para ficar usando os códigos dos caracteres... Tem como resolver isso? Grato! Abraços... Em tempo... uso o NetBeans 6.5.1... os sites ficam tanto em Linux/Apache como em XP ou 2003server com IIS ou Apache... Tudo que é feito no Linux com o VI ou Nano, no Windows com EditPlus, Frontpage, Word, BrOffice, Bloco de Notas, etc... fica beleza!... o furo é só no NetBeans mesmo...
×
×
  • Criar Novo...