Jump to content
Fórum Script Brasil
  • 0

Problema Com Excusão D E Registro


maxm.ro
 Share

Question

Ola Pessoal, sou novato no forum, e estou com um problema aqui!

é oseguinte, quando eu clico em excluir um cliente selecionado ao invés de somente excluir ele tem que verificar na tabela de debtos se contas no nome no cliente:

componentes para conexão:

ADOQryClientes

ADoqryDebtos

o codigo que esta com problema éesse ai:

procedure TFClientes.SBExcluirClick(Sender: TObject); 
var 
  C_Cli, ab : integer;
begin
  C_Cli := DataModule1.ADOQryClientescodigo.Value; 
  FDebtos.DSDebtos.DataSet.First; 
  
  while not FDebtos.DSDebtos.DataSet.Eof do 
  begin 
    If FDebtos.DSDebtos.DataSet.FieldByName('codigo_cli').Value = c_cli then
    begin 
      ab := 1; 
      Break; 
    end; 
    FDebtos.DSDebtos.DataSet.Next; 
  end; // while 
  
  if C_Cli = 0 then 
    ShowMessage('Não Existem Clientes Cadastrados')
  else 
    if (ab = 1) then
    begin 
      ShowMessage('Clinte tem Debto Cadastrado');
    end; 
  
  if (ab = 0) then 
  begin 
    SBNovo.Enabled := true; 
    SBSalvar.Enabled := false; 
    SBNovo.Enabled := true; 
    SBAlterar.Enabled := true; 
    DBNavCadCli.Enabled := true; 
    
    If application.MessageBox( 'Tem certeza de que deseja excluir este Cliente?','Informação',MB_YESNO)=mryes then 
      DSClientes.DataSet.Delete;
  end;
end;

to usando access, e esse codigo ai num ta funcionando muito bem não, já mudei muita coisa mas não achei o problema.

ta acontecendo o seguinte, ele ta verificando se tem algum debto correto, se por ex: eu estou no ultimo registro da tabela e clico para excluir, ele volta para o cliente que tem debtos e tenta excluir.

se alguém sabe o prblema ou outro modo de fazer isso eu agradeço...

atenciosamente

...max

Edited by Micheus
Incluída tag's CODE para melhorar a visualização. Utilize a identação também ;)
Link to comment
Share on other sites

20 answers to this question

Recommended Posts

  • 0
Guest --Jonas --

Tenta esta modificação:

if (ab = 0) then 
  begin 
    SBNovo.Enabled := true; 
    SBSalvar.Enabled := false; 
    SBNovo.Enabled := true; 
    SBAlterar.Enabled := true; 
    DBNavCadCli.Enabled := true; 
    
    If application.MessageBox( 'Tem certeza de que deseja excluir este Cliente?','Informação',MB_YESNO)=mryes then 
       begin 
            DSClientes.DataSet.Delete;
            exit;
       end;

  end;

Link to comment
Share on other sites

  • 0

blza cara, funcionou corretamente....

só que to com outro problema aqui...

em relação a criação de forms na memoria ....

no programa que estou fazendo não optei por criar os componentes e destrir, agora to queredo fazer isso...

só que não sei como fazer !!

algeum pode me dar uma ajuda ai ??/? como criar e como tirar da memoria o formulario ?

falou obrigado....

Link to comment
Share on other sites

  • 0
Guest --Jonas --
blza cara, funcionou corretamente....

só que to com outro problema aqui...

em relação a criação de forms na memoria ....

no programa que estou fazendo não optei por criar os componentes e destrir, agora to queredo fazer isso...

só que não sei como fazer !!

algeum pode me dar uma ajuda ai ??/? como criar e como tirar da memoria o formulario ?

falou obrigado....

Isso é facil... coloque este codigo no menu para cada opção de menu:

Exemplo

