Jump to content
  • 0
dariowb

Erro utilizando Delphi XE 8 + Firedac + MySQL

Question

Boa tarde.
Estou com um erro e não consigo solucionar.

Tenho um programa feito em Delphi XE 8 com MySQL utilizando Firedac.

Consigo ativar normalmente minha query em tempo de desenvolvimento, mas em run time apresenta o seguinte erro:

---------------------------
Debugger Exception Notification
---------------------------
Project GestorEstoque.exe raised exception class EDatabaseError with message 'qProduto: Type mismatch for field 'cdproduto', expecting: LongWord actual: AutoInc'.
---------------------------
Break   Continue   Help   
---------------------------
 

erro.PNG.d872fbc8f63a9e365fd5e65746cccc27.PNG

 

Este erro ocorre quando tento pesquisar o produto pelo campo cdproduto.

Pesquisei bastante na internet, falaram para remover os campos e adicionar novamente, fiz isso e não adiantou.

O que resolveu temporariamente foi eu alterar o campo no MySQL, alterei o campo cdproduto de INT para INT(6), mas depois de um tempo ele voltar o problema.

O que não entendo é porque no Field Editor da minha query produto, o campo cdproduto esta como TLongWordField

tipo.PNG.2915af919912f52a1adb3e20d6a9afa0.PNG

Tenho outras tabelas com o mesmo tipo de campo INT com AutoIncremento e no Field Editor da query ele reconhece o campo como tipo TFDAutoIncField.

Sou novo com MySQL, até então eu utilizava Firebird, pode ser algo simples mas não estou conseguindo resolver.

Alguém ja teve o mesmo problema ou alguém que possa me dar um norte para eu identificar o problema?

Agradeço a atenção


Dario

Share this post


Link to post
Share on other sites

1 answer to this question

Recommended Posts

  • 0

Consegui resolver o problema, mas não entendi, se alguém souber o motivo e puder me explicar eu agradeço.

Identifiquei que as query's que criavam os campos do tipo TLongWord eram as query's com join.

As query's com um select somente em uma tabela era criado o campo do tipo TFDAutoInc.

Quando criei a tabela no MySQL eu criei os campos do tipo INT com UNSIGNED, removi o UNSIGNED dos campos, exclui os campos da query e adicionei novamente e o tipo agora ficou como TImtegerField e não deu mais problema.

Tem uma explicação para isso ou pode ser um bug do FireDAC ou Delphi XE 8?

Obrigado.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By manoaj
      Boa noite pessoal!
      Alguém ai entente dos checkouts do Mercado Pago pra me explicar como eu obtenho os dados da preferência criada através da url disponível na API
      https://api.mercadopago.com/checkout/preferences/:id?access_token=ACCESS_TOKEN_ENV  
    • By gersonab
      Bom dia, tenho um select onde gostaria de ordenar o mesmo pelo dia do campo date , segue o mesmo 
      $mesatual = date("m"); $consulta = $pdo->query("SELECT * FROM cli WHERE MONTH(datan) = '$mesatual' ORDER BY DAY(datan) ASC"); não esta ordenando o mesmo, teria de ser pelo dia, pois o mês vai ser sempre o atual e o ano varia conforme data de nascimento.
       
      exemplo de como esta aparecendo :
      18/07/2019
      14/07/2019
      preciso que seja assim :
      14/07/2019
      18/07/2019
    • By Igor Gabriel
      Boa Tarde, estou com uma dúvida.
       
      Estou criando um site para uma imobiliárias, fiz um sistema de cadastro todo bonitinho onde se encontra funcionando perfeitamente. Contudo fora do sistema, no site, quando clico para ver os imoveis, tenho a listagem de todos os imoveis já cadastrados. Quando entro na página para ver mais do Imóvel é trazido consigo todas as informações presentes no banco, ao invés de uma só. Como faço para trazer uma única informação específica do banco?
    • By leocouto
      Pegar um dado específico de uma tabela, caso tenha mais de um item cadastrado sempre vai pegar o último.
      <form name="editaFornecedor"<?php +1?> action="edit_forne.php" id="editaFornecedor" method="POST"> <!-- Pegando todos os fornecedores cadastrados... --> <table class="table table-striped"> <thead class="thead-dark"> <tr> <th scope="col">ID</th> <th scope="col">Nome</th> <th scope="col">Fone</th> <th scope="col">CNPJ</th> <th scope="col">Rua</th> <th scope="col">Número</th> <th scope="col">Bairro</th> <th scope="col">Estado</th> <th scope="col">Cidade</th> <th scope="col">CEP</th> <th scope="col">E-mail</th> <th scope="col">Observação</th> <th scope="col">Editar|Deletar</th> </tr> </thead> <?php @session_start(); include('conexao.php'); $fornecedor = mysqli_query($conexao, "SELECT * FROM fornecedor"); $linhas = mysqli_num_rows($fornecedor); while ($linhas = mysqli_fetch_array($fornecedor)) { ?> <tbody> <tr> <td><?php echo $linhas['id_fornecedor']; ?></td> <td><?php echo $linhas['nome']; ?></td> <td><?php echo $linhas['fone']; ?></td> <td><?php echo $linhas['cnpj']; ?></td> <td><?php echo $linhas['rua']; ?></td> <td><?php echo $linhas['numero']; ?></td> <td><?php echo $linhas['bairro']; ?></td> <td><?php echo $linhas['estado']; ?></td> <td><?php echo $linhas['cidade']; ?></td> <td><?php echo $linhas['cep']; ?></td> <td><?php echo $linhas['email']; ?></td> <td><?php echo $linhas['observacao']; ?></td> <td> <button type="submit" class="btn btn-secondary" style="height: 35px; width: 100px"><i class="material-icons">description</i>Editar</button><br> <button type="button" class="btn btn-danger" style="height: 35px; width: 100px"><i class="material-icons">delete</i>Deletar</button> </td> <td><input type="text" name="id_fornecedor" value="<?php echo $linhas['id_fornecedor'];?>"></td> </tr> </tbody> <?php } ?> </table> <!-- Fim da exibição de todos os fornecedores cadastrados.. --> </form>  
       
      ======================================================================================================================================================
      Aqui no MYSQL só pega o último item da tabela.. Não pega o que foi clicado no botão.
      <?php include('conexao.php'); session_start(); //$cnpj=$_POST['cnpj']; $id_fornecedor=$_POST['id_fornecedor']; echo $id_fornecedor; ?> =======================================================================================================================================================
      É desse modelo da imagem, mas na hora que clico em editar no mysql aparece o último id e não na linha que cliquei, se eu clicar no primeiro na outra página aparece o id 4, que é o ultimo, quem pode me dar essa força? Ficarei muito grato.

    • By Felipe_N22
      Pessoal, como que eu crio uma rotina no MySQL para efetuar delete de registros inseridos nos últimos 30 dias, e fazer com que esse procedimento rode todos os dias automaticamente em determinado horário?
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.