Curso de dbExpress e DataSnap

Parte XVIII – CommandText

Neste artigo, veremos como usar a propriedade CommandText do ClientDataSet. Ela permite que você repasse comandos SQL a partir de uma camada cliente em um cenário multicamadas, dando maior flexibilidade a sua solução. Ideal para reaproveitamento de código e componentes, pois podemos usar um único par “DataSetProvider / ClientDataSet” para executar uma série de consultas no BD.

Configure uma conexão dbExpress para o banco EMPLOYEE do Interbase. Coloque um SQLConnection apontando para essa conexão. Coloque também um SQLQuery, um DataSetProvider, um ClientDataSet, um DataSource, um DBGrid, um Button e um Memo. Configure os componentes conforme o código a seguir:

 

  object DBGrid1: TDBGrid

    DataSource = DataSource1

  end

  object DataSource1: TDataSource

    DataSet = ClientDataSet1

  end

  object ClientDataSet1: TClientDataSet

    ProviderName = 'DataSetProvider1'

  end

  object DataSetProvider1: TDataSetProvider

    DataSet = SQLQuery1

  end

  object SQLQuery1: TSQLQuery

    SQLConnection = SQLConnection1

  end

  object SQLConnection1: TSQLConnection

    ConnectionName = 'EMPLOYEE'

    LoginPrompt = False

    Connected = False

    KeepConnection = False

    Params.Strings = (

      'DriverName=Interbase'

      'Database=C:\Borland\InterBase\examples\database\employee.gdb'

      'User_Name=sysdba'

      'Password=masterkey'

      'ServerCharSet=WIN1252'

      'SQLDialect=3')

  end

 

Seu formulário deve estar semelhante ao mostrado a seguir:

ver imagem 1

Figura 1.

O código do botão Executar é mostrado a seguir:

 

procedure TFrmMain.BitBtn1Click(Sender: TObject);

begin

  ClientDataSet1.Close;

  ClientDataSet1.CommandText := Memo1.Lines.Text;

  ClientDataSet1.Open; 

end;

 

Observe que aqui repassamos a instrução SQL digitada no memo para a propriedade CommandText do ClientDataSet, e não para o SQLQuery. O CDS se encarregará de enviar isso ao DataSetProvider, que vai repassa-la ao cursor dbExpress associado e executar o comando no BD. Você pode, até mesmo, passar parâmetros (Params) no ClientDataSet.

No evento OnCreate do form, configuramos a propriedade Options do DataSetProvider para incluir o AllowCommandText, que deve estar True. Isso indica ao DSP que o mesmo pode receber comandos SQL a partir do CDS:

 

procedure TFrmMain.FormCreate(Sender: TObject);

begin

   DataSetProvider1.Options := [poAllowCommandText];

end;

 

Essa configuração também pode ser feita diretamente no Object Inspector:

ver imagem 2

Figura 2.

 

Executando a aplicação, temos o resultado mostrado a seguir:

ver imagem 3

Figura 3.

 

Download

Leia todos artigos da série