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. Fazendo exatamente como você colocou acima. Assim: v_valor = (SELECT id, valor FROM tabela WHERE id = 1);
  2. Oi, 'Sтαиlєy S' Você errou todo o exercício. Seu enunciado disse para você ler 500 valores inteiros positivos. Você leu apenas 1 e acrescentou 500 a este valor. Segundo erro: Seu enunciado pede que dos 500 números que você ler, você encontre o maior e o manor deles. Voc entendeu que o menor valor era o valor que você tinha lido e o maior valor era o valor que você tinha lido acrescentado de 500. Terceiro erro: Você nem tentou calcular a média. a média de um conjunto de números é a soma destes números dividido pela quantidade de números digitados. Para corrigir o exercício, você precisa de um algorítimo que use um laço tipo faça enquanto, faça até, Se e Para ... Até. Sem este tipo de laço seu algorítimo ficará enorme e repetitivo. Eu encontrei este site que poderá te ajudar. Se os fluxogramas não aparecerem para você assim como não estão aparecendo para mim, informe que providenciarei os desenhos.
  3. Oi, Pompeu! Pode, sim. Desde que o select retorne apenas um valor.
  4. Ao instalar a segunda versão, você deve informar um nome diferente para o serviço. O nome padrão é MySQL. Informe, por exemplo, MySQL_51. Outra informação que você deverá fornecer é um outro número de porta de comunicação. A porta padrão é a 3306. Informa, por exemplo, a 3307. A terceira indformação que você deverá fornecer é uma pasta diferente para a guarda dos bancos de dados.
  5. Denis Courcy

    Valor padrão

    Oi, nsouza! Use o commando MODIFY, repetindo as definições que você deu no CREATE TABLE para esta coluna e acrescentando a cláusulla DEFAULT. Usando, como exemplo, a estrutura da tabela fornecida pelo Pompeu no post anterior, vamos modificar o campo "endereco" para que fique com valor default "X" que você quer: ALTER TABLE `nome_da_tabela` MODIFY `endereco` varchar(40) default "X";
  6. Oi, 'Pompeu' Você já tentou assim? DTM.TBNomeDaTabela.Close; DTM.TBNomeDaTabela.SQL.Clear; DTM.TBNomeDaTabela.SQL.Add('CALL nome_da_sp(:param1)'); DTM.TBNomeDaTabela.parambyname('param1').value := sua_variavel; DTM.TBNomeDaTabela.ExecSQL; É desta forma que passo parametros para todas as minhas instruções SQL dentro do delphi. Também uso o Delphi 7.
  7. Se você falou de atribuição, o comando em SQL é este: SET Saldo = @vSaldoAux Se você quer passar parâmetros de sua linguagem de peogramação para a SP, vai depender do componente que você estiver usando. No seu caso ZEOS ou BDE via ODBC. Quanto ao exemplo acima Saldo é um campo da tabela e @vSaldoAux é uma variável não declarada. Particularmente, eu prefiro declarar a variável e usá-la sem o "@". Se não for nada disso que passei acima, por favor explique melhor o que você quer. P.S. Entendo bem de Delphi. Só não tenho tempo para coneverter seu código para SQL.
  8. Porque a primeira tabela que você estava usando era uma tabela de relacionamento e não uma tabela de cadastro. Com isto você estava se perdendo na lógica.
  9. 'Gilson Filho', SELECT * FROM USUARIOS U INNER JOIN POL_USU_GRP PUG ON PUG.id_pol_us = U.id_pol_us INNER JOIN GRUPO G ON G.id_grupo = PUG.id_grupo INNER JOIN POL_GRP_DEP PGD ON PGD.PUG.id_grupo = PUG.id_grupo INNER JOIN DEPARTAMENTO D ON D.id_departamento = PGD.id_departamento
  10. De acordo com os compiladores modernos não há distinção de tempo entre as comparações (x>=y) = (y<x) Tomando-se por base números com/sem sinais de 8 ou 16 bits Tem-se a instrução básica: CMP <destino><origem> JCC <etiqueta> Onde: CC de números com sinal |CC de números sem sinal G (Greater) |A (Above) L (Less) |B (Below) E (Equal) |E (Equal) N (Not) |N (Not) A instrução JCC para >= e/ou !< em comparação de numeros sem sinal ficaria Instrução | Descrição | Condição vedadeira JAE | Jump if Above or Equal | Destino >= origem JNB | Jump if Not Below como você podem ver existem 2 instruções, apenas. A comparação (CMP <destino><origem> ) e a ação conforme a resposta (JCC <etiqueta>)
  11. Pode usar um varchar, normalmente. Não há tipo de dados mais aconselhavel para isto.
  12. Oi, É só acrescentar mais linhas contendo os JOINS. Mostre as estruturaas das tabelas. Não precisa ser tudo. somente os campos onde elas se ligam.
  13. Oi, 'Pompeu' Para trabalhar lendo linhas de tabelas você deverá usar CURSORes. Recentemente foram publicados alguns tópicos sobre storage procedures usando cursor. Cursor nada mais é que o nome interno que a tabela vai usar durante o ciclo da SP(storage procedure). Para ler cada linha usa-se o comando FETCH. Para controlar o final do arquivo usa-se uma variável inteira. Esta variável deve ser atribuida a um HANDLER. Veja o exemplo abaixo: DELIMITER $$; DROP PROCEDURE IF EXISTS `base_teste_drc`.`CalculaSaldo`$$ CREATE DEFINER=`root`@`localhost` PROCEDURE `CalculaSaldo`(in vColaboradorID INT) BEGIN DECLARE vDone INT DEFAULT 0; /* declarada a variavel que servirá de marcador de EOF*/ DECLARE vPontoID INT; DECLARE vCargaHoraria INT; DECLARE vTrabalho INT; DECLARE vSaldoAux INT; DECLARE vDataAtual DateTime; DECLARE vStatus INT default 0; -- Busca todas as datas que devem ser atualizadas (ultimos 30 dias) DECLARE Curs CURSOR FOR /* declaração do cursor*/ SELECT str_to_date(date_format(Entrada,'%Y-%m-%d 00:00:00'), get_format(Datetime, 'iso')), SUM(Trabalho) FROM Ponto WHERE ColaboradorID = vColaboradorID AND DATEDIFF(now(), Entrada) <= 180 AND DATEDIFF(now(), Entrada) >= 1 GROUP BY str_to_date(date_format(Entrada,'%Y-%m-%d 00:00:00'), get_format(Datetime, 'iso')) ORDER BY 1; DECLARE CONTINUE HANDLER FOR NOT FOUND SET vDone = 1; /* declaração do handler que controlará o EOF */ -- Busca a carga hor?ria do colaborador SELECT @vCargaHoraria := CargaHoraria*60 FROM Colaborador WHERE ColaboradorID = vColaboradorID; OPEN Curs; /* abre o cursor */ REPEAT FETCH Curs INTO vDataAtual, vTrabalho; /* lê linha do select contido no cursor */ IF NOT vDone THEN /* Verifica se ocorreu o EOF */ SELECT @vSaldoAUx := IFNULL((SELECT saldo FROM Ponto WHERE ColaboradorID = vColaboradorID AND Str_to_date(Date_format(Entrada,'%Y-%m-%d 00:00:00'), Get_format(DATETIME,'iso')) < Str_to_date(Date_format(vDataAtual,'%Y-%m-%d 00:00:00'),Get_format(DATETIME,'iso')) ORDER BY Entrada DESC LIMIT 1),0) + vTrabalho - (CASE WHEN Weekday(vDataAtual) IN (5,6) THEN 0 ELSE vCargaHoraria END); UPDATE Ponto SET Saldo = @vSaldoAux WHERE ColaboradorID = vColaboradorID AND Str_to_date(Date_format(Entrada,'%Y-%m-%d 00:00:00'), Get_format(DATETIME,'iso')) = Str_to_date(Date_format(vDataAtual,'%Y-%m-%d 00:00:00'),Get_format(DATETIME,'iso')); END IF; UNTIL vDone END REPEAT; CLOSE Curs; /* Fecha o cursor */ END$$ DELIMITER;$$
  14. Oi,'sararinhojj' Voc~e pode usar a ferrsamenta do mysql chamada "MySQL Workbench" Ferramentas para modelagem de dados do MySQL
  15. Denis Courcy

    Erro de Sintaxe

    Ciro Que comando é este na primeira linha da criação da tabela? (reate) Não deveria ser CREATE?
  16. Use assim: UPDATE nome_tabela SET coluna_blob=LOAD_FILE("/tmp/picture") WHERE id=1; INSERT INTO TBCLIENTES(ChvCliente,ImagemCliente) VALUES(1, LOAD_FILE("/tmp/picture")); Para maiores informações sobre a função LOAD_FILE consulte o manual do mysql.
  17. Oi, 'ledinizz' Use a função de conversão de string para data str_to_date. Exemplo: SELECT data_pedido FROM minha_tabela WHERE str_to_date(data_pedido, '%d/%m/%Y') BETWEEN '2009-01-01' AND '2009-01-31'; Esta solução terá um problema sério de performance se a tabela for grande e esta consulta for realizada constantemente. Pois, com a conversão do campo, não há como usar índice para agilizar a consulta, gerando, assim, um table scan. Sugiro que você use a função para substituir os dados do formato atual para o formato data.
  18. Oi, 'luisil' Tecnicamente você poderá usar assim: SELECT FUN_DIAS_UTEIS (DATA_ABERTURA_TT, DATA_FECHAMENTO_TT) AS DDD, DATA_ABERTURA_TT, DATA_FECHAMENTO_TT FROM SP39603
  19. Normalmente as linguagens de programação possuem dois operadores para divisão de búmeros inteiros (que é o seu caso) Um operador chama MOD e retorna o resto da divisão e o outro chama DIV que retorna o quociente da divisão. No seu caso, para saber se Y é par ou impar faça X = Y MOD 2. Se X for 1 o número é impar e se X for zero o numero é par.
  20. Use um trigger de exclusão.
  21. Denis Courcy

    SQL em duas tabelas

    Oi, Ivan!! Mostra a estrutura das tabelas e através de que atributo estas se relacionam.
  22. Oi, 'Samir' Não há o que desculpar. Estamos aqui para aprender. Vou responder ponto a ponto, usando um exemplo prático para que você entenda. Imaginando que seu arquivo texto se chame trabalho.txt e que cada linha deste arquivo não ultrapasse 255 caracteres. Vamos importar o arquivo para o banco de dados. Como não sei o tamanho de seu arquivo vou criar uma tabela residente em disco. Passo 1: Criando a tabela temporária CREATE tmp_trabalho( linha varchar(255) )ENGINE = MYISAM; Com a tabela temporária criada vamos importá-la para a tabela tmp_trabalho criada acima. Passo 2: Importando arquivo txt LOAD DATA LOCAL INFILE "trabalho.txt" INTO TABLE tmp_trabalho LINES TERMINATED BY '\n' Se o arquivo trabalho.txt foi criado no windows troque o '\n' acima por '\r\n' Agora vamos tratar o arquivo importado colocando os caracteres de ";" nos locais informados por você no post anterior Passo 3:Tratando arquivo importadoUPDATE tmp_trabalho SET linha = CONCAT(SUBSTRING(linha, 1, 15) ';', SUBSTRING(linha, 16, 11), ';', SUBSTRING(linha, 26, 11), ';', SUBSTRING(linha, 37, 11), ';', SUBSTRING(linha, 48, 11)); Por último vamos exportar os dados modificados da tabela, para um outro arquivo txt que chamaremos de exportacao.csv Passo 4: Exportando o arquivoSELECT linha INTO OUTFILE exportacao.csv LINES TERMINATED BY '\r\n' FROM tmp_trabalho; Para saber sobre o que as funções CONCAT e SUBSTRING fazem, leia o manual do MySQL seção 6.3.2. Funções String
  23. Oi, 'Leo Gomes' Movendo MySQL -->> Web - Editores - Dreamweaver
  24. 'Samir' Se sua intenção é importar este arquivo para o mysql, a solução já foi dada nos posts acima. Se a intenção é transformar este arquivo em csv para depois ser usado em um arquivo excel, então você deve importar este arquivo para um arquivo temporário, tal como explicado nos posts acima, converter as linhas do arquivo temporário para que passem a ter os caracteres de ";" e, por último, exportar o aruivo usando o comando SELECT expressão_select,... INTO OUTFILE 'nome_arquivo' [opções_exportação] FROM tabelas_ref. Para converter as linhas da tabela temporária para que paswsem a ter o caracter de ";" use UPDATE <nome-da-tabela-temporária> SET <nome-do-campo> = CONCAT(substring(<nome-do-campo>, x1, y1), ';', substring(<nome-do-campo>, x2, y2), ';',...,substring(<nome-do-campo>, xn, yn)); Para exportar a tabela temporária já convertida para um arquivo txt useSELECT <nome-do-campo> INTO OUTFILE <nome-do-arquivo> LINES TERMINATED BY '\r\n' FROM <nome-da-tabela-temporária>
  25. Oi, 'Robertoweb' O backup (periodicidade e guarda) deve estar estabelecido em seu SLA com o provedor. Seu provedor não tem direito aos dados. Eles pertencem você e/ou ao seu cliente (depende do tipo de contrato que você fêz com seu cliente). Se você não especificou a cláusula de backup no contrato com seu provedor, então você deve tentar aditivar este contrato imediatamente. Não esqueça de pedir ao seu provedor para ativar o log binário. É de extrema importância que ele(o log binário) fique sempre guardado em outro disco diferente de onde está o BD. Ele garante o backup de transação a transação entre o último backúp e o momento do "acidente". Caso você qeuira testar a consistência de seu backup, peça a seu provedor uma cópia do backup e baixe em um BD local (seu). Para restaurar um backup feito com mysqldump (em minha opinião a melhor ferramenta de backup para o mysql), você deve usar o prompt do mysql digitando: source <nome-do-seu-arquivo-de-backup>;
×
×
  • Criar Novo...