Fórum Erro ao utilizar parametros para um intervalo de datas #13872
11/01/2010
0
Debugger Exception Notification
---------------------------
Project raiox.exe raised exception class EAccessViolation with message 'Access violation at address 00578F78 in module 'raiox.exe'. Read of address 000000B0'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
Lucas Souza
Curtir tópico
+ 0Posts
11/01/2010
Lucas Souza
dmGeral.QryQuantExames2.ParamByName('dataf').AsDate := StrToDate(dataf.text);
qrExamesQuantidade.Preview; O erro está descrito na primeira interação desse chamado. Aguardo resposta, lembrando que estou utilizando DBExpress e Firebird
Gostei + 0
11/01/2010
Wesley Yamazack
Tenta passar os parametros com asString, ao inves de asDate. Pois firebird trabalha com data 11-01-2010, senão estou enganado, tente usar o asString, caso contrario tente fazer um
dmGeral.QryQuantExames2.ParamByName('datai').AsString := Formatdatetime('dd-mm-yyyy', DateToStr(EdtDataini.Text));
Veja se isso não irá resolver teu problema.
Um abraço
Wesley Y
Gostei + 0
11/01/2010
Lucas Souza
dmGeral.QryQuantExames2.ParamByName('dataf').AsString := Formatdatetime('dd-mm-yyyy', DateToStr(dataf.Text)); Deu o seguinte erro: [Error] ufrmIntQuantExames.pas(34): There is no overloaded version of 'DateToStr' that can be called with these arguments
[Error] ufrmIntQuantExames.pas(35): There is no overloaded version of 'DateToStr' that can be called with these arguments
[Fatal Error] raiox.dpr(17): Could not compile used unit 'ufrmIntQuantExames.pas'
Gostei + 0
11/01/2010
Lucas Souza
dmGeral.QryQuantExames2.ParamByName('dataf').AsString := Formatdatetime('dd-mm-yyyy', DatetoStr(dataf.Text)); Uitlizei: dmGeral.QryQuantExames2.ParamByName('datai').AsString := Formatdatetime('dd-mm-yyyy', StrToDate(datai.Text));
dmGeral.QryQuantExames2.ParamByName('dataf').AsString := Formatdatetime('dd-mm-yyyy', StrToDate(dataf.Text)); Deu o seguinte erro quando chamo o relatório: ---------------------------
Debugger Exception Notification
---------------------------
Project raiox.exe raised exception class EAccessViolation with message 'Access violation at address 00578F8B in module 'raiox.exe'. Read of address 000000B0'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
Gostei + 0
12/01/2010
Wesley Yamazack
Fiz um teste aqui com FB, e consegui da seguinte forma.
SQLQuery1.Params.ParamByName('DATA_PGTO').AsDate := StrToDate(Edit1.Text);
SQLQuery1.Open;
Esta funcionando sem problemas, agora access violation, só acontece quando o objeto não esta criado, ou já foi destruído, veja se este DM que você esta usando não esta criado.
Um abraço
Wesley Y
Gostei + 0
12/01/2010
Lucas Souza
begin
dmgeral := Tdmgeral.Create(Self); end; end. E usei o seguinte código no botão que chama o relatório: procedure TfrmIntQuantExames.Button1Click(Sender: TObject);
begin dmGeral.QryQuantExames2.ParamByName('datai').AsDate := StrtoDate(datai.Text);
dmGeral.QryQuantExames2.ParamByName('dataf').AsDate := StrtoDate(datai.Text);
dmgeral.cdsQuantExames2.Open;
qrExamesQuantidade.Preview;
end; Não dá erro algum, somente não retorna nenhum resultado no relatório, se eu colocar a data direto na Query retorna normalmente, veja minha query com os parâmetros: SELECT DISTINCT a.CODTIPOEXAME, count(*) as total, b.nome,b.numero FROM CHAPAS a, TIPOEXAMES b WHERE a.DATA BETWEEN :datai AND :dataf and a.CODTIPOEXAME = b.COD GROUP BY a.CODTIPOEXAME, b.NOME, b.numero ORDER BY count(*) DESC
Gostei + 0
12/01/2010
Wesley Yamazack
Faça as seguintes alterações, e me diga os resultados, caso ocorra erro me avise o mesmo.
procedure TfrmIntQuantExames.FormCreate(Sender: TObject);
begin
Try
dmgeral := Tdmgeral.Create(Self);
Except
on e : Exception do
begin
ShowMessage('Ao Criar DataModule ' + #13 +
E.Message + #13 +)
E.ClassName + #13 +
end;
End;
end;
end. E usei o seguinte código no botão que chama o relatório: procedure TfrmIntQuantExames.Button1Click(Sender: TObject);
begin
Try
dmGeral.QryQuantExames2.Params.ParamByName('datai').AsDate := StrtoDate(datai.Text);
dmGeral.QryQuantExames2.Params.ParamByName('dataf').AsDate := StrtoDate(dataf.Text);
dmgeral.cdsQuantExames2.Open;
ShowMessage('Qtd de Registros Encontradosm : ' + IntToStr(dmgeral.cdsQuantExames2.RecordCount) );
qrExamesQuantidade.Preview; {Pq isso ? Preview ? Que query é esta qrExamesQuantidade? Você esta dando que comando nesta query }
Except
on e : Exception do
begin
ShowMessage('Erro ao abrir SQL ' + #13 +
E.Message + #13 +)
E.ClassName + #13 +
end;
End;
end;
Um abraço
Wesley Y
Gostei + 0
12/01/2010
Lucas Souza
32 begin
33 Try
34 dmgeral := Tdmgeral.Create(Self);
35 Except
36 on e : Exception do
37 begin
38 ShowMessage('Ao Criar DataModule ' + #13 +
39 E.Message + #13 +)
40 E.ClassName + #13 +
41 end;
42 End;
43 end;
44
45 procedure TfrmIntQuantExames.Button1Click(Sender: TObject);
46 begin
47 Try
48
49 dmGeral.QryQuantExames2.Params.ParamByName('datai').AsDate := StrtoDate(datai.Text);
50 dmGeral.QryQuantExames2.Params.ParamByName('dataf').AsDate := StrtoDate(dataf.Text);
51
52 dmgeral.cdsQuantExames2.Open;
53 ShowMessage('Qtd de Registros Encontradosm : ' + IntToStr(dmgeral.cdsQuantExames2.RecordCount) );
54
55 qrExamesQuantidade.Preview; {Pq isso ? Preview ? Que query é esta qrExamesQuantidade? Você esta dando que comando nesta query }
56
57
58 Except
59 on e : Exception do
60 begin
61 ShowMessage('Erro ao abrir SQL ' + #13 +
62 E.Message + #13 +)
63 E.ClassName + #13 +
64 end;
65 End;
66 end;
67
68
69 end. veja os erros: [Error] ufrmIntQuantExames.pas(39): Expression expected but ')' found
[Error] ufrmIntQuantExames.pas(40): Missing operator or semicolon
[Error] ufrmIntQuantExames.pas(41): Expression expected but 'END' found
[Error] ufrmIntQuantExames.pas(62): Expression expected but ')' found
[Error] ufrmIntQuantExames.pas(63): Missing operator or semicolon
[Error] ufrmIntQuantExames.pas(64): Expression expected but 'END' found
[Fatal Error] ufrmPrincipal.pas(79): Could not compile used unit 'ufrmIntQuantExames.pas'
Gostei + 0
12/01/2010
Wesley Yamazack
Agora eu que peço desculpas pois o código não esta correto. veja as alterações.
procedure TfrmIntQuantExames.FormCreate(Sender: TObject);
begin
Try
dmgeral := Tdmgeral.Create(Self);
Except
on e : Exception do
begin
ShowMessage('Ao Criar DataModule ' + #13 +
E.Message + #13 +
E.ClassName );
end;
End;
end;
end. E usei o seguinte código no botão que chama o relatório: procedure TfrmIntQuantExames.Button1Click(Sender: TObject);
begin
Try
dmGeral.QryQuantExames2.Params.ParamByName('datai').AsDate := StrtoDate(datai.Text);
dmGeral.QryQuantExames2.Params.ParamByName('dataf').AsDate := StrtoDate(dataf.Text);
dmgeral.cdsQuantExames2.Open;
ShowMessage('Qtd de Registros Encontradosm : ' + IntToStr(dmgeral.cdsQuantExames2.RecordCount) );
qrExamesQuantidade.Preview; {Dúvida, o seu Quick reports esta apontando para o CDSQuantExames2 certo ? Pois se estiver apontando para Query não ira funcionar}
Except
on e : Exception do
begin
ShowMessage('Erro ao abrir SQL ' + #13 +
E.Message + #13 +
E.ClassName );
end;
End;
end;
Um Abraço
Wesley Y
Gostei + 0
12/01/2010
Lucas Souza
Gostei + 0
12/01/2010
Wesley Yamazack
01- Porque só funciona com o ClientDataSet e a Query desativada, se colocar como true não retorna resultado nenhum?
R : Você esta falando ativar na hora que estiver desenvolvendo, se for isso, é por que você não tem valor nos paremtros da sua query.
02 - Porque se gero um relatório agora, se só gera outro reletório com intervalo de datas diferentes se eu fechar a aplicação e abrir novamente?
R : Antes de executar teu comando manda dar um CDSCliente.Close, antes de tudo para poder fechar o dataset sacou ?
Um abraço
Wesley Y
Gostei + 0
14/01/2010
Lucas Souza
dmGeral.QryQuantExames2.Params.ParamByName('datai').AsDate := StrtoDate(datai.Text);
dmGeral.QryQuantExames2.Params.ParamByName('dataf').AsDate := StrtoDate(dataf.Text);
dmgeral.cdsQuantExames2.Open;
qrExamesQuantidade.Preview; Mas parece que é quando fecha o form de inserir as datas, depois reabri-lo que dá o problema.
Gostei + 0
15/01/2010
Wesley Yamazack
- Vá no clientdataset, botão direito e fetchparams.
-
dmgeral.cdsQuantExames2.Close;
dmGeral.cdsQuantExames2.Params.ParamByName('datai').AsDate := StrtoDate(datai.Text);
dmGeral.cdsQuantExames2.Params.ParamByName('dataf').AsDate := StrtoDate(dataf.Text);
dmgeral.cdsQuantExames2.Open;
qrExamesQuantidade.Preview;
Veja se isso irá resolver o teu problema.
Um abraço
Wesley Y
Gostei + 0
15/01/2010
Lucas Souza
Gostei + 0
15/01/2010
Wesley Yamazack
Depois do Open faça o seguinte
dmgeral.cdsQuantExames2.Close;
dmGeral.QryQuantExames2.Params.ParamByName('datai').AsDate := StrtoDate(datai.Text);
dmGeral.QRYQuantExames2.Params.ParamByName('dataf').AsDate := StrtoDate(dataf.Text);
dmgeral.cdsQuantExames2.Open;
Showmessage('Total de Registro encontrados : ' + IntToStr(cdsQuantExames2.RecordCount));
// e veja o que iá aparecer
qrExamesQuantidade.Preview;
Um abraço
Wesley Y
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)