Ir para conteúdo
Fórum Script Brasil
  • 0

Erro em UPDATE


mauriciocuri

Pergunta

Olá. Alguém pode dar uma mão? Uso ADO+ ACCESS. O que está errado no meu update abaixo(Raised Exception class EoleException with message 'Objeto parameter definido incorretamente. As informações são inconsistentes ou incompletas'.), pois gostaria que ao localizar o registro já existente, fizesse um update(para alterar o registro existente e evitar a duplicidade de registros). Caso contrário, salvar os demais dadoas do Listview.

procedure TForm1.BitBtnSalvarClick(Sender: TObject);
Var i : Integer;
begin
  inherited;
  DM2.ADOQry.SQL.Clear;
  DM2.ADOQry.Close;

  for i := 0 to item.Items.Count - 1 do
  begin
  DM2.ADOQry.SQL.text:= 'Select * from tab Where num_processo like :ParamNumProcListview';
  DM2.ADOQry.Parameters.ParamByName('ParamNumProcListview').Value:=(item.Items[i].SubItems[0]);
   DM2.ADOQry.Open;


  if not DM2.ADOQry.IsEmpty then
    begin
    showmessage(dm2.ADOQrynum_processo.Value);
    //DM2.ADOQry.Close;
    //DM2.ADOQry.SQL.Clear;
    with dm2.ADOQry do
    begin
    DM2.ADOQry.SQL.Add('Update tab set nome= :ParamNomeListview, num_processo= :ParamNumProcListview, obs= :ParamObsListview where num_processo= :ParamNumProcListview');

    DM2.ADOQry.Parameters.ParamByName('ParamNomeListview').Value:=(item.Items[i].Caption);
        DM2.ADOQry.Parameters.ParamByName('ParamNumProcListview').Value:=(item.Items[i].SubItems[0]);
    DM2.ADOQry.Parameters.ParamByName('ParamObsListview').Value:=(item.Items[i].SubItems[1]);
    showmessage(item.Items[i].Caption);
    DM2.ADOQry.ExecSQL;
    
    end;
    end

    else
  begin
    //DM2.ADOQry.Close;
    //DM2.ADOQry.Open;
    DM2.ADOQry.Insert;
    DM2.ADOQry.FieldByName('nome').AsString:= item.Items[i].Caption;
    DM2.ADOQry.FieldByName('num_processo').AsString:= item.Items[i].SubItems[0];
    DM2.ADOQry.FieldByName('obs').AsString:= item.Items[i].SubItems[1];
    DM2.ADOQry.Post;

  end;
  end;
item.Clear;
Edit1.SetFocus;
end;

Obrigado...

Editado por mauriciocuri
Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Var i : Integer;
begin
  inherited;

  DM2.ADOQry.SQL.Clear;
  DM2.ADOQry.Close;

  for i := 0 to item.Items.Count - 1 do
     begin

        DM2.ADOQry.SQL.text:= 'Select * from tab Where num_processo like :ParamNumProcListview';
        DM2.ADOQry.Parameters.ParamByName('ParamNumProcListview').Value:=(item.Items[i].SubItems[0]);
        DM2.ADOQry.Open;


        if not DM2.ADOQry.IsEmpty then
           begin
              showmessage(dm2.ADOQrynum_processo.Value);
              //DM2.ADOQry.Close;
              //DM2.ADOQry.SQL.Clear;
              with dm2.ADOQry do
                 begin
                    DM2.ADOQry.SQL.Add('Update tab set nome= :ParamNomeListview, num_processo= :ParamNumProcListview, obs= :ParamObsListview where num_processo= :ParamNumProcListview');

                    DM2.ADOQry.Parameters.ParamByName('ParamNomeListview').Value:=(item.Items[i].Caption);
                    DM2.ADOQry.Parameters.ParamByName('ParamNumProcListview').Value:=(item.Items[i].SubItems[0]);
                    DM2.ADOQry.Parameters.ParamByName('ParamObsListview').Value:=(item.Items[i].SubItems[1]);
                    showmessage(item.Items[i].Caption);
                    DM2.ADOQry.ExecSQL;

                 end;
           end
        else
           begin
             //DM2.ADOQry.Close;
             //DM2.ADOQry.Open;
             DM2.ADOQry.Insert;
             DM2.ADOQry.FieldByName('nome').AsString:= item.Items[i].Caption;
             DM2.ADOQry.FieldByName('num_processo').AsString:= item.Items[i].SubItems[0];
             DM2.ADOQry.FieldByName('obs').AsString:= item.Items[i].SubItems[1];
             DM2.ADOQry.Post;

           end;
     end;
     item.Clear;
     Edit1.SetFocus;
end;
Erro: Objeto parameter definido incorretamente veja 2 maneiras de se usar o parametro no ADOQuery
var
  MyDate: TDateTime

AdoQuery1.ParamByName('DueDate').AsDateTime := MyDate // data padrão do windows

//vs 

AdoQuery1.ParamValues['DueDate'] := MyDate // pode ser usado outros formatos de data

OBS: voce na sua sentença SQL esta adicionando um comando Update e um Insert sem que tenha fechado a query

atente para isso tambem

DM2.ADOQry.Open;

DM2.ADOQry.ExecSQL;

DM2.ADOQry.Post;

Sugetão: execute a query por partes e descobrira o erro

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Sugetão: execute a query por partes e descobrira o erro

abraço

Jonas, tenho de dar um close e open na query antes do insert? você entendeu o que eu gostaria de fazer? quero, ao salvar novos registros, que localize os registro existentes e os altere, de forma a não duplicar registros.

Vc. acha que seria problema só nas querys? Vou testar e postar se deu ou não ok. Obrigado.

Link para o comentário
Compartilhar em outros sites

  • 0
Vc. acha que seria problema só nas querys? Vou testar e postar se deu ou não ok. Obrigado.

nesse link tem uma duvida parecida com a sua

http://www.mail-archive.com/delphi-br@yaho...r/msg53594.html

abraço

Jhonas, fiz como você falou, fiz separado o select que deu ok; aí, na hora do update, dei close na query antes e dá erro no SQLExec.(seta verde bem nessa linha e há erro no parameter). O problema é comando ou num parâmetro? Quando usava só o insert salvava certinho no banco de dados. Pudes me ajudar?

Link para o comentário
Compartilhar em outros sites

  • 0
fiz como você falou, fiz separado o select que deu ok;
O problema é comando ou num parâmetro?

procure separar as ações... ou seja, faça sozinho o select, depois sozinho o update e depois sozinho o insert e veja o resultado

abraço

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...