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. Oi, 'tux_boy'! Primeiro indorme se você vai trabalhar com ZEOS ou com ODBC/BDE.
  2. Substitua o TPanel pelo TGroupBox. O TGroupBox tem o evento que você precisa.
  3. 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;
  4. Oi, 'Vivendo&Aprendendo', qual banco você usa? Por padrão (ANSI) o SQL DISTINCT só funciona se todas as linhas (todas as colunas) retornarem valores iguais.
  5. 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.
  6. 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
  7. 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.
  8. Denis Courcy

    Dicionario de dados

    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
  9. 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
  10. 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
  11. 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
  12. 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
  13. Oi, Ilano! Dê uma lida no manual do MySQL versão 5.0.x, capítulos 17 e 12. Lá tem o que você precisa, já que a diferença de código é muito pequena. att Denis Courcy
  14. 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
  15. 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
  16. Oi, Paulo Jose! Se entendi o que desejas, o código abaixo o satisfará. UPDATE solicitacao_compras sc SET status_solicita = (SELECT status_autoriza FROM autoriza_compras ac WHERE ac.cod_solicit = sc.cod_solicit) Informe sucesso ou fracasso. att Denis Courcy
  17. Oi, Marcelo! Receio que o que desejas não seja possível. Pois o Banco Mysql não é um "arquivinho" que possa se anexado a uma instalação qualquer. Ele requer cuidados e estrutura para que sua instalação tenha sucesso. Além de tunning conforme o cliente e o modelo a ser estruturado. att Denis Courcy
  18. Oi, Francisco ! Verifique se a resposta que dei no post abaixo satisfaz sua necessidade http://scriptbrasil.com.br/forum/index.php?showtopic=111392 Se não satisfizer, post novamente e avaliaremos outra solução. att Denis Courcy
  19. Denis Courcy

    Duvida QUERY

    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.
  20. Oi, 'ihc'! Acho que você enviou a mensagem para o forum errado. Não vi nada relacionado a MySQL no seu post. Envie este post para o forum do PHP. att Denis Courcy
  21. Denis Courcy

    SELECT

    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
  22. Denis Courcy

    Load xml com mysql

    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
  23. 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
  24. 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.
  25. Denis Courcy

    Bug na exclusã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...