botão gravar não ta funcionando 2 vezes em sequencia
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...
segue o código do botão gravar..
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
Curtidas 0
Respostas
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
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
24/09/2012
como ficaria o SQL para a consulta?
sou iniciante em delphi ainda..
grato
sou iniciante em delphi ainda..
grato
GOSTEI 0
Claudia Nogueira
24/09/2012
como ficaria o SQL para a consulta?
sou iniciante em delphi ainda..
grato
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
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:
Nesse caso retornaria todos os campos da tabela suportetecnico.
SELECT * FROM suportetecnico
Nesse caso retornaria todos os campos da tabela suportetecnico.
GOSTEI 0
Mauricio Nicoli
24/09/2012
obrigado
GOSTEI 0
Alisson Santos
24/09/2012
Consegui resolver o seu problema??
GOSTEI 0
Mauricio Nicoli
24/09/2012
consegui..obrigado..mas tenho mais duvidas sobre outras coisas..vou postar logo..
GOSTEI 0