Dados de um form para o outro....
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..
[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
Curtidas 0
Respostas
Paullsoftware
28/07/2006
Desculpa mais não entendi exatamente qual seria a sua dúvida...
GOSTEI 0
Gigatel
28/07/2006
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...
GOSTEI 0
Marco Salles
28/07/2006
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.
GOSTEI 0
Micheus
28/07/2006
Porque voce fez :
não esta faltando um Begin End nesta instrução ????
except
begin
showmessage(´Problema com o banco de dados.´);
DM1.IBTransaction1.rollback;
end;
except showmessage(´Problema com o banco de dados.´); DM1.IBTransaction1.rollback;
[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;
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. :?:
GOSTEI 0
Marco Salles
28/07/2006
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.
GOSTEI 0
Marco Salles
28/07/2006
[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.
[b:d6991a6deb]Mas e o Resto ????[/b:d6991a6deb] :?: :?: :?:
[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]
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]
GOSTEI 0
Gigatel
28/07/2006
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+
GOSTEI 0
Gigatel
28/07/2006
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
GOSTEI 0
Marco Salles
28/07/2006
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 ..
GOSTEI 0
Gigatel
28/07/2006
Onde vc arrumou este ´ erro := false´ ?
GOSTEI 0
Gigatel
28/07/2006
Pode tirar este comite deste código...posso coloca-lo o evento OnClose do Form...o q vc acha ?
GOSTEI 0
Marco Salles
28/07/2006
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...
GOSTEI 0