procedure TFMenu.Acoes1Click(Sender: TObject);
begin
  try
     if FAcoes = Nil then
        FAcoes := TFAcoes.Create(self);  // cria o formulario se não existir
  except
      ShowMessage('Erro na criação do formulário !!');
      exit;
  end;
  FAcoes.showmodal;

  FAcoes.Destroy; // destroy o formulario
  FAcoes.FreeOnRelease;  // libera o formulario da memoria

end;

Link to comment
Share on other sites

  • 0
Guest --Jonas --
blza fle mesmo, mas só uma pergunta

eu posso colocar o para a criação dele no form create ???

out tem quem ser em um botão ou menu ??

Entre na opção de menu do delphi <Project> e clique em <options> tire os forms do <auto-create forms> passando-os para o lado direito ... feito isso, coloque o codigo que passei com modificações nos nomes para seu uso no componente MainMenu1

quando você clicar em um item do menu o respectivo formulario sera criado e este formulario ao ser desativado sera destruido e liberado da memoria ... valeu ???

Link to comment
Share on other sites

  • 0

blza cara, ficou bom...

olha eu tenho um form com um PageControl:

duas Page uma cadastro uma Verificação, como faço para aparecer somente uma pagina, tipo.

quando abrir o form aparecer somente a pageVerificação, quando eu clicar em um botão aparecer a page Cadastro ???

tem como fazer isso ???

Link to comment
Share on other sites

  • 0
Guest --Jonas --
blza cara, ficou bom...

olha eu tenho um form com um PageControl:

duas Page uma cadastro uma Verificação, como faço para aparecer somente uma pagina, tipo.

quando abrir o form aparecer somente a pageVerificação, quando eu clicar em um botão aparecer a page Cadastro ???

tem como fazer isso ???

Claro que tem, muio facil ... vai ai um exemplo de como você quer

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    procedure FormActivate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  CTRL : integer = 0;
implementation

{$R *.DFM}

procedure TForm1.FormActivate(Sender: TObject);
begin
  PageControl1.ActivePageIndex := 0; // mostra apenas a page verificação
  PageControl1.Pages[1].TabVisible := FALSE;  // esconde a page cadastro
end;

procedure TForm1.Button1Click(Sender: TObject);
begin

   ctrl := ctrl + 1;
   if ctrl = 1 then
      begin
         PageControl1.Pages[1].TabVisible := TRUE; // mostra a page cadastro quando clicar no botao
         PageControl1.ActivePageIndex := 1;  // ativa a page cadastro
         Button1.Caption := 'Tirar Cadastro';  // troca o caption do botao
      end
   else
      begin
         PageControl1.Pages[1].TabVisible := false; // retira a page cadastro quando clicar novamente no botao
         PageControl1.ActivePageIndex := 0; // ativa a page verificação
         ctrl := 0;  // zera o contador de controle do botao
         Button1.Caption := 'Mostrar Cadastro';  // troca novamente o caption do botao
      end;
end;

end.

Link to comment
Share on other sites

  • 0

blza cara, ficou muito bom mesmo, obrigado pela ajuda!!!

tenho o campo 'valor' do tipo Unidade monetaria no access, como faço para ele aparecer em forma de Moeda no delphi ?

no access ele aparece certinho R$ 1,00, mas no delphi ta aparecendo '1' ... como faço para aparecer correto no delphi ??

falou té mais ....

Link to comment
Share on other sites

  • 0
Guest --Jonas --
blza cara, ficou muito bom mesmo, obrigado pela ajuda!!!

tenho o campo 'valor' do tipo Unidade monetaria no access, como faço para ele aparecer em forma de Moeda no delphi ?

no access ele aparece certinho R$ 1,00, mas no delphi ta aparecendo '1' ... como faço para aparecer correto no delphi ??

falou té mais ....

Formate o campo da tabela:

ex: de duplo click no componente TClientDataSet ( se não existirem campos use o botão direito do mouse e adicione os campos da sua tabela ) clique no campo que deseja formatar e tecle F11, no object Inspector na na opção display format e digite ,0.00;-,0.00 e na opção edit format a mesma coisa ... tá pronto . se ainda estiver com duvidas use a tecla F1 ( Help ) e pesquise por Format strings, ou FormatFloat Example ... ok ?

