Selecao DevMedia QUERO SER PRIME

Fórum Dados de um form para o outro.... #326381

28/07/2006

0

galera tenho uma dúvida de como proceder em uma função...tenho um form onde tenho dados a serem modificados ou mesmo dados baixa..tipo a foto abaixo
[img]
[URL=http://img48.imageshack.us/my.php?image=imagemsb3.jpg][img:78457d7687]http://img48.imageshack.us/img48/9836/imagemsb3.th.jpg[/img:78457d7687][/URL]
[/img]

por exemplo quando tenho que dar baixa eu uso um código que busca o os dados no primeiro form, já ví em alguns fóruns que este procedimento num seria legal...e de fato de vez em quanto dá algun erro nesta parte do programa e tem vez que funciona...queria saber a opinião de vc´s qual seria o melhor método para isso...vlw t+ galera..


Gigatel

Gigatel

Responder

Posts

28/07/2006

Paullsoftware

Desculpa mais não entendi exatamente qual seria a sua dúvida...


Responder

Gostei + 0

28/07/2006

Gigatel

Desculpa mais não entendi exatamente qual seria a sua dúvida...


por exemplo veja este código..
procedure T_FORM_OS_BX.Button4Click(Sender: TObject);
var
  a,b,c : real;
  r:integer;
  g: string;
begin
    if DBLookupComboBox1.Text = ´´ then
    begin
    Showmessage (´É obrigatório seu prenchimento campo "Responsável"´);
    abort;
  end
    else
    begin
    QRLabel31.Caption := ´R$ ´+ _FORM_OS_NAV.BD_OFC_ELEGS_OOE_VALOR_TOT.Value;
    QuickRep1.PrinterSettings.Copies := BD_CONFOSGS_OOC_QDFIB.value;

      if Application.MessageBox(PAnsiChar(´Deseja dar saída a O.S. do cliente ´+_FORM_OS_NAV.BD_OFC_ELEGS_OOE_NOME.AsString+ ´ ?´), ´Pergunta´,
      MB_ICONQUESTION + MB_YESNO) <> IDYES then
      Abort;

    BD_AM_OSOE.Insert;
    BD_AM_OSOEGS_AMOOEI_CON_SAIDA.Value := ´ Consertado´;
    BD_AM_OSOEGS_AMOOEI_USU_LOG.Value:= _FORM_PRINCIPAL
    .StatusBar.Panels[2].text;
    BD_AM_OSOEGS_AMOOEI_END.Value :=  _FORM_OS_NAV.BD_OFC_ELEGS_OOE_END.Value;
    BD_AM_OSOEGS_AMOOEI_COMP.Value :=  _FORM_OS_NAV.BD_OFC_ELEGS_OOE_COMP.Value;
    BD_AM_OSOEGS_AMOOEI_BAIRRO.Value :=  _FORM_OS_NAV.BD_OFC_ELEGS_OOE_BAIRRO.Value;
    BD_AM_OSOEGS_AMOOEI_CIDADE.Value :=  _FORM_OS_NAV.BD_OFC_ELEGS_OOE_CIDADE.Value;
    BD_AM_OSOEGS_AMOOEI_CEP.Value :=  _FORM_OS_NAV.BD_OFC_ELEGS_OOE_CEP.Value;
    BD_AM_OSOEGS_AMOOEI_SOLUCAO.Value :=  _FORM_OS_NAV.BD_OFC_ELEGS_OOE_SOLUCAO.Value;
    BD_AM_OSOEGS_AMOOEI_TEL_01.Value :=  _FORM_OS_NAV.BD_OFC_ELEGS_OOE_TEL_01.Value;
    BD_AM_OSOEGS_AMOOEI_TEL_02.Value :=  _FORM_OS_NAV.BD_OFC_ELEGS_OOE_TEL_02.Value;
    BD_AM_OSOEGS_AMOOEI_TEL_03.Value :=  _FORM_OS_NAV.BD_OFC_ELEGS_OOE_TEL_03.Value;
    BD_AM_OSOEGS_AMOOEI_TEL_04.Value :=  _FORM_OS_NAV.BD_OFC_ELEGS_OOE_TEL_04.Value;
    BD_AM_OSOEGS_AMOOEI_ACESSORIOS.Value :=  _FORM_OS_NAV.BD_OFC_ELEGS_OOE_ACESSORIOS.Value;
    BD_AM_OSOEGS_AMOOEI_DEF_ALEGADO.Value :=  _FORM_OS_NAV.BD_OFC_ELEGS_OOE_DEF_ALEGADO.Value;
    BD_AM_OSOEGS_AMOOEI_TIPCONSERTO.Value :=  _FORM_OS_NAV.BD_OFC_ELEGS_OOE_TIPCONSERTO.Value;
    BD_AM_OSOEGS_AMOOEI_APROVSN.Value :=  _FORM_OS_NAV.BD_OFC_ELEGS_OOE_APROVSN.Value;
    BD_AM_OSOEGS_AMOOEI_DATA_AGE.Value := StrToDate(FormatDateTime(´dd/mm/yyyy´,Date));
    BD_AM_OSOEGS_AMOOEI_HORA_ENT.Value :=  _FORM_OS_NAV.BD_OFC_ELEGS_OOE_TIPCONSERTO.Value;
    BD_AM_OSOEGS_AMOOEI_UF.Value :=  _FORM_OS_NAV.BD_OFC_ELEGS_OOE_UF.Value;
    BD_AM_OSOEGS_AMOOEI_EMAIL.Value :=  _FORM_OS_NAV.BD_OFC_ELEGS_OOE_EMAIL.Value;
    BD_AM_OSOEGS_AMOOEI_NOME.Value := _FORM_OS_NAV.BD_OFC_ELEGS_OOE_NOME.Value;
    BD_AM_OSOEGS_AMOOEI_CODACES.Value := _FORM_OS_NAV.BD_OFC_ELEGS_OOE_CODACES.Value;
    BD_AM_OSOEGS_AMOOEI_DATA_ENT.Value := _FORM_OS_NAV.BD_OFC_ELEGS_OOE_DATA_ENT.Value;
    BD_AM_OSOEGS_AMOOEI_DATA_ORC.Value := _FORM_OS_NAV.BD_OFC_ELEGS_OOE_DATA_ORC.Value;
    BD_AM_OSOEGS_AMOOEI_VALOR_TOT.Value := Edit3.Text;
    BD_AM_OSOEGS_AMOOEI_APDESCR.Value := _FORM_OS_NAV.BD_OFC_ELEGS_OOE_APDESCR.Value;
    BD_AM_OSOEGS_AMOOEI_DEF_ALEGADO.Value :=  _FORM_OS_NAV.BD_OFC_ELEGS_OOE_DEF_ALEGADO.Value;
    BD_AM_OSOEGS_AMOOEI_MARCA.Value := _FORM_OS_NAV.BD_OFC_ELEGS_OOE_MARCA.Value;
    BD_AM_OSOEGS_AMOOEI_MODELO.Value := _FORM_OS_NAV.BD_OFC_ELEGS_OOE_MODELO.Value;
    BD_AM_OSOEGS_AMOOEI_NSERIE.Value := _FORM_OS_NAV.BD_OFC_ELEGS_OOE_NSERIE.Value;
    BD_AM_OSOEGS_AMOOEI_DATA_ORC.Value := _FORM_OS_NAV.BD_OFC_ELEGS_OOE_DATA_ENT.Value;
    BD_AM_OSOEGS_AMOOEI_DATA_SAI.Value := _FORM_OS_NAV.BD_OFC_ELEGS_OOE_DATA_SAI.Value;
    BD_AM_OSOEGS_AMOOEI_CODIGO_OS.Value := _FORM_OS_NAV.BD_OFC_ELEGS_OOE_CODIGO.Value;
    BD_AM_OSOEGS_AMOOEI_TEC_RESP.Value := _FORM_OS_NAV.BD_OFC_ELEGS_OOE_TEC_RESP.Value;
    BD_AM_OSOE.Post;
    BD_CAIXA.Insert;
    BD_CAIXAGS_CX_DESCRICAO.Value := ´Manutenção´;
    BD_CAIXAGS_CX_NATUREZA.Value := ´Valor recebido ref. a O.S. de Nº´+ label27.Caption;
    BD_CAIXAGS_CX_CRE_DEB.Value := ´C´;
    BD_CAIXAGS_CX_DATA.Value := StrToDate(FormatDateTime(´dd/mm/yyyy´,Date));
    BD_CAIXAGS_CX_COD_ORIGEM.Value := label27.Caption;
    BD_CAIXAGS_CX_VALOR_MOVIMENTO.Value := Label17.Caption;
    BD_CAIXAGS_CX_USU_LOG.Value := _FORM_PRINCIPAL.StatusBar.Panels[2].text;
    BD_CAIXAGS_CX_CODACESS.Value := _FORM_OS_NAV.BD_OFC_ELEGS_OOE_CODACES.Value;
    BD_CAIXA.Post;
    a:=strtofloat(edit3.text);
    b:=strtofloat(_FORM_OS_NAV.BD_OFC_ELEGS_OOE_VALOR_TOT.Value);
    c:= b-a ;
    QRLabel5.Caption := ´R$ ´+ floattostrf(c,ffFixed,10,2);
    QRLabel7.Caption := ´R$ ´+ Edit3.Text;
    QRLabel34.Caption := _FORM_OS_NAV.BD_OFC_ELEGS_OOE_NOME.Value;
    r:= _FORM_OS_NAV.BD_OFC_ELEGS_OOE_CODIGO.Value;
    g:=format(´¬5.5d´,[r]);
    QRLabel16.Caption:= g;
    with BD_ORCA_ITENS do
    begin
    First;
    Try
    while not BD_ORCA_ITENS.eof do
      begin
      BD_ESTOQUE.Close;
      BD_ESTOQUE.SQL.Clear;
      BD_ESTOQUE.SQL.Add(´select * from  ESTOQUE where GS_EST_CODIGO=´+inttostr(BD_ORCA_ITENSGS_OOEI_CODPROD.Value));
      BD_ESTOQUE.Open;
      BD_ESTOQUE.Edit;
      if not BD_ORCA_ITENSGS_OOEI_CODPROD.IsNull then
      begin
      BD_ESTOQUEGS_EST_QNT.Value := BD_ESTOQUEGS_EST_QNT.Value - BD_ORCA_ITENSGS_OOEI_QNT.Value;
      BD_ESTOQUE.Post;
      BD_ORCA_ITENS.next;
    end
    else
    BD_ORCA_ITENS.next;
    end;
    DM1.IBTransaction1.CommitRetaining;
    except
    showmessage(´Problema com o banco de dados.´);
    DM1.IBTransaction1.rollback;
    end;
    end;
    if Application.MessageBox(´Imprimir documento de saida ?´ , ´Imprimir´, MB_ICONQUESTION + MB_YESNO) = IDYES then
      QuickRep1.Print;
      BD_ORCA_ITENS.First;
        while not BD_ORCA_ITENS.Eof do
        BD_ORCA_ITENS.Delete;
        _FORM_OS_NAV.BD_OFC_ELE.Delete;
      Close;
    end;
end;


tenho que pegar informações de um outro form e isso está gerando defeitos intermitentes...


Responder

Gostei + 0

29/07/2006

Marco Salles

tenho um form onde tenho dados a serem modificados ou mesmo dados baixa


eu uso um código que busca o os dados no primeiro form,


já ví em alguns fóruns que este procedimento num seria legal
.

:?: :?: :?: :?:

Voltando a questão

Porque voce fez :

 except
    showmessage(´Problema com o banco de dados.´);
    DM1.IBTransaction1.rollback;


[b:547f21bbdc]não esta faltando um Begin End nesta instrução ????[/b:547f21bbdc]

except
begin
showmessage(´Problema com o banco de dados.´);
DM1.IBTransaction1.rollback;
end;

[b:547f21bbdc]Do jeito que esta , voce esta sempre dando um Roolback no seu banco , independentemente de ter ou não uma exceção[/b:547f21bbdc]

[b:547f21bbdc]Segundo ponto : Tente deburgar com BreakPoint , para dar uma idéia do tipo de erro que aparece.. Aonde e qual linha [/b:547f21bbdc]

Quando a usar dados de outros formulários , vejo aqui que voce usa valores de Outros dadaSets e do Formulário Principal... O que se faz normalmente é concentrar os[b:547f21bbdc] DataSet em DataModulos [/b:547f21bbdc].
:arrow: :arrow:
Fica mais fácila manutenção e o entendimento , alem de ter que ficar criando e destruindo Formulários toda vez que precissar acessar alguns dados de alguns dataSets.



Responder

Gostei + 0

29/07/2006

Micheus

Porque voce fez :
 except
    showmessage(´Problema com o banco de dados.´);
    DM1.IBTransaction1.rollback;
não esta faltando um Begin End nesta instrução ???? except begin showmessage(´Problema com o banco de dados.´); DM1.IBTransaction1.rollback; end;

[b:aff8e45dee]Marco Salles[/b:aff8e45dee], não querendo ´mudar o rumo da prosa´, mas até onde eu sabia (ou pensava saber), quando uma exceção ocorre, tudo que estiver entre o [i:aff8e45dee]Except...End[/i:aff8e45dee] é executado (salvo se introduzida alguma função de desvio). Exceto no caso de vc tratar várias classes de exceção onde vc utiliza:
...
except
  On Classe_Erro Do
  [Begin]
  Instrução[ões]
  [End;]
  ...
end;

Um uso comum, inclusive, que faço da situação em questão é:
try
  ...
except
  Comp_Name.SetFocus;
  ShowMessage(´O campo ... deve ser informado.´);
end;
E nunca tive qualquer problema em que apenas a 1ª instrução fosse executada.

Do jeito que esta , voce esta sempre dando um Roolback no seu banco , independentemente de ter ou não uma exceção
Esta observação não se aplicaria apenas se estivesse sendo utilizado [i:aff8e45dee]Finally[/i:aff8e45dee] em lugar de [i:aff8e45dee]Except[/i:aff8e45dee] ?

Bom, utilizo D7, não sei como andam as versões mais recentes. :?:


Responder

Gostei + 0

29/07/2006

Marco Salles

Esta observação não se aplicaria apenas se estivesse sendo utilizado Finally em lugar de Except ?


o tratamento de exceçoes é muito menos importante do que usar os blocos Try Finally, porque o delphi pode sobreviver a maioria das exceções. O Correto num programa é ter muitos blocos Try Finally , algumas instruçoes Raises e quase nenhum Bloco Try Except.


quando uma exceção ocorre, tudo que estiver entre o Except...End é executado . Exceto no caso de vc tratar várias classes de exceção onde vc utiliza: except On Classe_Erro Do [Begin] Instrução[ões] [End;] ... end;


foi isso que imaginei , mas voce chamou corretamente a atençao , que ele nao faz nenhum tratamento especial a nenhuma classe.. Então , desconsidere a minha observação e muito obrigado pela sua correta
participação.

Bom, utilizo D7, não sei como andam as versões mais recentes

Comecei no delphi 5.0 e ja era assim.


Responder

Gostei + 0

29/07/2006

Marco Salles

[b:d6991a6deb]Agora vamos focar o ´problema´ do Gigatel.. Pelo menos ´tentar´.[/b:d6991a6deb]

Vamos supor que uma [b:d6991a6deb]exceção é disparada [/b:d6991a6deb].. Com foi colocado anteriormente , Tudo que esta abaixo do Exception end é executado.
except showmessage(´Problema com o banco de dados.´); DM1.IBTransaction1.rollback; end; end;


[b:d6991a6deb]Mas e o Resto ????[/b:d6991a6deb] :?: :?: :?:

if Application.MessageBox(´Imprimir documento de saida ?´ , ´Imprimir´, MB_ICONQUESTION + MB_YESNO) = IDYES then QuickRep1.Print; BD_ORCA_ITENS.First; while not BD_ORCA_ITENS.Eof do BD_ORCA_ITENS.Delete; _FORM_OS_NAV.BD_OFC_ELE.Delete; Close; end;


[b:d6991a6deb]Acho[/b:d6991a6deb] que , mesmo que ocorra uma exceção , ou dependendo do tipo , o Resto da Instrução [b:d6991a6deb]tb será executada [/b:d6991a6deb].... A pergunta que faço é :

[b:d6991a6deb]Esta correto , ocorrendo a exceção , Imprimir o Documento de Saida ????[/b:d6991a6deb]


Responder

Gostei + 0

09/08/2006

Gigatel

Opa, desculpe a demora pela réplica...más meu problema estáva voltado a um erro que ocorria durante a saida do equipamento do cliente ( o programa eu fiz para uso próprio em minha oficina de informática ) casualmente o programa apresentava um erro, que num sabia de onde saia, daí postei o problema... como tive problemas em logar aki no site fiquei um tempo sem poder conversar com os colegas, más daí resolví revisar meu código...ví que aparentimente num tinha nada de errado ( até vc´s colocarem a questão do except, más como deu para notar eu estava usando dataset´s de outro form e é aí que tava o problema, na questão dos data módules de fato eu não uso, más tbm nunca me deram problema usando nos form´s e tambem por não fazer programa para comercializar acho que não compensa mexer num estrutura tão grande ( pelo menos para mim tem de tudo nele é bem completo ..clientes contas Pagar e receber Ordem de serviço, relatórios, muito completo mesmo ). e num ganho a vida com isso, por isso acho que tá bom como está ( no data modules ), agora quando começa a dar akeles erros misteriosos aí num tem jeito...tenho que pedir um ´ HELP !!!!!!!!!!!!! ´ aos colegas más na questão do except o que devo fazer ? vlw a ajuda e t+


Responder

Gostei + 0

09/08/2006

Gigatel

Opa, desculpe a demora pela réplica...más meu problema estáva voltado a um erro que ocorria durante a saida do equipamento do cliente ( o programa eu fiz para uso próprio em minha oficina de informática ) casualmente o programa apresentava um erro, que num sabia de onde saia, daí postei o problema... como tive problemas em logar aki no site fiquei um tempo sem poder conversar com os colegas, más daí resolví revisar meu código...ví que aparentimente num tinha nada de errado ( até vc´s colocarem a questão do except, más como deu para notar eu estava usando dataset´s de outro form e é aí que tava o problema, na questão dos data módules de fato eu não uso, más tbm nunca me deram problema usando nos form´s e tambem por não fazer programa para comercializar acho que não compensa mexer num estrutura tão grande ( pelo menos para mim tem de tudo nele é bem completo ..clientes contas Pagar e receber Ordem de serviço, relatórios, muito completo mesmo ). e num ganho a vida com isso, por isso acho que tá bom como está ( no data modules ), agora quando começa a dar akeles erros misteriosos aí num tem jeito...tenho que pedir um ´ HELP !!!!!!!!!!!!! ´ aos colegas más na questão do except o que devo fazer ? vlw a ajuda e t+


Pode até dar alguma coiza errada, más estou usando desde do dia em que consertei o programa ( um dia depois de postar este tópico ), e tenho usado sem nenhum problema, más se foi detectado um problema no código por que não corrigi-lo... segue código que uso atualmente...vlw t+..

procedure T_FORM_OS_BX.Button4Click(Sender: TObject);
var
  a,b,c : real;
  r:integer;
  g: string;
begin
    if DBLookupComboBox1.Text = ´´ then
    begin
    Showmessage (´É obrigatório seu prenchimento campo "Responsável"´);
    abort;
  end
    else
    begin
    QRLabel31.Caption := ´R$ ´+ BD_OFC_ELEGS_OOE_VALOR_TOT.Value;
    QuickRep1.PrinterSettings.Copies := BD_CONFOSGS_OOC_QDFIB.value;

    if Application.MessageBox(PAnsiChar(´Deseja dar saída a O.S. do cliente ´+BD_OFC_ELEGS_OOE_NOME.AsString+ ´ ?´), ´Pergunta´,
    MB_ICONQUESTION + MB_YESNO) <> IDYES then
    Abort;

    BD_AM_OSOE.Insert;
    BD_AM_OSOEGS_AMOOEI_CON_SAIDA.Value := ´ Consertado´;
    BD_AM_OSOEGS_AMOOEI_USU_LOG.Value:= _FORM_PRINCIPAL
    .StatusBar.Panels[2].text;
    BD_AM_OSOEGS_AMOOEI_END.Value :=  BD_OFC_ELEGS_OOE_END.Value;
    BD_AM_OSOEGS_AMOOEI_COMP.Value :=  BD_OFC_ELEGS_OOE_COMP.Value;
    BD_AM_OSOEGS_AMOOEI_BAIRRO.Value :=  BD_OFC_ELEGS_OOE_BAIRRO.Value;
    BD_AM_OSOEGS_AMOOEI_CIDADE.Value :=  BD_OFC_ELEGS_OOE_CIDADE.Value;
    BD_AM_OSOEGS_AMOOEI_CEP.Value :=  BD_OFC_ELEGS_OOE_CEP.Value;
    BD_AM_OSOEGS_AMOOEI_SOLUCAO.Value :=  BD_OFC_ELEGS_OOE_SOLUCAO.Value;
    BD_AM_OSOEGS_AMOOEI_TEL_01.Value :=  BD_OFC_ELEGS_OOE_TEL_01.Value;
    BD_AM_OSOEGS_AMOOEI_TEL_02.Value :=  BD_OFC_ELEGS_OOE_TEL_02.Value;
    BD_AM_OSOEGS_AMOOEI_TEL_03.Value :=  BD_OFC_ELEGS_OOE_TEL_03.Value;
    BD_AM_OSOEGS_AMOOEI_TEL_04.Value :=  BD_OFC_ELEGS_OOE_TEL_04.Value;
    BD_AM_OSOEGS_AMOOEI_ACESSORIOS.Value :=  BD_OFC_ELEGS_OOE_ACESSORIOS.Value;
    BD_AM_OSOEGS_AMOOEI_DEF_ALEGADO.Value :=  BD_OFC_ELEGS_OOE_DEF_ALEGADO.Value;
    BD_AM_OSOEGS_AMOOEI_TIPCONSERTO.Value :=  BD_OFC_ELEGS_OOE_TIPCONSERTO.Value;
    BD_AM_OSOEGS_AMOOEI_APROVSN.Value :=  BD_OFC_ELEGS_OOE_APROVSN.Value;
    BD_AM_OSOEGS_AMOOEI_DATA_AGE.Value := StrToDate(FormatDateTime(´dd/mm/yyyy´,Date));
    BD_AM_OSOEGS_AMOOEI_HORA_ENT.Value :=  BD_OFC_ELEGS_OOE_TIPCONSERTO.Value;
    BD_AM_OSOEGS_AMOOEI_UF.Value :=  BD_OFC_ELEGS_OOE_UF.Value;
    BD_AM_OSOEGS_AMOOEI_EMAIL.Value :=  BD_OFC_ELEGS_OOE_EMAIL.Value;
    BD_AM_OSOEGS_AMOOEI_NOME.Value := BD_OFC_ELEGS_OOE_NOME.Value;
    BD_AM_OSOEGS_AMOOEI_CODACES.Value := BD_OFC_ELEGS_OOE_CODACES.Value;
    BD_AM_OSOEGS_AMOOEI_DATA_ENT.Value := BD_OFC_ELEGS_OOE_DATA_ENT.Value;
    BD_AM_OSOEGS_AMOOEI_DATA_ORC.Value := BD_OFC_ELEGS_OOE_DATA_ORC.Value;
    BD_AM_OSOEGS_AMOOEI_VALOR_TOT.Value := Label17.Caption;
    BD_AM_OSOEGS_AMOOEI_APDESCR.Value := BD_OFC_ELEGS_OOE_APDESCR.Value;
    BD_AM_OSOEGS_AMOOEI_DEF_ALEGADO.Value :=  BD_OFC_ELEGS_OOE_DEF_ALEGADO.Value;
    BD_AM_OSOEGS_AMOOEI_MARCA.Value := BD_OFC_ELEGS_OOE_MARCA.Value;
    BD_AM_OSOEGS_AMOOEI_MODELO.Value := BD_OFC_ELEGS_OOE_MODELO.Value;
    BD_AM_OSOEGS_AMOOEI_NSERIE.Value := BD_OFC_ELEGS_OOE_NSERIE.Value;
    BD_AM_OSOEGS_AMOOEI_DATA_ORC.Value := BD_OFC_ELEGS_OOE_DATA_ENT.Value;
    BD_AM_OSOEGS_AMOOEI_DATA_SAI.Value := BD_OFC_ELEGS_OOE_DATA_SAI.Value;
    BD_AM_OSOEGS_AMOOEI_CODIGO_OS.Value := BD_OFC_ELEGS_OOE_CODIGO.Value;
    BD_AM_OSOEGS_AMOOEI_TEC_RESP.Value := BD_OFC_ELEGS_OOE_TEC_RESP.Value;
    BD_AM_OSOE.Post;
    BD_CAIXA.Insert;
    BD_CAIXAGS_CX_DESCRICAO.Value := ´Manutenção´;
    BD_CAIXAGS_CX_NATUREZA.Value := ´Valor recebido ref. a O.S. de Nº´+ label27.Caption;
    BD_CAIXAGS_CX_CRE_DEB.Value := ´C´;
    BD_CAIXAGS_CX_DATA.Value := StrToDate(FormatDateTime(´dd/mm/yyyy´,Date));
    BD_CAIXAGS_CX_COD_ORIGEM.Value := label27.Caption;
    BD_CAIXAGS_CX_VALOR_MOVIMENTO.Value := Label17.Caption;
    BD_CAIXAGS_CX_USU_LOG.Value := _FORM_PRINCIPAL.StatusBar.Panels[2].text;
    BD_CAIXAGS_CX_CODACESS.Value := BD_OFC_ELEGS_OOE_CODACES.Value;
    BD_CAIXA.Post;
    a:=strtofloat(edit3.text);
    b:=strtofloat(BD_OFC_ELEGS_OOE_VALOR_TOT.Value);
    c:= b-a ;
    QRLabel5.Caption := ´R$ ´+ floattostrf(c,ffFixed,10,2);
    QRLabel7.Caption := ´R$ ´+ Label17.Caption;
    QRLabel34.Caption := BD_OFC_ELEGS_OOE_NOME.Value;
    r:= BD_OFC_ELEGS_OOE_CODIGO.Value;
    g:=format(´¬5.5d´,[r]);
    QRLabel16.Caption:= g;
    with BD_ORCA_ITENS do
    begin
    First;
    Try
    while not BD_ORCA_ITENS.eof do
      begin
      BD_ESTOQUE.Close;
      BD_ESTOQUE.SQL.Clear;
      BD_ESTOQUE.SQL.Add(´select * from  ESTOQUE where GS_EST_CODIGO=´+inttostr(BD_ORCA_ITENSGS_OOEI_CODPROD.Value));
      BD_ESTOQUE.Open;
      BD_ESTOQUE.Edit;
      if not BD_ORCA_ITENSGS_OOEI_CODPROD.IsNull then
      begin
      BD_ESTOQUEGS_EST_QNT.Value := BD_ESTOQUEGS_EST_QNT.Value - BD_ORCA_ITENSGS_OOEI_QNT.Value;
      BD_ESTOQUE.Post;
      BD_ORCA_ITENS.next;
    end
    else
    BD_ORCA_ITENS.next;
    end;
    DM1.IBTransaction1.CommitRetaining;
    except
    showmessage(´Problema com o banco de dados.´);
    DM1.IBTransaction1.rollback;
    end;
    end;
    if Application.MessageBox(´Imprimir documento de saida ?´ , ´Imprimir´, MB_ICONQUESTION + MB_YESNO) = IDYES then
      QuickRep1.Print;
      BD_ORCA_ITENS.First;
        while not BD_ORCA_ITENS.Eof do
        BD_ORCA_ITENS.Delete;
        _FORM_OS_NAV.BD_OFC_ELE.Delete;
    if _FORM_OS_NAV <> nil then
      begin
      _FORM_OS_NAV.BD_OFC_ELE.Close;
      _FORM_OS_NAV.BD_OFC_ELE.Open;
      _FORM_OS_NAV.BD_OFC_ELE.Refresh;
    end;
      Close;
    end;
end;



fuiiiiiiiiiii


Responder

Gostei + 0

09/08/2006

Marco Salles

e tenho usado sem nenhum problema,[b:81f021ed2d] más se foi detectado um problema[/b:81f021ed2d] no código por que não corrigi-lo... segue código que uso atualmente...vlw t+..


Agora vamos focar o ´problema´ do Gigatel.. Pelo menos ´tentar´. Vamos supor que uma exceção é disparada .. Com foi colocado anteriormente , Tudo que esta abaixo do Exception end é executado. Citação: except showmessage(´Problema com o banco de dados.´); DM1.IBTransaction1.rollback; end; end; Mas e o Resto ???? Citação: if Application.MessageBox(´Imprimir documento de saida ?´ , ´Imprimir´, MB_ICONQUESTION + MB_YESNO) = IDYES then QuickRep1.Print; BD_ORCA_ITENS.First; while not BD_ORCA_ITENS.Eof do BD_ORCA_ITENS.Delete; _FORM_OS_NAV.BD_OFC_ELE.Delete; Close; end; Acho que , mesmo que ocorra uma exceção , ou dependendo do tipo , o Resto da Instrução tb será executada .... A pergunta que faço é : Esta correto , ocorrendo a exceção , Imprimir o Documento de Saida ????


[b:81f021ed2d]acho voce deve usar dois blocos try aninhados[/b:81f021ed2d]

try  //--->>dois blocos try aninhados
  Try
   erro:=False; 
    while not BD_ORCA_ITENS.eof do 
      begin 
      BD_ESTOQUE.Close; 
      BD_ESTOQUE.SQL.Clear; 
      BD_ESTOQUE.SQL.Add(´select * from  ESTOQUE where GS_EST_CODIGO=´+inttostr(BD_ORCA_ITENSGS_OOEI_CODPROD.Value)); 
      BD_ESTOQUE.Open; 
      BD_ESTOQUE.Edit; 
      if not BD_ORCA_ITENSGS_OOEI_CODPROD.IsNull then 
      begin 
      BD_ESTOQUEGS_EST_QNT.Value := BD_ESTOQUEGS_EST_QNT.Value - BD_ORCA_ITENSGS_OOEI_QNT.Value; 
      BD_ESTOQUE.Post; 
      BD_ORCA_ITENS.next; 
    end 
    else 
    BD_ORCA_ITENS.next; 
    end; 
    DM1.IBTransaction1.CommitRetaining; 
    except 
    erro:=True;
    showmessage(´Problema com o banco de dados.´); 
    DM1.IBTransaction1.rollback; 
    end; 
    end; 
    finally //--->coloque aqui o finally
      if  erro Then //se for gerado uma exceção benhuma pergunta sera feit
        abort
      else // so ira fazer a pergunta se nenhuma exceção foi levantada
        if Application.MessageBox(´Imprimir documento de saida ?´ , ´Imprimir´, MB_ICONQUESTION + MB_YESNO) = IDYES then 
           QuickRep1.Print; 
           BD_ORCA_ITENS.First; 
           while not BD_ORCA_ITENS.Eof do 
              BD_ORCA_ITENS.Delete; 
             _FORM_OS_NAV.BD_OFC_ELE.Delete; 
             if _FORM_OS_NAV <> nil then 
                begin 
                  _FORM_OS_NAV.BD_OFC_ELE.Close; 
                  _FORM_OS_NAV.BD_OFC_ELE.Open; 
                  _ FORM_OS_NAV.BD_OFC_ELE.Refresh; 
              end; 
          Close; 
       end; //--->>>fim do Finally
    end; 


se não errei nenhum begin end , acho que é isto ai ..


Responder

Gostei + 0

15/08/2006

Gigatel

Onde vc arrumou este ´ erro := false´ ?


Responder

Gostei + 0

15/08/2006

Gigatel

Pode tirar este comite deste código...posso coloca-lo o evento OnClose do Form...o q vc acha ?


Responder

Gostei + 0

16/08/2006

Marco Salles

Onde vc arrumou este ´ erro := false´ ?


é a [b:5274248218]inicialização[/b:5274248218] da variavel.... Se tudo ocorrer bem , esta variavel [b:5274248218]não [/b:5274248218]muda de valor... ela so ira mudar de valor se uma [b:5274248218]exceção[/b:5274248218] for lançada . nesse caso ´ela´ recebe o valor :=True

Pode tirar este comite deste código...posso coloca-lo o evento OnClose do Form...o q vc acha ?


não vejo razão para isto.. e acho ate estranho... Mas sem conhecer profundamente o mecanismo e a logica envolvida fica dificil para mim opinar com mais enfâse...


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar