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

(Resolvido) Dúvida Insert Into e Update com TFDCommand


alemoraes

Pergunta

Boa tarde,

Trabalhando com Delphi XE7, Firedac e banco de dados Firebird 2.5

Fiz um Insert Into no Componente: FDCommand na propriedade CommandText digitei o comando abaixo e está funcionando, ou seja, está gravando no Banco de dados, veja:

Na tabela LOCALIZACAO_ITENS tem um campo chave Auto incremento: ITEM_CODIGO

INSERT INTO LOCALIZACAO_ITENS

(COD_PROPRIETARIO, COD_PATRIMONIO, NOMEPAT, MARCA,

  DATAPAT, QUANT, VALOR_UNITARIO, SITUACAO,

  ATIVO, FOTO, LOC_CODIGO)

VALUES (:USUARIO, :COD_PATRIMONIO, :NOMEPAT, :MARCA,

  :DATAPAT, :QUANT, :VALOR_UNITARIO, :SITUACAO,  :ATIVO, :FOTO, :LOC_CODIGO)

 

e no botão de Inserir o código:

procedure TfrmLocalizacao.btnAdicionarClick(Sender: TObject);

begin

   if dblProprietario.KeyValue = 0 then

   begin

     Showmessage('Campo em Branco. Selecione o Proprietário!');

     dblProprietario.SetFocus;

     Exit;

   end;

   if dblItens.KeyValue = 0 then

   begin

     Showmessage('Campo em Branco. Selecione o Item!');

     dblItens.SetFocus;

     Exit;

   end;

  dmDados.FDCommandInsert.ParamByName('COD_PROPRIETARIO').Value:=  dblProprietario.KeyValue;

  dmDados.FDCommandInsert.ParamByName('COD_PATRIMONIO').Value:= dblItens.KeyValue;

  dmDados.FDCommandInsert.ParamByName('NOMEPAT').Value:= EditPatrimonio.Text;

  dmDados.FDCommandInsert.ParamByName('MARCA').Value:= EditMarca.Text;

  dmDados.FDCommandInsert.ParamByName('DATAPAT').Value:= DateEditData.Date;

  dmDados.FDCommandInsert.ParamByName('QUANT').Value:= RxCalcEditQuant.Value;

  dmDados.FDCommandInsert.ParamByName('VALOR_UNITARIO').Value:= CurrencyEditUnitario.Value;

  dmDados.FDCommandInsert.ParamByName('SITUACAO').Value:= EditCodSituacao.Text;

  dmDados.FDCommandInsert.ParamByName('ATIVO').Value:= EditStatus.Text;

  dmDados.FDCommandInsert.ParamByName('FOTO').Value:= DBImage1.Picture.ToString;

  dmDados.FDCommandInsert.ParamByName('LOC_CODIGO').Value:= StrToInt(DBText1.Caption);  (Chave estrangeira)

  dmDados.FDCommandInsert.Execute();

  dmDados.tblLocalizacaoItens.Refresh;

 lblTotal.Caption:= FormatCurr('R$ #,0.00', SomaColuna);

  dblItens.Enabled:= false;

  RxCalcEditQuant.Enabled:= false;

end;

 

 

A cada lançamento vai sendo carregado em um DBGrid.

 

Através deste código postado, eu gostaria de saber como fazer um INSERT INTO e UPDATE juntos no mesmo botão de comando.

Não tenho idéia de como fazer. Se puderem me ajudar, agradeço.

 

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

voce até pode fazer isso no mesmo botão, mas um insert into e um updade devem ser feitos separadamente

o comando insert into e updade voce pode usar dentro de um componente FDQuery... eu acho muito mais pratico e facil de usar

exemplo:

http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Executing_Commands_(FireDAC)

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Jhonas boa tarde

Fiz um novo procedimento usando o FDQuery e renomeei para tblLocalizacaoItens descartando o FDCommand

Fiz um procedimento GravarItem e coloquei dentro do botão Gravar.

Veja o Código:

procedure TfrmLocalizacao.GravarItem;

begin

  try

  if dmDados.tblLocalizacaoItens.State in [dsInsert] then  // Se estiver Inserindo

  begin

  dmDados.tblLocalizacaoItensCOD_PROPRIETARIO.AsInteger  := dblProprietario.KeyValue;  

  dmDados.tblLocalizacaoItensCOD_PATRIMONIO.AsInteger  := dblItens.KeyValue;   

  dmDados.tblLocalizacaoItensNOMEPAT.AsString          := EditPatrimonio.Text;

  dmDados.tblLocalizacaoItensMARCA.AsString               := EditMarca.Text;

  dmDados.tblLocalizacaoItensDATAPAT.AsDateTime     := DateEditData.Date;

  dmDados.tblLocalizacaoItensQUANT.AsInteger             := RxCalcEditQuant.AsInteger;

  dmDados.tblLocalizacaoItensVALOR_UNITARIO.AsCurrency := CurrencyEditUnitario.Value;

  dmDados.tblLocalizacaoItensSITUACAO.AsInteger        := StrToInt(EditCodSituacao.Text);

  dmDados.tblLocalizacaoItensATIVO.AsString            := EditStatus.Text;

  dmDados.tblLocalizacaoItensFOTO.Value                := DBImage1.Field.AsVariant;

  dmDados.tblLocalizacaoItensLOC_CODIGO.AsInteger      := StrToInt(DBText1.Caption);

  dmDados.tblLocalizacaoItens.Post;

  dmDados.tblLocalizacaoItens.Refresh;

  end

  else

   if dmDados.tblLocalizacaoItens.State in [dsEdit] then   // Se estiver Editando

   begin

   dmDados.tblLocalizacaoItens.Edit;

   dmDados.tblLocalizacaoItens.Post;

   dmDados.tblLocalizacaoItens.Refresh;

   end;

  except

    begin

     Showmessage('Erro ao gravar, verifique.');

     Abort;

    end;

  end;

end;

 

Está gravando no Banco de dados com sucesso (inserindo e alterando). 

Repare a linha de código que grifei em vermelho sobre o campo FOTO.

FOTO é um campo do tipo Blob Size 80  Sub Type 0 e ele recebe do DBImage1 o campo PAT_FOTO trazido da tabela PATRIMONIO com a mesma configuração: tipo Blob Size 80  Sub Type 0

O CAMPO PAT_FOTO tem as imagens em Jpeg salvas perfeitamente. (Banco de dados Firebird 2.5).

Queria uma ajuda sua, pois quando tento abrir a impressão no FastReport o formulário não abre e aparece a seguinte mensagem:

image.png.6a31141cb68b9a371e940413a709ac69.png

e apertando F4

image.png.d13aa55969e10dab0f94a0214223342e.png

Será que é no DBImage1?  Obrigado mais uma vez.

Link para o comentário
Compartilhar em outros sites

  • 0

dmDados.tblLocalizacaoItensFOTO.Value                := DBImage1.Field.AsVariant;

com relação ao erro:

fdQryItens: ausência de Tipo para o campo FOTO, esperando: Desconhecido atual: Blob

isso significa que voce esta querendo passar para o campo FOTO ( Tipo BLOB ) algo que é desconhecido.

veja se voce não esqueceu de atualizar os campos dentro do componente que esta no FastReport

outra dica que pode ajudar  

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,3k
×
×
  • Criar Novo...