Ir para conteúdo
Fórum Script Brasil

Denis Courcy

Moderadores
  • Total de itens

    3.089
  • Registro em

  • Última visita

Posts postados por Denis Courcy

  1. Olá Denis Courcy!

    Eu utilizo o access, e todas as linhas e colunas são identicas... mas ele esta me retornando 3 linhas iguais, que relamente existem, mas que quero apenas uma...

    Alexandre

    Oi, Alexandre!

    Criei uma tabela com 3 linhas iguais cada campo com um tipo diferente. A consulta retornou 1 linha como esperado.

    Alterei o valor do campo3 do último registro e ele retornou 2 linhas como esperado (pois o conteúdo dos registros nos 3 campos não eram iguais). suprimi o campo 3 da minha consulta (somente da consulta. o campo3 no 3o. registro ainda está com valor diferente) retornou apenas 1 linha como esperado.

    Com base no descrito acima, concluo que o SQL que você utilizou não foi compreendido pelo access. (Uso o MS office 2000).

    Faça o teste em seu access com a sintaxe abaixo. ( a mesma que utilizei) e informe o resultado:

    SELECT DISTINCT Tabela1.campo1, Tabela1.campo2, Tabela1.campo3
    FROM Tabela1;

  2. Oi, Francisco !

    Use uma tabela temporária em memória e faça seu relatório a partir dela.

    CREATE TEMPORARY TABLE temp (
    cnpj (conforme o tipo em sua tabela),
    vltb1 double(14,2),
    vltb2 double(14,2),
    vltb3 double(14,2),
    PRIMARY (cnpj)
    )ENGINE = MEMORY;
    Carrege os dados para ela
    INSERT INTO temp (cnpj, vltb1, vltb2, vltb3)
    SELECT STRAIGHT_JOIN t0.cnpj, SUM(t1.vlrctb) AS vltb1, SUM(t2.vlrctb) AS vltb2, SUM(t3.vlrctb) AS vltb3
    FROM tabela0 t0
    INNER JOIN tabela1 t1 ON t0.cnpj = t1.cnpj
    INNER JOIN tabela2 t2 ON t0.cnpj = t2.cnpj
    INNER JOIN tabela3 t1 ON t0.cnpj = t3.cnpj
    GROUP BY cnpj;
    use a tabela temp em seu relatorio
    SELECT cnpj, SUM(vltb1), SUM(vltb2), SUM(vltb3)
    FROM temp GROUP BY cnpj;
    delete a tabela temporária para liberar memória.
    DROP TABLE temp;

    Nota: Só utilize a engine memory se você souber que a quantidade de dados a serem armazenados não ultrapassa uma quantidade de mória razoável para este processamento.

  3. Olá pessoal,

    no mysql4, para armazenar o retorno da função password('string'), usava um campo tipo CHAR com tamanho 16. Funcionava!

    Ao atualizar para o mysql5, notei que a função password() retorna uma string muito maior.

    existe algum tipo de campo próprio para receber o retorno da função password(). Caso contrário, de for armazenar o retonrno num campo tipo CHAR, qual deve ser seu tamanho mínimo?

    Valeu!

    Skin_

    Oi, 'Skin'!

    O tamanho do campo char foi alterado a partir da versão 4.1 do MySQl, de 16 para 41 bytes e a partir da versão 5.x ele inicia com o caracter '*'. para o MySQL 5.x é de 41 bytes. Como o tamanho é fixo, aconselho a utilização do tipo CHAR(41) em lugar do VARCHAR para este tipo de campo.

    Para mais informações ver as seções:

    5.8.9. Password Hashing as of MySQL 4.1 e

    5.9. MySQL User Account Management

    do manual do MySQL verão 5.0.x

    att

    Denis Courcy

  4. Oi, Eduardo!

    Pelo que entendi, você está cometendo um erro de lógica em seu modelo.

    O conceito simples para este modelo é um condomínio tem um ou vários apartamentos e um apartamento tem um ou vários inquilinos. Inquilino é tabela "FILHA de Apartamentos que é tabela "FILHA de condominio.

    Segundo sua base, o conceito está em: um condominio tem um ou mais apartamentos e um inquilino está em um ou mais apartamentos.

    Neste seu caso (vide as constraits), quando da inclusão, Inquilino e condomínio devem ser cadastrados antes de apartamentos e, pior, quando da exclusão deve-se deletar primeiro apartamentos para depois deletar o inquilino ou condimínio, senão haverá erro de integridade referencial.

    Você tornou Inquilino e condomínio como tabelas "PAI" e apartamentos como tabela "FILHA" destes dois.

    Lembre-se a rotatividade de inquilinos entre apartamentos é maior que a de apartamentos em condomínio.

    Pense e informe o que decidiu.

  5. Bom dia pessoal...

    Eu estou com uma duvida, eu estou ultilizando o mysql, alguém sabe se exite alguma ferramenta que auxilia na construção de um dicionario banco de dados para o mesmo.

    Andei procurando a respeito e encontrei algumas coisas relacionadas, mas não obtive sucesso.

    Se alguém souber e tiver como me dar uma dica ficarei muito agradecido.

    Oi, Hilário!

    Também não conheço nenhuma ferramenta decente para realizar esta tarefa.

    Lendo na net encontrei estes (não sei se satisfarão sua necessidade).

    <a href="http://webscripts.softpedia.com/scriptDownload/MySQL-Data-Dictionary-Creator-Download-3218.html" target="_blank">

    http://webscripts.softpedia.com/scriptDown...nload-3218.html</a>

    http://www.tonymarston.net/php-mysql/data-dictionary.html

    Há tambem a INFORMATION_SCHEMA do próprio MySQL implementado a partir da versão 5.0

    SELECT table_name, table_type, engine
        FROM INFORMATION_SCHEMA.tables WHERE table_schema = 'tp'
        ORDER BY table_type ASC, table_name DESC;

    mas ainda não testei.

    Estou desenvolvendo um modelo de dados em MySQL que me ajudará na documentação do sistema (dicionarização).

    Se houver interesse poderemos conversar melhor. (Não me preocupo de tornar o modelo público).

    att

    Denis Courcy

  6. Ola...Deniz..Grato em responder.

    Será que é por causa de ser Paradox a Tabela??

    muito Grato

    Creio que sim. Pois o SQL que passei é padrão e utilizável em quase todos tipos de bancos de dados.

    Então use a opção 1. Dará mais trabalho no ínício (para modificar as tabelas), mas você não terá mais este tipo de problema.

    att

    Denis Courcy

  7. Olá, gostaria de saber se algum colega tem uma dica para o seguinte processo:

    tenho um form de cadastro de produtos, então cadastra o nome do produto, código, etc, porém o complemento do cadastro terá que ser em uma janelinha separada, que abriria tipo um popup, como eu poderia fazer uma janela que abrisse com os edit's de complemento sem fazer um outro form somente para estes 4 ou 5 campos.

    Se alguém puder me ajudar eu agradeço.

    Oi, João Paulo!

    Utilize um componente TPanel. Coloque dentro dele os TEdit que você precisa e colotrole-o com Vosible False/True para esconder e exibir o Panel quando necessário.

    att

    Denis Courcy

  8. A conversão de graus em Fahrenheit para centígrados é obtida pela fórmula C=5/9 (F-32). Escreva um algorítmo que mostre essa conversão...

    me ajudem se puder hehe!!

    Oi, Anne!

    Seu algorítimo é basicamente assim.

    Declare variavel
    GrauFahrenheit
    GrauCelcius
    
    Escreva "Entre com o Grau em Fahrenheit"
    Leia GrauFahrenheit
    GrauCelcius <- (5 / 9 * (GrauFahrenheit - 32))
    Escreva GrauCelcius

    att

    Denis Courcy

  9. Oi, Eder! pelo que entendi está havendo a impressão em linha separada entre o

    AAAAAA 22222222222222 e o

    AAAAAA SA 22222222222222, pois o agrupamento considerou-os de forma diferente.

    sua solução passa por um de dois passos a seguir:

    1 - normalizar corretamente o seu banco de dados. colocando AAAAAA e AAAAAA SA como um único registro em outra tabela, de maneira que haja um relacionamento que aponte de forma correta para o que precisas e facilite a manutenção do cadastro em questão. (Esta é a maneira mais correta, pois este tipo de problema não se repetirá mais)

    2 - Se seu banco de dados contém PAG_CNPJ para representar igualmente AAAAAA e AAAAAA SA, então retire o campo PAGADOR_NOME da cláusula GROUP BY, mantendo o PAG_CNPJ. O resultado será o mesmo. Se precisar de ordenação então utilize o PAGADOR_NOME na cláusula ORDER BY.

    No início do select utilize o FIRST(PAGADOR_NOME) para que ele pegue o primeiro registro com o nome desejado (assim não ocasionará erro no resultado do SELECT por causa da cláusula GROUP BY.

    Em suma, faça assim:

    SELECT PAG_CNPJ, FIRST(PAGADOR_NOME), '+
        'SUM(VALOR_FRETE) AS VALOR_FRETE_TOTAL, '+
        'SUM(CONTADOR) AS CONTADOR_TOTAL, '+
        'SUM(KG_CALCULO) AS KG_CALCULO_TOTAL, '+
        'SUM(VALOR_N_FISCAL) AS VALOR_N_FISCAL_TOTAL '+
    'FROM CTRC ' +
    'WHERE (SITUACAO_CTRC <> "C") '+
        'AND DATA_EMISSAO between :datai and :dataf '+
        'AND NOME_VENDEDOR = ' + QuotedStr(COMBOBOX1.text) + 
    'GROUP BY PAG_CNPJ ' +  
    'ORDER BY 3 DESC';

    att

    Denis Courcy

  10. Oi, Marcelo!

    Nada impede que você vá até o usuário e instale o MySQL. Nem que o ensine a instalar. (O que localmente seria muito fácil).

    O grande problema é o suporte. (Mas isso seria em qualquer base de dados). Você vai ter que ensiná-lo a corrigir tabelas, fazer backup, etc.

    Já pensou em colocar o VNC na máquina do cliente e acessá-la via internet? Você poderia configurá-la e corrigi-la a distância.

    Voltando a sua pergunta, se há outras bases que podem ser utilizadas? A resposta é sim. Acesss (o mais confiável, em minha opinião) Paradox (usado por uma empresa aqui do RJ chamada Nasajon), e outros menos confiáveis. Vai depender do volume armazenado e da quantidade de transações a serem efetuadas.

    att

    Denis Courcy

  11. Caros colegas,

    Estou com o seguinte problema, preciso extrair dados de duas tabelas, produtos e departamentos, ambas possuem o código do departamento, o nome do campo é dp_codigo. Então estou usando o seguinte comando:

    SELECT * FROM produtos p, departamentos d

    WHERE p.dp_codigo = d.dp_codigo or p.dp_codigo is null

    O que acontece é que se a tabela departamentos estiver vazia não aparece o produto.

    Como resolver isso ?

    Muito Obrigado.

    Oi, Luiz Carlos!

    Quando tiver relacionamento entre duas ou mais tabelas dê preferencia ao uso da cláusula JOIN. é mais eficiente que controlar pela cláusula WHERE.

    Para o seu caso o uso correto é com LEFT JOIN onde aparecerá todos os registros da tabela da esquerda e, onde não houher registros na tabela da direita os campos referentes a ela ficarão com NULL. Vamos ao código:

    SELECT * FROM produtos p, LEFT JOIN departamentos d ON p.dp_codigo = d.dp_codigo

    att

    Denis Courcy

  12. Bom é o sequinte... será que alguém pode me ajudar????

    Tenho um formulario que envia dois parametros:

    $matricula e $ cpf

    tenho duas tabelas, uma que possui a informação cpf e matricula e outra que irá receber os novos registros

    queria comparar as informações adicionadas com o que já tem na tabela...

    só que não consigo fazer funcionar!!!!

    $consulta = mysql_query ("SELECT * FROM dados WHERE matricula = '$matricula'");

    $con = mysql_query ("SELECT cpf FROM dados WHERE '$matricula' = matricula");

    if ($cpf <> $con){

    echo "ERRO: O CPF .'$cpf'. não corresponde ao numero da matricula informada .'$matricula'. ";

    echo "Verifique se você não digitou errado";

    exit;

    Alguma dica???

    O erro que aparece é este:

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Resource id #6' at line 1

    Oi 'lukka' !

    Você está confundindo a sintaxe do php com a sintaxe de select do MySQL.

    Tente assim,

    $con = mysql_query ("SELECT cpf FROM dados WHERE matricula = '".$matricula."'");

    e informe sucesso ou fracasso.

    att

    Denis Courcy

    P.S.: Não conheço o php usei o ponto como sinal de concatenação, porém se não for isso, troque polo correto.

  13. Oi, 'Enigmatick'!

    Tente assim

    select p.id, p.nome from pessoa p
    where p.id in (select pm.idpessoa from pessoa_materia pm
    where pm.idmateria = 1) and p.id in (select pm.idpessoa from pessoa_materia pm
    where pm.idmateria = 2);

    e informe sucesso ou fracasso.

    att Denis Courcy

  14. bom dia, preciso de ajuda, eu tenho uma rotina que lê uma tabela com alguns criterios em um banco remoto, preenche num dataset e salva em um xml, só que preciso dar um load no mysql, mas dá erro, já baixei a versão 6.0 e nada, alguém já fez load xml com o mysql? se alguém puder me ajude é urgente!

    Angelica

    Oi, Angelica!

    Que tipo de erro está ocorrendo?

    O mecanismo de load é simples.

    Consulte http://lists.mysql.com/internals/34169 e http://lists.mysql.com/internals/34170 que temostra como executar os comandos de load xml.

    att

    Denis Courcy

  15. Oi, João Paulo!

    Evite a qualquer custo fazer backup físico de banco de dados. No forum do MySQL comanto sempre que o melhor e mais seguro é utilizar o Mysqldump para backup. Você pode fazer o backup online e não afeta a integridade do banco.

    Recentemente desenvolvi em delphi uma ferramenta que gerasse o backup usando uma chamada ao mysqldump, o que facilitou tremendamente o usuário pois o nome do arquivo de saida contem a data e a hora da geração, o que evita sobreposição de versão de backup.

    Em seu caso, a rotina que criei poderia ser utilizada:

    {$R *.dfm}
    
    function TfrmBackup.CreateProcessSimple(cmd: string):boolean;
    var SUInfo:  TStartupInfo;
       ProcInfo: TProcessInformation;
    begin
       FillChar(SUInfo, SizeOf(SUInfo), #0);
       SUInfo.cb      := SizeOf(SUInfo);
       SUInfo.dwFlags := STARTF_USESHOWWINDOW;
       SUInfo.wShowWindow := SW_HIDE;
       result := CreateProcess(nil, PChar(cmd), nil, nil, false, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, SUInfo, ProcInfo);
       if result then
       begin
          WaitForSingleObject(ProcInfo.hProcess, INFINITE);
          CloseHandle(ProcInfo.hProcess);
          CloseHandle(ProcInfo.hThread);
       end;
    end;
    
    procedure TfrmBackup.btnOKClick(Sender: TObject);
    begin
       close;
    end;
    
    procedure TfrmBackup.ExecutarBackup;
    var aa,mm,dd, hh, mmm, ss, sss: word;
       aux : string;
    begin
       aux := 'cmd.exe /c "mysqldump --opt --flush-logs --triggers --port=3306 ';
       aux := aux + '--user=root --result-file=backup.sql --databases sase"';
       lblMensagem.Caption := 'Aguarde. Efetuando Backup';
       lblMensagem.Refresh;
       if not createProcessSimple(aux) then
          lblMensagem.Caption := 'BACKUP NÃO FOI PROCESSADO!'
       else
       begin
          decodedate(date, aa, mm, dd);
          decodetime(time, hh, mmm, ss, sss);
          if FileExists('BACKUP.SQL') then
          begin
             aux := inttostr(aa);
             if mm < 10 then
                aux := aux + '0' + inttostr(mm)
             else
                aux := aux + inttostr(mm);
             if dd < 10 then
                aux := aux + '0'+ inttostr(dd)
             else
                aux := aux + inttostr(dd);
             if hh < 10 then
                aux := aux + '0'+ inttostr(hh)
             else
                aux := aux + inttostr(hh);
             if mmm < 10 then
                aux := aux + '0'+ inttostr(mmm)
             else
                aux := aux + inttostr(mmm);
             if ss < 10 then
                aux := aux + '0'+ inttostr(ss)
             else
                aux := aux + inttostr(ss);
             aux := aux + '.sql';
             RenameFile('backup.sql', aux);
             lblMensagem.Caption := 'Backup Realizado!';
          end;
       end;
       btnOK.Enabled := True;
    end;

    divirta-se

    att

    Denis Courcy

  16. Oi, jhony_8p!

    veja a linha que você escreveu antes da declaração de criação da tabela em questão.

    INSERT INTO `accounts` (`AccountID`, `Password`, `Type`, `Auth`, `Address`) VALUES 
    ('test', '', 0, 2, NULL),

    ela está terminando em VIRGULA e não em PONTO E VIRGULA.

    att

    Denis Courcy

    P.S. Evite usar o nome CHARACTERS para nome de tabela esta é uma palavra reservada do MySQL e de repente vai dar xabu.

  17. Eu fiz um sistema que usa relação entre as tabelas NOMES e SISTEMAS varios para varios

    para mostra os resultados eu usei o left join que você mesmo me indicou,beleza eis a questão

    quando na area que eu criei para administrador quando eu tento excluir um nome ou um sistema que já esteja

    relacionado com outro ele não consegui , me ajude a resolver esse problema por favor!!!

    Desde já agradeço sua atenção!

    Oi, '--diegors10 --'!

    Pelo que entendi você está usando innodb com auxilio de constraints para verificação e imposição de integridade referencial.

    Se é assim, e você usou a cláusula ON UPDATE NO ACTION ON DELETE NO ACTION, então você deve excluir o valor da tabela de relacionamentos N para N primeiro pois ela é uma tabela filha. depois deletar o valor da tabela pai desejada.

    Seu relacionamento ficou assim:

    NOMES (1,N) RL_NOMES_X_SISTEMAS (N,1) SISTEMAS

    (Três tabelas. a do meio é o relacionamento N para N com as outras duas) A do meio é filha e as outras duas pais.

    Para evitar este vai e vem substituia as cláusulas citadas acima pelas cláusulas ON UPDATE CASCADE ON DELETE CASCADE.

    Verifique e responda, por favor para que possamos analisar.

    att

    Denis Courcy

×
×
  • Criar Novo...