*Fonte Arquivo de Códigos
O método ExecSQL() da classe TSQLDataSet é usado quando queremos executar comandos SQL que não retornam um conjunto de dados. Este comando pode ser INSERT, UPDATE, DELETE, CREATE TABLE, etc, exceto SELECT.
Veja a assinatura deste método:
function ExecSQL(ExecDirect: Boolean = False): Integer; override;
ExecDirect é usado para indicar que a query não precisa ser preparada antes de ser executada. Este parâmetro pode ser definido como True se o comando não incluir nenhum parâmetro. Se o valor for False, a query será preparada antes de ser executada.
Vamos ver um exemplo? Veja um trecho de código no qual usamos o método ExecSQL() para disparar um comando SQL UPDATE. Note que aqui estamos usando um comando SQL preparado (pré-compilado):
procedure TForm3.Button1Click(Sender: TObject);
var
nome: string;
id: integer;
begin
nome := 'OSMAR J. SILVA';
id := 2; // id do registro a ser atualizado
// vamos definir o comando SQL a ser executado
SQLDataSet1.CommandText := 'UPDATE contatos SET nome = :nome WHERE id = :id';
SQLDataSet1.Params[0].Name := 'nome';
SQLDataSet1.Params[0].Value := nome;
SQLDataSet1.Params[1].Name := 'id';
SQLDataSet1.Params[1].Value := id;
// como o comando é preparado, vamos definir o valor
// False para o parâmetro ExecDirect
SQLDataSet1.ExecSQL(False);
// vamos mostrar uma mensagem indicando o sucesso da operação
ShowMessage('Comando SQL executado com sucesso.');
end;
É importante observar que o método ExecSQL() retorna o número de linhas afetadas pelo comando. O valor retornado se torna o valor da propriedade RowsAffected. Veja como modificar o código anterior para retornar a quantidade de linhas afetadas:
procedure TForm3.Button1Click(Sender: TObject);
var
nome: string;
id: integer;
linhasAfetadas: integer;
begin
nome := 'OSMAR J. SILVA';
id := 2; // id do registro a ser atualizado
// vamos definir o comando SQL a ser executado
SQLDataSet1.CommandText := 'UPDATE contatos SET nome = :nome WHERE id = :id';
SQLDataSet1.Params[0].Name := 'nome';
SQLDataSet1.Params[0].Value := nome;
SQLDataSet1.Params[1].Name := 'id';
SQLDataSet1.Params[1].Value := id;
// como o comando é preparado, vamos definir o valor
// False para o parâmetro ExecDirect
linhasAfetadas := SQLDataSet1.ExecSQL(False);
// vamos mostrar uma mensagem indicando o sucesso da operação
ShowMessage('Comando SQL executado com sucesso. ' +
IntToStr(linhasAfetadas) + ' linhas afetadas.');
end;
Lembre-se que não podemos usar ExecSQL() com comandos que retornam dados. Estes comandos incluem todos os comandos do tipo ctTable, queries SELECT e stored procedures que retornam um cursor. Quando o comando retornar dados, devemos usar o método Open ou definir a propriedade Active do SQLDataSet como True.
Nenhum comentário:
Postar um comentário