Jump to content

Erro 'Cannot perform this operation on a closed dataset' ao fechar tela do PDV no Delphi 7


Postagens Recomendadas

23 horas atrás, backupnumberum disse:

nao!

somente 2 listbox 1 dbgrid 3 button

bom dia ! neste caso eu terei que usar os componentes adoquery, adotable, adoconected e data source nesse formulario ou no dm dados ? e também quais foramos codigos usados nos 3 botoes ? e o que ru colocou no dbgrid ? foi labem ou panel ?

Link to comment
Compartilhe em outros sites

Agora mesmo, Carlos1234 disse:

bom dia ! neste caso eu terei que usar os componentes adoquery, adotable, adoconected e data source nesse formulario ou no dm dados ? e também quais foramos codigos usados nos 3 botoes e qual evento foi usado ? e o que ru colocou no dbgrid ? foi labem ou panel ?

 

Link to comment
Compartilhe em outros sites

vc pode obter aulas gratuitas apenas lendo o "HELP" de cada software. No Delphi 7, assim como em todos os outros, apenas pressione a tecla "F1" para ler (em Ingles ou Portugues - caso haja) , as explanações técnicas de cada classe e suas propriedades de uso.

é mais simpe que tentar no "tentativa e erro".

sorte

  • Curtir 1
Link to comment
Compartilhe em outros sites

Em 22/07/2023 at 11:58, backupnumberum disse:

nao!

somente 2 listbox 1 dbgrid 3 button

bom dia ! me manda o os coigos que tu usa nos botoes dsentro do listbox e tambe´m nos notoes detfilds, update e delete records. se poder me ajudar te agradeco.

Link to comment
Compartilhe em outros sites

14 horas atrás, Carlos1234 disse:

bom dia ! me manda o os coigos que tu usa nos botoes dsentro do listbox e tambe´m nos notoes detfilds, update e delete records. se poder me ajudar te agradeco.

Olá! Faz anos que não mexo em Delphi... Mas acredito que a listagem está sendo feita com o mapeamento dos componentes ou com SQL, e os botões estão executando SQL, assim como ele deixou um exemplo na resposta.

Link to comment
Compartilhe em outros sites

10 horas atrás, PauloBarbosa disse:

Olá! Faz anos que não mexo em Delphi... Mas acredito que a listagem está sendo feita com o mapeamento dos componentes ou com SQL, e os botões estão executando SQL, assim como ele deixou um exemplo na resposta.

boa tarde e valeu pela resposta ! mas quando clicar nos botoes que codigo coloco neles pra tentar resolver este problema ?

Link to comment
Compartilhe em outros sites

2 horas atrás, Carlos1234 disse:

boa tarde e valeu pela resposta ! mas quando clicar nos botoes que codigo coloco neles pra tentar resolver este problema ?


 

Realize o mapeamento correto do Dbgrid, utilizando o componente que você usa para executar suas queries. Basta pegar exemplos do próprio código que você enviou.

No botão de listar: 

 

with dm_dados.sql_vendasconsultas do // Altere o dm_dados.sql_vendasconsultas para o que deseja usar
begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT * FROM tbl_produtos'); // Altere o SQL para o que desejar retornar no DBgrid; nesse caso, está retornando a lista de produtos
    Open;
end;

 

Com isso, ele já lista no DBgrid, caso o mapeamento esteja correto. Para editar e deletar, você precisará de parâmetros para escolher qual registro deletar ou atualizar. Caso deseje fazer isso em um botão e não diretamente pelo dbgrid.

  • Curtir 1
Link to comment
Compartilhe em outros sites

20 horas atrás, PauloBarbosa disse:


 

Realize o mapeamento correto do Dbgrid, utilizando o componente que você usa para executar suas queries. Basta pegar exemplos do próprio código que você enviou.

No botão de listar: 

 

with dm_dados.sql_vendasconsultas do // Altere o dm_dados.sql_vendasconsultas para o que deseja usar
begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT * FROM tbl_produtos'); // Altere o SQL para o que desejar retornar no DBgrid; nesse caso, está retornando a lista de produtos
    Open;
end;

 

Com isso, ele já lista no DBgrid, caso o mapeamento esteja correto. Para editar e deletar, você precisará de parâmetros para escolher qual registro deletar ou atualizar. Caso deseje fazer isso em um botão e não diretamente pelo dbgrid.

valeu

Link to comment
Compartilhe em outros sites

Em 31/07/2023 at 11:28, Carlos1234 disse:

lembrando que os componentes que uso sao uniconnection, posgresqlniprovider , odbc  uniprovider, unitable, unidatasource . 

Bom dia! Veja se resolve o que você precisa...

Crie um botão para listar
 

procedure TForm1.btnListarClick(Sender: TObject);
var
  SelectedID: Integer;
