Problemas : Cursor not Returned from Query

01/07/2008

2

Bom... procurei bastante no google sobre o assunto
todo mundo falando pra usar ExecSQL no lugar de Open...
segui a dica, porém continua dando o erro...


A estrutura é mais ou menos assim....

 
With DataModule1.SQLQueryClientes do
       begin

SQL.Clear;
SQL.Add(´Insert into Clientes´);
SQL.Add(´ (nome,residencia,fone,bairro,cidade,referencia,endereco_cob,naturalidade,uf,estado_civil,profissao,firma,pai, mae,rg,sexo,nascimento) ´);
SQL.Add(´Values (:nome,:residencia,:fone,:bairro,:cidade,:referencia,´
        +´:endereco_cob,:naturalidade,:uf,:estadocivil,´
        +´:profissao,:firma,:pai,:mae,:rg,:sexo,:nascimento)´);

ParamByName(´nome´).Value:= DbContribuinte.Text;
ParamByName(´residencia´).Value:= Dbendereco.Text;
ParamByName(´fone´).Value:= Dbfone.Text;
ParamByName(´bairro´).Value:= Dbbairro.Text;
ParamByName(´cidade´).Value:= Dbcidade.Text;
ParamByName(´referencia´).Value:= Dbreferencia.Text;
ParamByName(´endereco_cob´).Value:= Dbendereco.Text;
ParamByName(´naturalidade´).Value:= Dbnaturalidade.Text;
ParamByName(´uf´).Value:= DbEstado.ItemIndex;
ParamByName(´nascimento´).Value:= Dbnascimento.Text;
ParamByName(´estadocivil´).Value:= DbEstadocivil.Text;
ParamByName(´profissao´).Value:= Dbprofissao.Text;
ParamByName(´firma´).Value:= Dbfirma.Text;
ParamByName(´pai´).Value:= Dbpai.Text;
ParamByName(´mae´).Value:= dbmae.Text;
ParamByName(´rg´).Value:= Dbrg.Text;
ParamByName(´sexo´).Value:= DbSexo.ItemIndex;
Try
ExecSQL;

if Application.MessageBox(´Cadastro Efetuado com sucesso, Deseja inserir Beneficiaios ?´, ´Cadastro´, MB_ICONQUESTION + MB_YESNO + MB_DEFBUTTON1) = ID_YES then
   begin
    FrmCadastroBeneficiario.ShowModal;
   end;
except
on e: exception do ShowMessage(e.Message);
end;
Self.Close;

end;



Isso ta ocorrendo corretamente, e após isso é necessário ir pra otro form onde deve ser cadastrado beneficiarios... e é nesse form que dá o erro ...
lembrando que não estou usando open, e sim o ExecSQL....

no onclick de um botão coloquei...
basicamente precisei atualizar o ClientDataSetClientes para poder seguir normalmente no curso do programa, e nisso gerou o erro...



Var str: string;
begin
str:= InputBox(´Beneficiários´,´Código de Contrato´,´´);

if Length(str) = 0 then exit;

with   DataModule1.ClientDataSetClientes do
       begin
       Close;
       Open;
       Filtered:= False;
       Filter:=´id = ´ + str;
       Filtered:= true;
       end;

with   DataModule1.ClientDataSetBeneficiarios do
       begin
       Close;  
       Open;  
       Filtered:= False;
       Filter:=´id = ´ + str;
       Filtered:= true;
       end;

with   DataModule1.SQLQueryInserir do
       begin
       SQL.Clear;
       SQL.Add(´Select * From beneficiarios where id = :ID´);
       ParamByName(´ID´).AsString:= str;
       Try
       ExecSQL;
       LabelCount.Caption:= IntToStr(RowsAffected);
       LabelCount.Update;
       Except end;
       end;
end;



Alguma idéia ?
Qualquer critica construtiva é bem-vinda... e soluções...
Obrigado
:)


Responder

Posts

01/07/2008

Joaoshi

Colega, neste caso, substitua o [b:7903e9deb6]ExecSQL[/b:7903e9deb6] por [b:7903e9deb6]Open[/b:7903e9deb6]

with   DataModule1.SQLQueryInserir do 
       begin 
       SQL.Clear; 
       SQL.Add(´Select * From beneficiarios where id = :ID´); 
       ParamByName(´ID´).AsString:= str; 
       Try 
       // ExecSQL;   --> nesta linha
       Open;
       LabelCount.Caption:= IntToStr(RowsAffected); 
       LabelCount.Update; 
       Except end; 
       end; 


Basicamente quando for utilizar um [b:7903e9deb6]SELECT[/b:7903e9deb6] utilize o [b:7903e9deb6]OPEN[/b:7903e9deb6].
Quando for utilizar INSERT, UPDATE, DELETE utilize o ExecSQL.


Espero ter ajudado.


Responder

01/07/2008

Lucas_msn

Obrigado irmão pela dica, contudo o erro continua
to batendo cabeça... qualquer ajuda é sempre bem vinda...
obrigado novamente


Responder

01/07/2008

Lucas_msn

vlw amigo... eu que estava praticando erro
obrigado ai pela força e desculpa em ensistir no erro
xD

até


Responder