Ajuda com requery e querys
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.
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
Curtidas 0
Respostas
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.
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
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
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
03/01/2004
Voce tem que Startar a transacao no inicio da procedure.
GOSTEI 0
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
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