Inserir Autoincremento em outra tabela....

Delphi

07/10/2005

Awe.....
Galera preciso novamente da ajuda de vcs!!!!
Tenho Uma Tabela chamado ROMANEIO, ela tem um campo chamado ID_ROMANEIO, esse campo eh autoincremento...até ai tudo bem, ele gera o número e etc...
Eu tenho outra tabela, chamada ENCOMENDAS, ela possui um campo chamado ROMANEIO.
Eu preciso gerar um número para o ID_ROMANEIO e ´jogar´ esse número no campo ROMANEIO de algumas encomendas, algumas nem todas, ai vcs me falam, gera pega o número, vai na tela de cadastro e coloca no campo....não eu naum qro isso, eu qro fazer isso apenas clicando em um botão!!!!
Entaum pensei nesse código:

with DM.qry do
begin
  Close;
  SQL.Clear;
  SQL.Add (´Update encomendas´);
  SQL.Add (´set Romaneio = :roman where ID_ENCOMENDA = :encomenda´);
  Params[0].AsInteger := StrtoInt(Edit1.Text);
  Params[1].AsInteger := StrtoInt(Edit2.Text);
  ExecSQL;
  Open;
  Close;
  SQL.Add (´select * from encomendas where Romaneio = :roman´);
  Params[0].AsInteger := StrtoInt(Edit2.Text);
  ExecSQL;

Só q ele me retorna o erro Cursor not returned from query....
Alguém sabe como resolver? ou tem uma forma melhor para resolver isso?????
Utilizo Firebird e DBExpress...
Agradeço desde já, obrigado!!!!!!!!!


Ramms

Ramms

Curtidas 0

Respostas

Rjun

Rjun

07/10/2005

Tira esse open/close depois do primeiro ExecSQL. Não tem o minimo sentido esses comandos aí.


GOSTEI 0
Ramms

Ramms

07/10/2005

mas ele faz a função funcionar???


GOSTEI 0
Rjun

Rjun

07/10/2005

Se você falasse onde ocorre o erro ficaria mais fácil. Outra coisa, esse segundo ExecSQL está errado. Para comandos SELECT, utilize Open. Para comandos Insert/Update/Delete, utilize ExecSQL.


GOSTEI 0
Ramms

Ramms

07/10/2005

Se você falasse onde ocorre o erro ficaria mais fácil. Outra coisa, esse segundo ExecSQL está errado. Para comandos SELECT, utilize Open. Para comandos Insert/Update/Delete, utilize ExecSQL.


O erro ocorre na hr que eu clico no botão...em run time....
Vlw...


GOSTEI 0
Vinicius2k

Vinicius2k

07/10/2005

Colega,

Vc está se esquecendo de limpar a SQL da query, então, a segunda execução está ´misturada´ à primeira. Além é claro do que o RJun já lhe disse.

Close; 
SQL.Clear; 
SQL.Add (´Update encomendas´); 
SQL.Add (´set Romaneio = :roman where ID_ENCOMENDA = :encomenda´); 
Params[0].AsInteger := StrtoInt(Edit1.Text); 
Params[1].AsInteger := StrtoInt(Edit2.Text); 
ExecSQL; 
//
SQL.Clear;
SQL.Add (´select * from encomendas where Romaneio = :roman´); 
Params[0].AsInteger := StrtoInt(Edit2.Text); 
Open;



GOSTEI 0
Ramms

Ramms

07/10/2005

[quote:ecb279f16a=´Rjun´]Se você falasse onde ocorre o erro ficaria mais fácil. Outra coisa, esse segundo ExecSQL está errado. Para comandos SELECT, utilize Open. Para comandos Insert/Update/Delete, utilize ExecSQL.


O erro ocorre na hr que eu clico no botão...em run time....
Vlw...[/quote:ecb279f16a]

Detalhe, esse erro ocorre tanto em Query´s e ClientDataSet...


GOSTEI 0
Vinicius2k

Vinicius2k

07/10/2005

Vc leu minha resposta? :roll:


GOSTEI 0
Ramms

Ramms

07/10/2005

Vc leu minha resposta? :roll:


HEUIAHUIEUheaiHUIEHie vc postou ao msm tempo que eu kra, malz...

Testei o seu Vinicius e ´funcionou´ só num tha dando o UPDATE que eh o que eu preciso, simplesmente ele não dah o update.....
o código ficou assim
with DM.qry do
begin
Close;
SQL.Clear;
SQL.Add (´UPDATE ENCOMENDAS SET ROMANEIO = :roman WHERE ID_ENCOMENDA = :encomenda´);
Params[0].AsInteger := StrtoInt(Edit1.Text);
Params[1].AsInteger := StrtoInt(Edit2.Text);
ExecSQL;
//
end;
with DM.ClientDataSet4 do
begin
Close;
CommandText := (´select * from encomendas where Romaneio = :roman´);
Params[0].AsInteger := StrtoInt(Edit2.Text);
Open;


Eu estou usando o CDS ai no final para listar num DBGRID....

vlw


GOSTEI 0
Ramms

Ramms

07/10/2005

Alguém?


GOSTEI 0
POSTAR