Ajuda com requery e querys

Delphi

03/01/2004

Ser AutoDidata e cruel.

Amigos estou fazendo o seguinte Insert em minha tabela Acess com conecção ADO.

No evento click do botao tenho os codigos abaixo.


CODIGO DO CLICK DO BOTAO.

procedure TFrmCupom.ButtonConfirmaClick(Sender: TObject);
begin
if MessageDlg(´Confirmar Cupom?´,
mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
ADOQueryCupom.close;
ADOQueryCupom.SQL.Clear;
ADOQueryCupom.SQL.Add(´Insert into TabValeCompras(matricula,nome,codigovale,nomedovale,valor)values(:matricula,:nome,:codigovale,:nomedovale,:valor)´);
ADOQueryCupom.Parameters.ParamByName(´matricula´).value := DBE1Cupom.Text;
ADOQueryCupom.Parameters.ParamByName(´nome´).value := DBE2Cupom.Text;
ADOQueryCupom.Parameters.ParamByName(´codigovale´).value := DBEdit1CupomVale.Text;
ADOQueryCupom.Parameters.ParamByName(´nomedovale´).value := DBEdit1CupomValeDesc.Text;
ADOQueryCupom.Parameters.ParamByName(´valor´).value := Edit3CupomValor.Text;
ADOQueryCupom.ExecSQL;
end;
begin
begin
ADOQueryMAX.close;
ADOQueryMAX.open;
Label10.caption := inttostr(ADOQueryMAX.fieldbyname(´maiorcodigo´).asinteger + 1);
end;
DBE1Cupom.clear;
DBE2Cupom.clear;
DBEdit1CupomVale.Clear;
DBEdit1CupomValeDesc.Clear;
Edit3CupomValor.Clear;
Edit1.clear;
edit2.clear;
Edit1.SetFocus;
ButtonConfirma.Enabled := false;
FrmImpreCupom.QuickRep1.Preview; //AQUI CHAMO O MEU QUICK REPORT
end;
end;

NO MEU QUICK REPORT TENHO MAIS UM ADOQUERY QUE DA UM SELECT NA TABELA TABVALECOMPRAS DE CIMA
E NO MEU FORM CREATE DO FORM DO QUICK REPORT TENHO O SEGUINTE CODIGO.

ADOQueryImpressao.close;
ADOQueryImpressao.open;
ADOQueryImpressao.Last;

OU SEJA QUANDO EU DER O CLICK ELA DA O INSERT NA TABELA O ADOQUERYMAX ME MOSTRA O CODIGO QUE
VAI FICAR SO PRA EFEITO DE FRESCURA.
DEPOIS CHAMA O QUICKREPORT COM PREVIEW. SO QUE ELE SO ME MOSTRA O ANTERIOR, POR EXEMPLO SE
ESTOU INSERINDO O CODIGO 100 ELE ME MOSTRA NO PREVIEW DO QUICKREPORT O 99, ELE SO MOSTRA
O 100 SE EU SAIR DO PROGRAMA E ENTRAR NOVAMENTE, JA TENTEI REFRESH NA QUERY JA TENTEI REQUERY
QUANDO NAO DA A MENSAGEM DE ARQUIVO FECHADO ELE DA ERRO de o provedor nao oferece
suporte para retornar varios conjuntos de registros.


Uoquisala

Uoquisala

Curtidas 0

Respostas

Uoquisala

Uoquisala

03/01/2004

Uso adoconnection, no forma do quick report uso.

No oncreat
ADOQueryImpressao.close;
ADOQueryImpressao.open;
ADOQueryImpressao.Last;

E na Adoqueryimpressao tenho

select*from tabvalecompras;

So que ele nao pega a aque acabei de inserir pelo metodo INSERT de sql so pega a anterior, dai seu fechar o programa e abrir ele mostra a certa no quickreport.


publique a instrução da sua ADOQueryImpressao e nos diga qual banco de dados está utilizando. assim poderemos te dar respostas mais eficazes.



GOSTEI 0
Uoquisala

Uoquisala

03/01/2004

depois que adicionei o que vc me disse aconteceu o seguinte erro.

Você tentou confirmar ou repetir uma transação sem antes inicia-la


certo, então tente o seguinte: 1o. - adicione a seguinte linha no seu código: procedure TFrmCupom.ButtonConfirmaClick(Sender: TObject); begin     if MessageDlg(´Confirmar Cupom?´, mtConfirmation, [mbYes, mbNo], 0) = mrYes then     begin         ADOQueryCupom.close;         ADOQueryCupom.SQL.Clear;         ADOQueryCupom.SQL.Add(´Insert into TabValeCompras(matricula,nome,codigovale,nomedovale,valor)´);         ADOQueryCupom.SQL.Add(´values (:matricula,:nome,:codigovale,:nomedovale,:valor)´);         ADOQueryCupom.Parameters.ParamByName(´matricula´).value := DBE1Cupom.Text;         ADOQueryCupom.Parameters.ParamByName(´nome´).value := DBE2Cupom.Text;         ADOQueryCupom.Parameters.ParamByName(´codigovale´).value := DBEdit1CupomVale.Text;         ADOQueryCupom.Parameters.ParamByName(´nomedovale´).value := DBEdit1CupomValeDesc.Text;         ADOQueryCupom.Parameters.ParamByName(´valor´).value := Edit3CupomValor.Text;         ADOQueryCupom.ExecSQL;         [b:4f89de684f]ADOQueryCupom.Connection.CommitTrans;[/b:4f89de684f] // esta linha irá forçar a gravação do registro         {...} 2o. altere a instrução da sua ADOQueryImpressao para: select * from tabvalecompras where [i:4f89de684f]codigovale[/i:4f89de684f] = (select max([i:4f89de684f]codigovale[/i:4f89de684f]) from tabvalecompras) onde está [i:4f89de684f]codigovale[/i:4f89de684f], altere para o mesmo campo que é utilizado na ADOQueryMAX. dessa forma só será trazido o último registro inserido e 3o. fazendo assim, o trecho de código que hoje é: ADOQueryImpressao.close; ADOQueryImpressao.open; ADOQueryImpressao.Last mudaria para: ADOQueryImpressao.close; ADOQueryImpressao.open;



GOSTEI 0
Fabiomiranda

Fabiomiranda

03/01/2004

Voce tem que Startar a transacao no inicio da procedure.


GOSTEI 0
Uoquisala

Uoquisala

03/01/2004

Como Fazer isto, pode me ajudar se possível.

Voce tem que Startar a transacao no inicio da procedure.



GOSTEI 0
Uoquisala

Uoquisala

03/01/2004

Novamente não atualiza , so se eu fechar o programa e abrir de novo.

                ADOQueryCupom.Connection.[b:3b76c957b9]StartTrans[/b:3b76c957b9]; // esta linha irá iniciar a transação                 ADOQueryCupom.ExecSQL;                 ADOQueryCupom.Connection.CommitTrans; // esta linha irá forçar a gravação do registro, terminando a transação onde vc lê StartTrans pode ser BeginTrans ou outra similar. Verifique no help.



GOSTEI 0
POSTAR