botão gravar não ta funcionando 2 vezes em sequencia

Delphi

24/09/2012

Olá amigos..

tenho um projeto com menus e 3 tipos de cadastros com registros diferentes ok...

ao tentar inserir um novo registro em sequencia no formsuportetecnico da este erro..

[b]'ADOQuerysqlsuptec: commandtext does not return a result set'[/b]

o cursor depois que eu fecho a mensagem de erro para nesta linha...
DM.ADOQuerySQLsuptec.Last;


segue o código do botão gravar..

procedure Tfrmsuportetecnico.btngravarClick(Sender: TObject);
var
reg : integer;
begin
DM.ADOQuerySQLsuptec.active := true;
DM.ADOQuerySQLsuptec.Last;
reg := DM.ADOQuerySQLsuptec.recordcount;
reg := reg + 1;
DM.ADOQuerySQLsuptec.SQL.CLEAR;
DM.ADOQuerySQLsuptec.SQL.ADD('insert into suportetecnico');
DM.ADOQuerySQLsuptec.SQL.ADD('(filial, setor, nomepc, ip, datasup, nomefunc, descricaosup)');
DM.ADOQuerySQLsuptec.SQL.ADD('values(:filial, :setor, :nomepc, :ip, :datasup, :nomefunc, :descricaosup)');
DM.ADOQuerySQLsuptec.Parameters.ParamByName('filial').Value := combobox.text;
DM.ADOQuerySQLsuptec.Parameters.ParamByName('setor').Value := edit1.text;
DM.ADOQuerySQLsuptec.Parameters.ParamByName('nomepc').Value := edit2.text;
DM.ADOQuerySQLsuptec.Parameters.ParamByName('ip').Value := edit3.text;
DM.ADOQuerySQLsuptec.Parameters.ParamByName('datasup').Value := FormatDatetime('yyyy/mm/dd', Strtodate(maskedit1.text));
DM.ADOQuerySQLsuptec.Parameters.ParamByName('nomefunc').Value := edit4.text;
DM.ADOQuerySQLsuptec.Parameters.ParamByName('descricaosup').Value := edit5.text;
DM.ADOQuerySQLsuptec.execsql;
showmessage('Dados gravados c/ sucesso!');
combobox.Text:='';
edit1.Text:='';
edit2.Text:='';
edit3.Text:='';
maskedit1.Text:='';
edit4.Text:='';
edit5.Text:='';
end;
Mauricio Nicoli

Mauricio Nicoli

Curtidas 0

Respostas

Joel Rodrigues

Joel Rodrigues

24/09/2012

Inicialmente você está usando o DataSet para fazer uma consulta, com uma instrução SQL pré-definida. Depois você altera o SQL para uma instrução de inserção.
Na segunda vez, você tenta abrir o DataSet como se estivesse fazendo uma consulta, mas a instrução atual é de INSERT, por isso a mensagem de que o DataSet não retorna um conjunto de registros.
Vejo duas possibilidades de correção:
1) Após inserir, você retorna o SQL para a consulta;
2) Você não faz o isnert usando a instrução INSERT diretamente, faz isso abrindo o DataSet e usando a função Add ou Append e depois um Post.

Boa sorte
GOSTEI 0
Mauricio Nicoli

Mauricio Nicoli

24/09/2012

como ficaria o SQL para a consulta?

sou iniciante em delphi ainda..

grato
GOSTEI 0
Claudia Nogueira

Claudia Nogueira

24/09/2012

como ficaria o SQL para a consulta?

sou iniciante em delphi ainda..

grato



Uma solução seria você guardar o comando SQL que tinha antes de você alterar para usar o insert em uma variável, e depois do ExecSQL você atribuir novamente ao componente.


var
  reg : integer; 
  sBk_SQL : String;
begin
sBk_SQL := DM.ADOQuerySQLsuptec.SQL.Text;
DM.ADOQuerySQLsuptec.active := true;
DM.ADOQuerySQLsuptec.Last;
reg := DM.ADOQuerySQLsuptec.recordcount;
reg := reg + 1;
DM.ADOQuerySQLsuptec.SQL.CLEAR;
DM.ADOQuerySQLsuptec.SQL.ADD('insert into suportetecnico');
DM.ADOQuerySQLsuptec.SQL.ADD('(filial, setor, nomepc, ip, datasup, nomefunc, descricaosup)');
DM.ADOQuerySQLsuptec.SQL.ADD('values(:filial, :setor, :nomepc, :ip, :datasup, :nomefunc, :descricaosup)');
DM.ADOQuerySQLsuptec.Parameters.ParamByName('filial').Value := combobox.text;
DM.ADOQuerySQLsuptec.Parameters.ParamByName('setor').Value := edit1.text;
DM.ADOQuerySQLsuptec.Parameters.ParamByName('nomepc').Value := edit2.text;
DM.ADOQuerySQLsuptec.Parameters.ParamByName('ip').Value := edit3.text;
DM.ADOQuerySQLsuptec.Parameters.ParamByName('datasup').Value := FormatDatetime('yyyy/mm/dd', Strtodate(maskedit1.text));
DM.ADOQuerySQLsuptec.Parameters.ParamByName('nomefunc').Value := edit4.text;
DM.ADOQuerySQLsuptec.Parameters.ParamByName('descricaosup').Value := edit5.text;
DM.ADOQuerySQLsuptec.execsql;
//Isso aqui é pra voltar o que  já tinha no SQL do componente
DM.ADOQuerySQLsuptec.Close;
DM.ADOQuerySQLsuptec.SQL.Text := sBk_SQL;
DM.ADOQuerySQLsuptec.Open;

showmessage('Dados gravados c/ sucesso!');
combobox.Text:='';
edit1.Text:='';
edit2.Text:='';
edit3.Text:='';
maskedit1.Text:='';
edit4.Text:='';
edit5.Text:='';
end;

GOSTEI 0
Claudia Nogueira

Claudia Nogueira

24/09/2012

Esqueci de mencionar que o código que passei só funcionaria se no SQL do componente já estivesse o SQL para consulta, exemplo:

SELECT * FROM suportetecnico


Nesse caso retornaria todos os campos da tabela suportetecnico.
GOSTEI 0
Mauricio Nicoli

Mauricio Nicoli

24/09/2012

obrigado
GOSTEI 0
Alisson Santos

Alisson Santos

24/09/2012

Consegui resolver o seu problema??
GOSTEI 0
Mauricio Nicoli

Mauricio Nicoli

24/09/2012

consegui..obrigado..mas tenho mais duvidas sobre outras coisas..vou postar logo..
GOSTEI 0
POSTAR