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, Marcelo! Em resposta a sua primeira pergunta. Este não é um problema específico do MySQL. Por tanto vou transferir este tópico para o forum de PHP, onde você poderá encontrar uma melhor solução. Em resposta a sua segunda pergunta. Já que você usa o M$Windows, o melhor programa para SGBD de MySQL, em minha opinião é o SQLYog (que tem uma versão free para download). Veja em (Dicas - Neste Forum)
  2. Denis Courcy

    Sobre IN

    Oi, Eder! Infelizmente não há como fazê-lo.
  3. Oi, Micheus! Você enviou o código que está com erro assim: ... Assignfile(Txt,'Arquivo.csv'); Reset(Txt); Readln(Txt, Entrada); While Not EOF(Txt) do begin ListBox2.Items.Add(Entrada); Application.ProcessMessages; Readln(Txt, Entrada); Label2.Caption := Entrada; end; CloseFile(Txt); Porém, Se você fizer assim: ... Assignfile(Txt,'Arquivo.csv'); Reset(Txt); Readln(Txt, Entrada); While Not EOF(Txt) do begin Label2.Caption := Entrada; ListBox2.Items.Add(Entrada); Application.ProcessMessages; Readln(Txt, Entrada); end; CloseFile(Txt);Você não terá erros. Pois como mensionei anteriormente a segunda leitura deve ser a última instrução antes do end do bloco while
  4. Denis Courcy, faz tempo que não implemento este tipo de leitura, então vou perguntar para tirar a dúvida: da forma como você sugere - fazer o Readln ao final do laço - não irá acontecer de a última linha deixar de ser processada, já que a úlima linha é lida e o sinalizador de EOF "encontrado"?Abraços Oi, Micheus! A resposta a seu questionamento é não. As regras para leitura de arquivo de forma estruturada, usando laço while (validas para qualquer linguagem) determinam: 1 - A leitura antes (a do primeiro registro) do laço while. Para certificar que o buffer entre, carregado, no laço (veja a explicação abaixo) 2 - A leitura na última posição do laço while. Para forçar que o buffer esteja carregado antes de fazer o teste para a continuidade do laço. Explicação: Quando o arquivo não possui registro o que é lido é a marca de EOF (caracter CTRL Z ou chr(26) nos arquivos texto) e uma informação é emitida avisando que o EOF foi encontrado. O mesmo acontece quando, em um arquivo que contém registros, após a última leitura, o EOF é encontrado. Nos arquivos binários o teste é feito comparando o ponteiro de deslocamento do arquivo com o tamanho do mesmo informado na tabela de diretório. Quando a marca de EOF é encontrada o buffer retornará vazio e/ou parcialmente cheio. O arquivo texto informado pelo Eder tem a seguinte composição: <<<<string>>>> EOL <<<<string>>>> EOL EOF Há casos em que o arquivo texto pode vir assim: <string1>,<string2>,<string3>,...,<stringN>EOF Mas este é outro tópico. Para saber: EOL = Marca de fim de linha = #13#10 EOF = Marca de fim de arquivo = #26. Nos arquivos binários o EOF é #255.
  5. Oi, Eder! Modifique seu código para que fique assim: procedure TForm1.Button2Click(Sender: TObject); var Txt : TextFile; Entrada : String; begin Assignfile(Txt,'C:\MES\Clientes.Txt'); Reset(Txt); Readln(Txt, Entrada); //a primeira leitura fica fora do while While Not Eof(Txt) do // O teste é de final de arquivo e não de fim de linha como antes begin Table1.Insert; Table1.FieldByName('ordem').Value := Trim(Copy(Entrada,10,06)); Table1.FieldByName('nome').Value := Trim(Copy(Entrada,16,42)); Table1.FieldByName('cnpj').Value := Trim(Copy(Entrada,58,18)); Table1.Post; Readln(Txt, Entrada); // As leituras seguintes ficam na última linha antes do final do while end; CloseFile(Txt); end;
  6. Você deverá ter uma tabela para feriados flutuantes (carnaval, páscoa, corpus cristi) verificar se a data é uma data fixa, tal como natal, ano novo, etc. E, se não for, verificar se a data é um feriado flutuante, pesquisando na tabela. O resto é através de linguagem de programação.
  7. Oi, Cadu0220! Vamos resolver isso desta forma: CREATE PROCEDURE jclgraf_SelectRequisicao ( IN id_requisicao int ) BEGIN declare trabalhos int; declare itens int; set @trabalhos = (SELECT COUNT(id_trabalho) FROM trabalhos WHERE id_requisicao = @id_requisicao); set @itens = (SELECT COUNT(id_item) FROM itens WHERE id_requisicao = @id_requisicao); SELECT R.titulo ,R.produto ,E.razao_social ,Contato.nome nome_contato ,Contato.email email_contato ,Vendedor.nome nome_vendedor ,Vendedor.email email_vendedor ,R.observacoes ,IF(R.status = 1, 'Criada', IF(R.status = 2, 'Aguardando Orçamento', IF(R.status = 3, 'Aguardando Aprovação', IF(R.status = 4, 'Em produção', IF(R.status = 5 THEN 'Finalizada', 'Cancelada'))))) AS Status ,R.data_cadastro ,P.id_pedido ,@trabalhos trabalhos ,@itens itens ,F.id_faturamento ,F.emissao_nota_fornecedor ,F.vencimento_nota_fornecedor ,F.numero_nota_fornecedor ,F.vencimento_nota_jcl ,F.numero_nota_jcl ,((O.bv_jcl - (O.bv_agencia + O.bv_producao)) / 100) * T.preco_total comissao FROM requisicoes R LEFT OUTER JOIN pedidos P ON (R.id_requisicao = P.id_requisicao) LEFT OUTER JOIN faturamentos F ON (R.id_requisicao = F.id_requisicao) LEFT OUTER JOIN trabalhos T ON (R.id_requisicao = T.id_requisicao AND T.status = 4) LEFT OUTER JOIN orcamentos O ON (O.id_orcamento = T.id_orcamento) ,empresas E ,contatos Vendedor ,contatos Contato WHERE R.id_requisicao = @id_requisicao AND E.id_empresa = R.id_empresa AND Contato.id_contato = R.id_contato AND Vendedor.id_contato = R.id_vendedor; END; Instrução IF utilizadas em cláusulas SELECT conforme capítulo 6 do manual do MySQL versão 4.1 tradução em português 6.3.1.4. Funções de Fluxo de Controle mysql> SELECT IF(1>2,2,3); -> 3 mysql> SELECT IF(1<2,'sim','não'); -> 'sim' mysql> SELECT IF(STRCMP('teste','teste1'),'não','sim'); -> 'não'
  8. Denis Courcy

    Pegando o ultimo id

    Está correto. Você também pode usar a função LAST_INSERT_ID()
  9. Oi, Mauro! Normalmente isto é feito usando linguagem de programação. Pois você estará usando a transformação de um número em uma string. O MySQL tem funções que podem ser combinadas para que você consiga este resultado (ver capítulo 6 do manual do mysql versão 4.1 tradução em português). Porém, o normal, é que você o faça a través da linguagem de programação que você usa.
  10. Crie um script e Carregue-o no servidor. Conforme escrevi no post #2 deste tópico
  11. Oi, Andros! Vamos iniciar com o erro acima. Este erro informa que o usuário root não foi habilitado corretamente. A partir da versão 4.1 do MySQL você necessita cadastrar o usuário root@% com todos os priviégios para que os clientes e serviços externos possam enxergar o servidor do banco. Leia no manual do mysql como se cadastra e como obter os privilégios para esta conta.
  12. Oi, Jesc!Bom dia. Use a função LAST_INSERT_ID() Conforme o manual do MySQL versão 5.0(em inglês)
  13. Oi, 'tiagojmg' ! Isto está parecendo ser mais um GOTCHA do MySQL. Um GOTCHA é um comportamento não esperado para um evento realizado. Não é um bug. Vou testar em casa e te respondo depois.
  14. Verifique o Tópico Para Tutoriais/dicas, e também o Programas Front End Mysql No primeiro link procure o post do Micheus No segundo Link O último (SQLYog) é o que eu uso.
  15. Porque já tem índice ( o foreign key) e a restrição de integridade referencial provocada pela constraint obriga a a que o registro na tabela filha só possa ser incluido se houver incluido o registro na tabela pai antes.Outra coisa, Você sabia que excesso de índices também podem tornar uma tabela mais lenta? Fiz com que a tranzação fosse atômica. Ou seja, ou grava tudo ou não grava nada. Se houver falha na gravação um erro será disparado e o que foi gravado será desfeito.
  16. Por que você não usa o sinal de IGUAL ou o LIKE, tal como: select id_conta FROM bolsa_conta_cep where cep = '14800-000'; ouselect id_conta FROM bolsa_conta_cep where cep LIKE '14800-000%';
  17. Oi, Welinton! Eu não entendi o select id_conta where tabela where cep >= '13700-000' and cep <= '13700-000' Não seria assim? select id_conta FROM tabela where cep >= '13700-000' and cep <= '13700-000' Se eu estiver certo, então o melhor seria escrever assim:select id_conta FROM tabela where cep BETWEEN '13700-000' and '13700-000'
  18. Oi, Jesc! Não há auto_increment nos atributos id_pessoa_fis da tabela pessoa_fisica, nem id_pessoa_jur na tabela pessoa_jurid, nem id_clube na tabela clube e nem id_jogador na tabela jogador.Estes atributos são atributos ALIAS do atributo id_pessoa na tabela pessoa. Um Atributo ALIAS é o atributo que tem o nome diferenciado para facilitar o entendimento, mas que o conteúdo e tipo são os mesmos do atributo a que ele faz referência. Assim, modificando suas definições, teremos: create database futebol; use futebol; CREATE TABLE pessoa ( id_pessoa integer unsigned not null auto_increment, nome varchar(40) not null, fone varchar(15) not null, tipo_pessoa enum('J','F') not null, primary key (id_pessoa) )ENGINE=InnoDB; CREATE TABLE pessoa_fisica ( id_pessoa_fis integer unsigned not null, data_nasc date not null, cpf varchar(15) not null, e_jogador enum ("S","N") not null, )ENGINE=InnoDB; ALTER TABLE pessoa_fisica ADD CONSTRAINT FK_pessoa_fis FOREIGN KEY (id_pessoa_fis) REFERENCES pessoa (id_pessoa) ON UPDATE CASCADE ON DELETE CASCADE; CREATE TABLE pessoa_juridica ( id_pessoa_jur integer unsigned not null, nome_fant varchar(40) not null, fundacao date not null, cnpj varchar(15) not null, e_clube enum ("S","N") not null, )ENGINE=InnoDB; ALTER TABLE pessoa_juridica ADD CONSTRAINT FK_pessoa_jur FOREIGN KEY (id_pessoa_jur) REFERENCES pessoa (id_pessoa) ON UPDATE CASCADE ON DELETE CASCADE; CREATE TABLE jogador ( id_jogador integer unsigned not null, apelido varchar(20) not null, valor_passe decimal(7,2) not null )ENGINE=InnoDB; ALTER TABLE jogador ADD CONSTRAINT FK_jogador FOREIGN KEY (id_jogador) REFERENCES pessoa_fisica (id_pessoa_fis) ON UPDATE CASCADE ON DELETE CASCADE; CREATE TABLE clube ( id_clube integer unsigned not null, cores varchar(100) not null, )ENGINE=InnoDB; ALTER TABLE clube ADD CONSTRAINT FK_clube FOREIGN KEY(id_clube) REFERENCES pessoa_juridica (id_pessoa_jur) ON UPDATE CASCADE ON DELETE CASCADE; CREATE TABLE cotas ( id_jogador integer unsigned not null, id_pessoa integer unsigned not null, percentual char(5) not null, valor_negoc decimal(7,2) not null, data_negoc date not null, valor_mercado decimal(7,2) not null, )ENGINE=InnoDB; ALTER TABLE cotas ADD CONSTRAINT FK_jogador FOREIGN KEY (id_jogador) REFERENCES jogador (id_jogador) ON UPDATE CASCADE ON DELETE CASCADE, ADD CONSTRAINT FK_pessoa FOREIGN KEY (id_pessoa) REFERENCES pessoa (id_pessoa) ON UPDATE CASCADE ON DELETE CASCADE; CREATE TABLE jogador_clube ( id_clube integer unsigned not null, id_jogador integer unsigned not null, primary key (id_clube,id_jogador) )ENGINE=InnoDB; ALTER TABLE jogador_clube ADD CONSTRAINT FK_clube FOREIGN KEY(id_clube) REFERENCES clube (id_clube) ON UPDATE CASCADE ON DELETE CASCADE, ADD CONSTRAINT FK_jogador FOREIGN KEY(id_jogador) REFERENCES jogador (id_jogador) ON UPDATE CASCADE ON DELETE CASCADE; É para manter o relacionamento 1:1 dependente da tabela pai. Só pode incluir um clube, por exemplo, se antes você incluiu uma pessoa jurídica e esta pessoa jurídica, por sua vez, só pode ser incluida se você já incluiu um registro em pessoa. Assim, respondendo a sua solicitação em para inclusão do clube 'Flamengo', por exemplo, teremos: USE futebol; START TRANSACTION; INSERT INTO pessoa (id_pessoa, nome, fone, tipo_pessoa enum) VALUES (1, 'CLUBE DE REGATAS FLAMENGO', 9999-9999, 'J'); INSERT INTO pessoa_juridica (id_pessoa_jur, nome_fant, fundacao, cnpj, e_clube) VALUES (1, 'FLAMENGO', '1900-01-01', 99999999999-99, 'S'); INSERT INTO clube (id_clube, cores) VALUES (1, 'VERMELHO e PRETO'); COMMIT;
  19. Cadu veja este trecho de código CASE R.status WHEN 1 THEN 'Criada' WHEN 2 THEN 'Aguardando Orçamento' WHEN 3 THEN 'Aguardando Aprovação' WHEN 4 THEN 'Em produção' WHEN 5 THEN 'Finalizada' ELSE 'Cancelada' Agora veja este: ,Vendedor.email email_vendedor Notou o que está faltando? Já tentou colocar um ALIAS após o ELSE 'Cancelada'? No segundo erro não está faltando um END IF; após o END IF e antes do END? Tente desta forma: CREATE PROCEDURE jclgraf_SelectToPropostaEmail (IN id_requisicao int, IN opcao_consulta int) BEGIN IF (@opcao_consulta = 1) THEN SELECT R.titulo ,R.produto ,R.observacoes ,C.email FROM requisicoes R, contatos C WHERE R.id_requisicao = @id_requisicao AND C.id_contato = R.id_contato; ELSE IF (@opcao_consulta = 2) THEN SELECT descricao ,largura_aberto ,altura_aberto ,largura_fechado ,altura_fechado ,cores_frente ,cores_verso ,substratos ,acabamentos FROM itens WHERE id_requisicao = @id_requisicao; ELSE SELECT O.quantidade ,E.razao_social ,T.id_trabalho ,T.proposta ,T.preco_unitario ,T.preco_total FROM trabalhos T, orcamentos O, empresas E WHERE T.id_requisicao = @id_requisicao AND T.id_orcamento = O.id_orcamento AND E.id_empresa = T.id_empresa; END IF; END IF; END;
  20. Jesc, Respondendo suas perguntas temos: Resp.: Sim. O relacionamento entre estas tabelas é de 1:1 podendo ser 0 na tabela filha.Daí a necessidade de implementar controles como os da próxima pergunta sua É um tipo lógico ou ENUM com sim ou não que informará se aquele registro possui uma especialização. Já que posso ter Pessoa física que não é jogador e pessoa jurídica que não é clube. Da mesma forma há um controlador em pessoa que me informa que tipo de pessoa é a minha especialização. Esqueci. Veja o porquê na resposta da questão 1 Veja se a resposta que dei neste Tópico te ajuda. Substitua ON DELETE NO ACTION E ON UPDATE NO ACTION por ON DELETE CASCADE e ON UPDATE CASCADE
  21. Oi, Jesc! Pelo que você explicou gerei o modelo em anexo. Avalie e informe onde e o que não entendeu. clube_futebol.pdf
  22. Oi, akira2005! Com base no modelo apresentado em anexo no post#2 faça o seguinte: Na tabela Alunos acrescente o atributo Senha Na tabela Boletim - substitua o atributo "notas do I Bimestre" pelos atributos B1_avaliação1, B1_trabalho, B1_avaliação2 - substitua o atributo "notas do II Bimestre" pelos atributos B2_avaliação1, B2_trabalho, B2_avaliação2 - substitua o atributo "notas do III Bimestre" pelos atributos B3_avaliação1, B3_trabalho, B3_avaliação2 As médias, por serem campos calculados, obtidos da expressão ((avaliação 1 + trabalho + avaliação 2) / 3) não precisam ser guardadas como valores permanentes. Então não há a necessidade de criar atributos para elas. O atributo media anual, da mesma forma que as medias binestrais, também é um campo calculado e não há a necessidade de guardá-lo permanentemente. O atributo media da recuperação anual, , da mesma forma que as medias binestrais, também é um campo calculado e não há a necessidade de guardá-lo permanentemente. Acrecente o atributo Nota_Final Acrescente o atributo "Situação do aluno" CREATE TABLE Aluno ( ID_aluno integer unsigned not null auto_increment, Nome_Aluno varchar (60) not null, Senha varchar(45) not null, primary key (id_Aluno) )ENGINE=InnoDB; CREATE TABLE Curso ( ID_Curso integer unsigned not null auto_increment, Nome_Curso varchar(50) not null, primary key (ID_Curso) )ENGINE=InnoDB; CREATE TABLE Materias ( ID_Materia integer unsigned not null auto_increment, Nome_Materia varchar(50) not null, primary key (ID_Materia) )ENGINE=InnoDB; CREATE TABLE Turma ( ID_Curso integer unsigned not null, ID_Turma integer unsigned not null auto_increment, ID_Aluno integer unsigned not null, ID_Materia integer unsigned not null, primary key (ID_Curso, ID_Turma) )ENGINE=InnoDB; ALTER TABLE Turma ADD CONSTRAINT FK_Curso (ID_Curso) REFERENCES Curso (ID_Curso) ON UPDATE NO ACTION, ON DELETE NO ACTION, ADD CONSTRAINT FK_Aluno (ID_Aluno) REFERENCES Aluno (ID_Aluno) ON UPDATE NO ACTION, ON DELETE NO ACTION, ADD CONSTRAINT FK_Materia (ID_Materia) REFERENCES Materia (ID_Materia) ON UPDATE NO ACTION, ON DELETE NO ACTION; O resto você faz. ADD CONSTRAINT estabelece os relacionamentos criando a integridade referencial necessária. Este comando só é valido se você utilizar o engine InnoDB em suas tabelas.
  23. Oi, Mauro! O seu job está dando erro nesta linha? SELECT jobscombrasil.data_entrada , jobscom4brasil.data_saida ,jobscom4brasil.orcamento, jobscom4brasil.orcamento_rs, Que tabela é jobscombrasil? Não seria jobscom4brasil? O erro também está nesta linha cliente.nome_cliente,representantes.nome,status_producao.producao, status_pedido.entrega Que tabela é status_pedido? não seria a tabela abaixo status_entrega? inner join status_entrega on jobscom4brasil.idstatus_entrega = status_entrega.idstatus_entrega Para evitar erros deste tipo, faça uso de alias "apelidos" que facilitam a digitação. Veja sua query modificada abaixo: (estou assumindo que jobscombrasil é, na verdade, jobscom4brasil e que status_pedido é status_entrega) SELECT j.data_entrada , j.data_saida , j.orcamento, j.orcamento_rs, j.disco , j.descricao , j.numero, c.nome_cliente, r.nome, sp.producao, se.entrega FROM jobscom4brasil j INNER JOIN cliente c ON j.idcliente = c.idcliente INNER JOIN representantes r ON j.idrepresentante = r.idrepresentante INNER JOIN status_producao sp ON j.idstatus_producao = sp.idstatus_producao INNER JOIN status_entrega ON j.idstatus_entrega = se.idstatus_entrega WHERE j.idjobscom4brasil='.$id;
  24. Denis Courcy

    Actualização de dados

    Pode melhorar sua pergunta, por favor?
  25. Através da linha de comando command(cmd) no windows ou do shell no linux, digite: mysql -u root -p aparecerá o prompt do mysql mysql> digite mysql> source meuarquivo.txt após a carga digite mysql> quit; Pronto. está carregado.
×
×
  • Criar Novo...