begin
  if UniQuery1.IsEmpty then // Altere o UniQuery1 para o que você irá usar
    Exit;

  // Verifica se há um registro selecionado no DBGrid
  if DBGrid1.SelectedRows.Count = 0 then
  begin
    ShowMessage('Selecione um registro para excluir.');
    Exit;
  end;

  // Obtém o ID do registro selecionado no DBGrid
  SelectedID := UniQuery1.FieldByName('prod_id').AsInteger;

  if MessageDlg('Deseja realmente excluir o registro?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
  begin
    UniQuery1.Close;
    UniQuery1.SQL.Clear;
    UniQuery1.SQL.Add('SELECT * FROM NOMETABELA'); // Mude o nome da tabela de NOMETABELA para a tabela correta
    UniQuery1.Open; // Atualiza os dados no UniQuery1
  end;
end;


Botão de excluir
 

procedure TForm1.btnExcluirClick(Sender: TObject);
var
  SelectedID: Integer;
begin
  if UniQuery1.IsEmpty then // Altere o UniQuery1 para o que você irá usar
    Exit;

  // Verifica se há um registro selecionado no DBGrid
  if DBGrid1.SelectedRows.Count = 0 then
  begin
    ShowMessage('Selecione um registro para excluir.');
    Exit;
  end;

  // Obtém o ID do registro selecionado no DBGrid
  SelectedID := UniQuery1.FieldByName('prod_id').AsInteger;

  if MessageDlg('Deseja realmente excluir o registro?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
  begin
    UniQuery1.Close;
    UniQuery1.SQL.Clear;
    UniQuery1.SQL.Add('DELETE FROM NOMETABELA'); // Mude o nome da tabela de NOMETABELA para a tabela correta
    UniQuery1.SQL.Add('WHERE prod_id = :id');
    UniQuery1.Parameters.ParamByName('id').Value := SelectedID;
    UniQuery1.ExecSQL; // Executa a consulta de exclusão
    UniQuery1.SQL.Clear;
    UniQuery1.SQL.Add('SELECT * FROM NOMETABELA'); // Consulta para recarregar os dados no DBGrid
    UniQuery1.Open; // Atualiza os dados no UniQuery1
  end;
end;



Agora só adaptar as suas necessidades 😁

  • Curtir 1
Link to comment
Compartilhe em outros sites

5 horas atrás, PauloBarbosa disse:

Bom dia! Veja se resolve o que você precisa...

Crie um botão para listar
 

procedure TForm1.btnListarClick(Sender: TObject);
var
  SelectedID: Integer;
begin
  if UniQuery1.IsEmpty then // Altere o UniQuery1 para o que você irá usar
    Exit;

  // Verifica se há um registro selecionado no DBGrid
  if DBGrid1.SelectedRows.Count = 0 then
  begin
    ShowMessage('Selecione um registro para excluir.');
    Exit;
  end;

  // Obtém o ID do registro selecionado no DBGrid
  SelectedID := UniQuery1.FieldByName('prod_id').AsInteger;

  if MessageDlg('Deseja realmente excluir o registro?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
  begin
    UniQuery1.Close;
    UniQuery1.SQL.Clear;
    UniQuery1.SQL.Add('SELECT * FROM NOMETABELA'); // Mude o nome da tabela de NOMETABELA para a tabela correta
    UniQuery1.Open; // Atualiza os dados no UniQuery1
  end;
end;


Botão de excluir
 

procedure TForm1.btnExcluirClick(Sender: TObject);
var
  SelectedID: Integer;
begin
  if UniQuery1.IsEmpty then // Altere o UniQuery1 para o que você irá usar
    Exit;

  // Verifica se há um registro selecionado no DBGrid
  if DBGrid1.SelectedRows.Count = 0 then
  begin
    ShowMessage('Selecione um registro para excluir.');
    Exit;
  end;

  // Obtém o ID do registro selecionado no DBGrid
  SelectedID := UniQuery1.FieldByName('prod_id').AsInteger;

  if MessageDlg('Deseja realmente excluir o registro?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
  begin
    UniQuery1.Close;
    UniQuery1.SQL.Clear;
    UniQuery1.SQL.Add('DELETE FROM NOMETABELA'); // Mude o nome da tabela de NOMETABELA para a tabela correta
    UniQuery1.SQL.Add('WHERE prod_id = :id');
    UniQuery1.Parameters.ParamByName('id').Value := SelectedID;
    UniQuery1.ExecSQL; // Executa a consulta de exclusão
    UniQuery1.SQL.Clear;
    UniQuery1.SQL.Add('SELECT * FROM NOMETABELA'); // Consulta para recarregar os dados no DBGrid
    UniQuery1.Open; // Atualiza os dados no UniQuery1
  end;
end;



Agora só adaptar as suas necessidades 😁

bom dia e muito obrigado ! vou tentar aqui e te mando mensagem se resolvi ou nao.

Link to comment
Compartilhe em outros sites

Crie uma conta ou entre para comentar 😀

Você precisa ser um membro para deixar um comentário.

Crie a sua conta

Participe da nossa comunidade, crie sua conta.
É bem rápido!

Criar minha conta agora

Entrar

Você já tem uma conta?
Faça o login agora.

Entrar agora


×
×
  • Create New...