Link to comment
Share on other sites

  • 0

certo, agora apareceu no formato que eu queria, porém agora tenho um erro !!!

esse campo que estou mudando para moeda recebe algumas alterações...

... se eu estiver somando ele aceita a soma de valores acima de 1000,00, mas se for diminuir ele não aceia com valores acima de 1000,00.

ex:

1000,00 + 15,000 = 1015,00 --- isso funciona corretamente...

mas quando vou fazer isso:

1015,00 - 5,00 = em vez de me retornar o valor 1010,00: ele da um erro:

'1015,00' is not a valid floating point value!

o calculo esta assim:

DataModule1.ADOQryDebtosvalor.Value := DataModule1.ADOQryDebtosvalor.Value - StrToFloat(EdtValor.Text);

espero que possas me ajudar, falou té mais;....

Edited by maxm.ro
Link to comment
Share on other sites

  • 0
Guest --Jonas --

1015,00 - 5,00 = em vez de me retornar o valor 1010,00: ele da um erro:

'1015,00' is not a valid floating point value!

'1015,00' não é um ponto flutuante valido ou seja o erro esta na virgula, voce deve substituir por ponto decimal

o Certo

1015.00 - 5.00 = 1010.00

DataModule1.ADOQryDebtosvalor.Value := DataModule1.ADOQryDebtosvalor.Value - StrToFloat(EdtValor.Text);

define uma variavel do tipo real ou seja

EdtValor : real

ai fica assim

DataModule1.ADOQryDebtosvalor.Value := DataModule1.ADOQryDebtosvalor.Value - EdtValor);

Link to comment
Share on other sites

  • 0

ok, fiz o teste, só não funcionou:

coloque com as alteração que você passou e deu o seguinte erro !

DataModule1.ADOQryDebtosvalor.Value := DataModule1.ADOQryDebtosvalor.Value - EdtValor;

"operator not applicable to this operand type"

a variavel EdtValor é um Edit ...

Link to comment
Share on other sites

  • 0
Guest --Jonas --
ok, fiz o teste, só não funcionou:

coloque com as alteração que você passou e deu o seguinte erro !

DataModule1.ADOQryDebtosvalor.Value := DataModule1.ADOQryDebtosvalor.Value - EdtValor;

"operator not applicable to this operand type"

a variavel EdtValor é um Edit ...

Se você tiver os componentes rx instalado use o CurrencyEdit1 ele já é para isto, basta trocar pelo seu edit e colocar o mesmo nome nele

se não tiver faça assim

procedure .....

var Valor : real;

begin

.

.

valor := strtofloat(EdtValor.Text)

DataModule1.ADOQryDebtosvalor.Value := DataModule1.ADOQryDebtosvalor.Value - Valor;

end;

ve se da certo ...

Link to comment
Share on other sites

  • 0
Guest --Jonas --
não tenho instalado esse rx, ai tentei a segunda opção que você me passou, só que deu o mesmo erro ....

você acha que se instalar esse rx e usar o componente que você disse da certo ???

se der me diz ai como instalar ;....

deveria ter dado certo, a menos que o seu DataModule1.ADOQryDebtosvalor.Value esteja definido como inteiro ou string

bom você vai achar os componetes rx neste endereço:

http://br.geocities.com/all_software/download.htm#c1

valeu ???

Link to comment
Share on other sites

  • 0
Guest --Jonas --
blza, baixei e instalei, e agora ???

onde foi parar ?

se voce instalou corretamente, as paletas dos componentes rx estão no delphi; o componente CurrencyEdit1 na na paleta RX Controls

basta trocar pelo seu edit e colocar o mesmo nome que estava no edit...

Link to comment
Share on other sites

  • 0

