Ir para conteúdo
Fórum Script Brasil

Denis Courcy

Moderadores
  • Total de itens

    3.089
  • Registro em

  • Última visita

Tudo que Denis Courcy postou

  1. Denis Courcy

    MYSQL COMO SERVIDOR

    Crie um usuário do tipo nomeusuario@% para sua aplicação, com os direitos select, insert, delete e update. Se você precisar de tabelas temporárias vai ter que dar direitos de create table e drop table ( o que é perigoso). Este usuário é que vai acessar o banco. Os usuários do sistema vão passar por ele e serem autenticados depois conforme suas rotinas e tabelas. O termo @% é que dá acesso ao banco de qualquer ponto. Verifique se a porta 3306 é a utilizada pelo seu banco. Verifique se os firewalls das estações permitem a passagem por esta porta. Uma outra dica é manter o servidor com ip fixo. No caso do Windows eu chamo o servidor pelo nome e não pelo IP. Mas pode usar o IP, também.
  2. Mais uma vez venho solicitar ajuda de vocês para o controle de fluxo de minha aplicação. O omponente é o checkbox. Todas as vzes que aciono a seta para cima (vk_up), para que o controle passe para o componente anterior, ele passa primeiro por onExit antes de passar por OnkeyDown ou On KeyPress. Com isso não consigo determinar que tecla foi acionada. Isto não acontece com vk_return ou vk_escape. Mas acontece, também com [ssshift] vk_tab. Em anexo tem os fontes de uma aplicação exemplo onde isto ocorre. A pergunta que tenho é: Como determinar e controlar o fluxo de retorno com este componente. teste.rar
  3. Após o insert use o código abaixo SELECT LAST_INSERT_ID() FROM nomedatabela
  4. Denis Courcy

    CONSULTA SQL

    Faça assim: SELECT D.produto, D.modalidade, U.nome, U.cdc, U.consignado, U.consorcio, U.sms, U.limite_cartao, U.imagem, U.pa, U.prolabore, D.data FROM produtividade_diaria D LEFT JOIN usuarios U ON D.vendedor = U.id WHERE year(D.data) = '2015' and month(D.data) = '$mes' and U.pa = '$pa' and D.situacao = 'Efetivado' AND u.id IS NULL GROUP BY D.vendedor ORDER BY soma_total DESC LIMIT 100
  5. Denis Courcy

    CONSULTA SQL

    Faça assim: SELECT SUM(IF(D.modalidade = '14', 1, 0)) AS conta_limite, SUM(IF(D.modalidade = '15', 1, 0)) AS conta_cdc, SUM(IF(D.modalidade = '19', 1, 0)) AS conta_sms, SUM(IF(D.modalidade = '14', D.VALOR, 0) AS soma_limite, SUM(IF(D.modalidade = '15', D.VALOR, 0) AS soma_cdc, SUM(IF(D.modalidade = '19', D.VALOR, 0) AS soma_sms, SUM(IF(D.produto = '2', 1, 0) AS conta_consorcio, SUM(IF(D.produto = '4', 1, 0) AS conta_consignado, SUM(IF(D.produto = '1', 1, 0) AS conta_seguro, SUM(IF(D.produto = '2', D.VALOR, 0) AS soma_consorcio, SUM(IF(D.produto = '4', D.VALOR, 0) AS soma_consignado, SUM(IF(D.produto = '1', D.VALOR, 0) AS soma_seguro, SUM(IF(D.produto = '1', D.receita_coop, 0) AS soma_prolabore, SUM(D.receita_coop + D.valor) AS soma_total, D.produto, D.modalidade, U.nome, U.cdc, U.consignado, U.consorcio, U.sms, U.limite_cartao, U.imagem, U.pa, U.prolabore FROM produtividade_diaria D INNER JOIN usuarios U ON (D.vendedor = U.id) WHERE year(D.data) = '2015' and month(D.data) = '$mes' and U.pa = '$pa' and D.situacao = 'Efetivado' GROUP BY D.vendedor ORDER BY soma_total DESC LIMIT 100
  6. Entender a lógica é fácil. O LEFT JOIN pega todos os elementos do conjunto PEDIDOS, que está a esquerda do relacionamento, e os elementos do conjunto ESTOQUE que possuirem os mesmos PARES ORDENADOS. Representados, neste caso, pelos campos e.ref = p.ref AND p.cor = e.cor AND p.tamanho = e.tamanho Como você queria somente os elementos do conjunto PEDIDOS que NÃO ESTIVESSEM no conjunto estoque, bastou acrescentar uma condicional que informasse NULO para ESTOQUE. Neste caso a escolha óbvia foi testar o ID de ESTOQUE.
  7. Tente assim: SELECT p.ref, p.descricao, p.cor, p.tamanho, p.quant FROM pedido p LEFT JOIN estoque e ON e.ref = p.ref AND p.cor = e.cor AND p.tamanho = e.tamanho WHERE e.id IS NULL;
  8. Faça assim: SELECT p.ref, p.descricao, p.cor, p.tamanho, p.quant FROMpedido p LEFT JOIN estoque e ON e.ref = p.ref WHERE e.id IS NULL;
  9. Oi VolneyRock, você disse em seu primeito post Até aqui estou vendo você se debater como um peixe fora d'água.O que você quer é obter a relação dos pedidos que não estão no estoque? Se sim, poste, por gentileza, a estrutura das tabelas pedido e estoque. Não precisa conter todos os casmpos. Somente os necessários a esta pesquisa. Se não, informe o que você realmente quer e também poste a estrutura das tabelas conforme solicitado acima. Só assim poderei ajudá-lo corretamente.
  10. Obrigado. O teste passou. Mas preciso ter controle absoluto sobre o foco de cada elemento desta tela de minha aplicação. Vou aumentar o nível de dificuldade desta tela e, se houver mais dúvidas, postarei novamente.
  11. Você pode usar funões do MySQL para converter esta dada, mas ele deixará de ser tratada como data e será tratada como string. A função para iso é: DATE_FORMAT(data,formato) Formata o valor de data de acordo com a string formato string. Os seguintes identificadores podem ser utilizados na string formato: Specifier Description %M Nome do mês (January..December) %W Nome da semana (Sunday..Saturday) %D Dia do mês com sufixo Inglês (0th, 1st, 2nd, 3rd, etc.) %Y Ano, numerico, 4 digitos %y Ano, numerico, 2 digitos %X Ano para a semana onde o Domingo é o primeiro dia da semana, numerico, 4 digitos; usado com %V %x Ano para a semana onde a segunda é o primeiro dia da semana, numerico, 4 digitos; usado com %v %a Nome da semana abreviado (Sun..Sat) %d Dia do mês, numerico (00..31) %e Dia do mês, numerico (0..31) %m Mês, numerico (00..12) %c Mês, numerico (0..12) %b Nome do mês abreviado (Jan..Dec) %j Dia do ano (001..366) %H Hora (00..23) %k Hora (0..23) %h Hora (01..12) %I Hora (01..12) %l Hora (1..12) %i Minutos, numerico (00..59) %r Tempo, 12-horas (hh:mm:ss seguido por AM ou PM) %T Tempo, 24-horas (hh:mm:ss) %S Segundos (00..59) %s Segundos (00..59) %f Microsegundos (000000..999999) %p AM ou PM %w Dia da semana (0=Domingo..6=Sabado) %U Semana(00..53), onde o Domingo é o primeiro dia da semana. %u Semana(00..53), onde a Segunda é o primeiro dia da semana. %V Semana(01..53), onde o Domingo é o primeiro dia da semana; usado com %X %v Semana(01..53), onde a Segunda é o primeiro dia da semana; usado com %x %% Um literal ‘%’. Todos os outros caracteres são apenas copiados para o resultado, sem interpretação. O especificador dr formato %f está disponível a partir do MySQL 4.1.1. Como na versão 3.23 do MySQL, o caracter ‘%’ é exigido antes dos caracteres de especificação de formato. Em versões anteriores do MySQL ‘%’ era opcional. A razão para a faixa de valores do mês e do dia começarem com zero é que o MySQL permite datas incompletas tais como '2004-00-00' serem armazenadas no MySQL 3.23. mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y'); -> 'Saturday October 1997' mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00', '%H:%i:%s'); -> '22:23:00' mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00', '%D %y %a %d %m %b %j'); -> '4th 97 Sat 04 10 Oct 277' mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00', '%H %k %I %r %T %S %w'); -> '22 22 10 10:23:00 PM 22:23:00 00 6' mysql> SELECT DATE_FORMAT('1999-01-01', '%X %V'); -> '1998 52'
  12. Jhonas, O meu código estava procedure TForm1.Edit1Exit(Sender: TObject); begin if (not edit1.focused) and (not ComboBox1.Focused) then showmessage('deu caca'); {sempre passa aqui. O ComboBox1.Focused é sempre falso e com a negativa fica verdadeito passando por aqui, quando não deveria.} end; Você postou procedure TForm1.Edit1Exit(Sender: TObject); begin ComboBox1.SetFocus; end;Tente novamente com o meu código, por favor.
  13. Pessoal, uso Delphi 7 e estou com um problema para controlar o foco de entrada em um TCombobox. Fiz uma simulação a parte para verificar se o problema estava em minha aplicação, mas o problema persistiu. O problema é o seguinte: Se estou em um componente qualquer e tendo direcionar o foco para o Tcombobox ele simplesmente não aceta o foco. Se retiro a crítica na saída do componente que está dando a ordem, ele aceita. Se troco o Combobox por um edit ou outro componente, ele aceita. O que fazer? Poderiam me ajudar? procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin case key of vk_return, vk_tab: ComboBox1.SetFocus; end; end; procedure TForm1.Edit1Exit(Sender: TObject); begin if (not edit1.focused) and (not ComboBox1.Focused) then showmessage('deu caca'); {sempre passa aqui. O ComboBox1.Focused é sempre falso e com a negativa fica verdadeito passando por aqui, quando não deveria.} end;
  14. Por que em $cadastro = "INSERT INTO key_phrases('palavra','traducao') values('$ppp','$ttt')";Os campos palavra e traducao estão entre aspas?
  15. Quando se usa group by deve-se utilizar somente os campos que comporão o resultado. Nesta caso, o id, para que você pegue o maior utilizando a função max e o campo cliente que será utilizado pelo group by. Como você quer outros campos, então você vederá fazer um join deste consulta com esta nova que usa os outos campos. Veja abaixo: SELECT l1.id, l1.cliente, l1.ip, l1.data, l1.hora FROM lista l1 INNER JOIN (SELECT l2.cliente, MAX(l2.id) as maxid FROM lista l2 GROUP BY l2.cliente ) l3 ON l3.maxid = l1.id
  16. jogo_coment e idjogo devem ser do mesmo tipo e tamanho. Se houver algo diferente a conexão não é estabelecida.
  17. Esqueci de informar que pdsTAGs é uma string com uma lista de TAGs separados por virgulas e sem espaços entre elas.
  18. Você fará normalmente como em qualquer outra tabela com cabeçalho e item. (nota fiscal é um bom examplo) Em sua aplicação, no cadastro de vídeo, você colocará as tags que este video pertence. Na mesma transação de gravação dos dados do vídeo, você gravará os dados das tags O algorítimo seria pareciado com o abaixo: (normalmente eu realizo operações deste tipo através de STORAGE PROCEDURE, pois se abortar em algum ponto, nada é gravado. DELIMITER $$; DROP PROCEDURE IF EXISTS `sase`.`video_crud`$$ CREATE DEFINER=`root`@`localhost` PROCEDURE `video_crud`(IN pnmTituloVideo VARCHAR(50), IN pdsURLVideo VARCHAR(50), IN purlthumb VARCHAR(50), IN pdtUpLoad DATE, IN pduracaoDoVideo INTEGER, IN pdsTAGs VARCHAR(2000)) BEGIN DECLARE strInicial VARCHAR(4000); DECLARE strCampos VARCHAR(4000); DECLARE campo VARCHAR(255); DECLARE pidTAG INTEGER; DECLARE excessao SMALLINT DEFAULT 0; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET excessao = 1; IF {Aqui entra critica de validação de dados} THEN SELECT "Erro na passagem de parametros" AS Msg; ELSE START TRANSACTION; /*Inclusao de Video*/ IF excessao = 0 THEN INSERT INTO video(nmTituloVideo, dsURLVideo, urlthumb, dtUpLoad, duracaoDoVideo) VALUES(pnmTituloVideo, pdsURLVideo, purlthumb, pdtUpLoad, pduracaoDoVideo); IF excessao = 1 THEN SELECT "Erro ao inserir na tabela video" AS Msg; ROLLBACK; ELSE SELECT DISTINCT LAST_INSERT_ID() INTO @idVideo FROM video; /* vai pegar o ID do vídeo que acabou de inserir */ IF excessao = 1 THEN SELECT "Erro ao buscar ultimo ID de video" AS Msg; ROLLBACK; END IF; END IF; END IF; /*Grava TAGs de usuario*/ IF excessao = 0 THEN SET strCampos = pdsTAGs; WHILE LOCATE(",", strCampos) <> 0 AND excessao <> 1 DO SET campo = SUBSTRING(strCampos, 1, LOCATE(",", strCampos)-1); SELECT idTAG INTO pidTAG FROM tags WHERE nmTAG = campo; INSERT INTO TAG(codigo, idUsuario, MODULO) VALUES (@idVideo, pidTAG); IF excessao = 1 THEN SELECT "Erro ao gravar RLVideoTAGs (1) " AS Msg; ROLLBACK; ELSE SET strCampos = SUBSTRING(strCampos, LOCATE(",", strCampos)+1, length(strCampos)-length(LOCATE(",", strCampos))); END IF; END WHILE; IF excessao = 0 THEN SELECT idTAG INTO pidTAG FROM tags WHERE nmTAG = campo; INSERT INTO TAG(codigo, idUsuario, MODULO) VALUES (@idVideo, pidTAG); IF excessao = 1 THEN SELECT "Erro ao gravar RLVideoTAGs (2) " AS Msg; ROLLBACK; END IF; END IF; END IF; /*Se tudo deu certo, ent?o finaliza confirmando a grava??o.*/ IF excessao = 0 THEN COMMIT; SELECT "Video Incluido com sucesso" as msg; END IF; END IF; END$$ DELIMITER ;$$
  19. Da mesma forma que você faria para definir uma sql com a tabela lista ligando usuarios a videos Conforme o esquema anexo, observe o sql abaixo: SELECT nmTAG, nmVideo FROM video v INNER JOIN RLVideoTags vt ON vt.idVideo = v.idVideo INNER JOIN Tags t ON t.idTag = vt.idTag ORDER BY nmTag, nmVideo Será exibida uma lista de videos ordenados por suas TAGs.Outra forma seria: SELECT nmVideo GROUP_CONCAT(nmTAG) FROM video v INNER JOIN RLVideoTags vt ON vt.idVideo = v.idVideo INNER JOIN Tags t ON t.idTag = vt.idTag GROUP BY nmVideo Seria uma lista de vídeos com suas tags em uma mesma linhanetflix.pdf
  20. Amigo, este não é um problema do MySQL. Movendo MySQL -->> ASP
  21. Usuarios pode assistir muitos vídeos. Um videos pode ser assistido por muitos usuários. Assim, o relacionamento entre videos e usuários é muitos para muitos. Uma tabela de relacionamento usuário x video será escrita como abaixo: CREATE TABLE rlUsuario_video( id_usuario INTEGER NOT NULL, id_video INTEGER NOT NULL, dt_video_assistido date PRIMARY KEY(id_usuario, id_video) ); A mesma regra vale para o relacionamento entre videos e tags
  22. Denis Courcy

    Ajuda com criação

    óleo, filtros, pneus e correias são itens que compõem um veículo Se modelo de dados precisa ser refinado antes de você prosseguir. Você deve pensar em frases simples para montar seu modelo. Por exemplo, seguindo o que você postou acima: Um veículo PERTENCE a um modelo,a uma marca, a um tipo e a uma versão. Então você estabelecerá um relacionamento de 1 modelo para vários veículos (A tabela produto deverá possuir 1 atributo da chave de modelo que agirá como chave estrangeira) As tabelas acima seguem o mesmo raciocínio. Um veículo POSSUI peças. Estas peças PODEM ser usadas em OUTROS veículos. Este é um relacionamento muitos para muitos. Requer uma tabela auxiliar contendo a chave primária do Veículo e a chave primária da peça Por exemplo: Um tipo de amortecedor pode ser usado em vários veículos e Estes veículos também podem usar outros tipos de amortecedor. Veja se consegue avançar mais um pouco. qualquer coisa post novamente.
  23. Tenta assim: SELECT idtec, contrato, nome, COUNT(contrato) as contratos, SUM(IF(contrato = '',1,0) as abertos, SUM(IF(contrato <> '',1,0) as fechados FROM (SELECT DISTINCT idtec, contrato, nome FROM rota WHERE nome != 'nome') r GROUP BY idtec ORDER BY nome
  24. Denis Courcy

    UPDATE

    Não entendi sua questão. Pelo que você explicou seu select está correto. Como, pra você, não deu certo, então é porque você não explicou tudo. Você pode publicar a estrutura da tabela, para que eu possa provocar/direcionar você?
  25. Qual o engine da tabela 'radacct' ? Se innodb dê um restart nos servidores, que ela será reparada imediatamente. Se MyISAM consulte sobre repair no manual do mysql para reparar a tabela. Veja abaixo algumas verificações que você possa fazer para evitar este tipo de problema, Verifique se os discos não estão muito fragmentados Verifique se os discos estão cheios devem ter 30% de espaço livre, no mínimo. Verifique sistema de nobreak
×
×
  • Criar Novo...