Array
(
    [0] => stdClass Object
        (
            [Votos_Balanceados] => 1
            [id] => 578197
            [titulo] => Campo auto_inc (MySQL) com FireDAC + Datasnap
            [dataCadastro] => DateTime Object
                (
                    [date] => 2017-03-20 21:41:19
                    [timezone_type] => 3
                    [timezone] => America/Sao_Paulo
                )

            [isFirstPost] => -1
            [idUsuario] => 316364
            [status] => A
            [isExample] => -1
            [NomeUsuario] => Jones Granatyr
            [Apelido] => 
            [Foto] => 316364_20160509203219.png
            [Conteudo] => Olá Júlio!

Sim, com o FireDAC você já tem todo o gerenciamento dos campos autoincremento, independente da base de dados (não precisa codificar funções adicionais). Sairá um artigo justamente sobre isso em breve na Clube Delphi

Jones ) )

Campo auto_inc (MySQL) com FireDAC + Datasnap

Jcmferreira
|
MVP
    20 mar 2017

Olá, boa tarde!
Tenho uma aplicação cliente - servidor, utilizando o dbExpress em 100%. Até então, a divisão ficava da seguinte forma:
1. App Servidor: TSQLConnection + TSQLQuery + TDataSetProvider
2. App Cliente: TSQLConnection + TDSProviderConnection + TClientDataSet
Na aplicação servidor, era realizada a configuração do ProviderFlags no componente TDataSetProvider. Existia a implementação do método OnAfterUpdateRecord que definia o ID inserido do registro da seguinte forma:
#Código DataSet.FieldByName( mPrimaryKey ).NewValue := ServerConnection.Resources.LastId;
Aonde, a função ServerConnection.Resources.LastId retorna o valor da chamada "select last_id_insert()" do MySQL.
Essa implementação acima permitia que, ao se realizar um ApplyUpdates na aplicação cliente, o ID do registro inserido fosse "automaticamente" recuperado.

Atualmente, já consegui migrar todo o lado servidor para utilizar o FireDAC e os componentes ficaram e o lado cliente continuou com o de antes:
1. Aoo Servidor: TFDConnection + TFDQuery + TDataSetProvider
2. App Cliente: TSQLConnection + TDSProviderConnection + TClientDataSet
O problema é que não consigo recuperar o ID do registro inserido de forma transparente para o cliente. Antes, após o ApplyUpdates, já era possível acessar o campo com um AsInteger e lá estava o valor correto. Hoje, com FireDAC, ainda não é possível.

Tenho duas dúvidas básicas:
1º É possível utilizar 100% FireDAC cliente + servidor e ainda ter essa gama de recursos que o dbExpress permitia?
2º Caso contrário, como é possível conseguir recuperar o ID auto_increment de um registro inserido?
Agradeço antecipadamente pela ajuda!
Obrigado à todos.

Post mais votado

Jones Granatyr
|
MVP
Pontos: 735
    20 mar 2017

Olá Júlio!

Sim, com o FireDAC você já tem todo o gerenciamento dos campos autoincremento, independente da base de dados (não precisa codificar funções adicionais). Sairá um artigo justamente sobre isso em breve na Clube Delphi

Jones

Jcmferreira
|
MVP
    21 mar 2017


Citação:
Olá Júlio!

Sim, com o FireDAC você já tem todo o gerenciamento dos campos autoincremento, independente da base de dados (não precisa codificar funções adicionais). Sairá um artigo justamente sobre isso em breve na Clube Delphi

Jones
Muito bom Jones! Existe data para isso? Estou empacado nisso.
Na verdade, já consegui fazer de três formas diferentes, mas todas elas requer grande modificação na estrutura atual do sistema.

Uma, e confesso que foi a que mais gostei, é utilizando o FireDACJSONReflection. Tudo via stream e extremamente rápido. Passa a utilizar apenas componentes FireDAC, tanto no servidor como no cliente.