cara, eu baixei aquele primeiro arquivo do site que você me passou, ai executei ele no meu pc, ele criou uma pasta na unidade c:/DELPHI com os arquivos do rx ai dentro..... só que no delphi não apareceu nada, ai tentei intalar tipo a quikReport mas não deu certo também ...

Link to comment
Share on other sites

  • 0
Guest --Jonas --
cara, eu baixei aquele primeiro arquivo do site que você me passou, ai executei ele no meu pc, ele criou uma pasta na unidade c:/DELPHI com os arquivos do rx ai dentro..... só que no delphi não apareceu nada, ai tentei intalar tipo a quikReport mas não deu certo também ...

cara, a instalação você tem que fazer... se você leu o arquivo readme.txt :

Installation

------------

Run RXINST.EXE.

Before installing RX Library components into Delphi, check out RX.INC

file located in RX\UNITS subdirectory. This file is included in all RX

Library units and contains conditional defines that affects compilation.

You can change some of these defines or specify global compiler options

there.

1. Delphi 5.x:

Uninstall previous installed version of RX Library from Delphi 5 IDE.

Remove previously compiled RX packages (if any) RXCTL5.BPL, RXDB5.BPL,

RXBDE5.BPL, DCLRX5.BPL, DCLRXDB5.BPL and DCLRXBD5.BPL from your hard disk.

If you have Delphi 5 Professional or Standard Edition, deactivate the

conditional define {$DEFINE DCS} in the RX.INC file before compiling the

library.

Use "File\Open..." menu item of Delphi IDE to open RX' runtime

package RXCTL5.DPK. In "Package..." window click "Compile" button to

compile packages RXCTL5.DPK. After compiling repeat that for other RX

Library run-time packages RXDB5.DPK, RXBDE5.DPK. Put compiled BPL files

into directory that is accessible through the search PATH (i.e. DOS

"PATH" environment variable; for example, in the Windows\System directory).

After compiling RX run-time packages you must install RX design-time

packages into the IDE.

Use "File\Open..." menu item to open RX design-time package DCLRX5.DPK.

In "Package..." window click "Compile" button to compile the package

and then click "Install" button to register RX Library components on

the component palette. Repeat that for other RX Library design-time

packages DCLRXDB5.DPK and DCLRXBD5.DPK.

NOTE: do not save package sources in the Delphi IDE.

outra maneira mais facil e instalar somente as BPls pelo delphi, clicando em Component na opção Install Packages, depois disso no botao Add ( procure todos os arquivos com extensão bpl ) e click no botao OK.

Link to comment
Share on other sites

  • 0
Exemplo

procedure TFMenu.Acoes1Click(Sender: TObject);
begin
  try
     if FAcoes = Nil then
        FAcoes := TFAcoes.Create(self);  // cria o formulario se não existir
  except
      ShowMessage('Erro na criação do formulário !!');
      exit;
  end;
  FAcoes.showmodal;

  FAcoes.Destroy; // destroy o formulario
  FAcoes.FreeOnRelease;  // libera o formulario da memoria

end;

Sugestão, troque:

FAcoes.Destroy; // destroy o formulario

FAcoes.FreeOnRelease; // libera o formulario da memoria

por:

FAcoes.Release;

Motivos (do help):

Destroy destructor (TCustomForm)

Removes the form from memory.

Description

Do not call Destroy. Instead, call Release, which indirectly produces a call to the Free method, which in turn calls Destroy.

FreeOnRelease method (TComponent)

Frees the interface reference for components that were created from COM classes.

Description

FreeOnRelease is called when an interface implemented by the component is released. FreeOnRelease is used internally and calls the corresponding interface method. It should not be necessary to call FreeOnRelease directly.

___________________________

Release method (TCustomForm)

Destroys the form and frees its associated memory.

Description

Use Release to destroy the form and free its associated memory.

Free method (TObject)

...

To free a form, call its Release method, which destroys the form and releases the memory allocated for it after all its event handlers and those of the components it contains are through executing.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.8k
    • Total Posts
      646.7k
×
×
  • Create New...