sábado, 18 de dezembro de 2010

Delphi - Access violation at address 03491BC9 in module 'dbexpora.dll'

Erro ao executar um clientdataset que chama uma procedure Oracle:
Access violation at address 03491BC9 in module 'dbexpora.dll'. Read of address 00000088.

Este erro sempre ocorre quando há algum erro na passagem dos parâmetros.

Se você estiver passando os parâmetros via CommandText, pode ter esquecido algum ":" antes do parâmetro. Ou então o SQLQuery está com parâmetros diferentes do ClientDataset

Delphi - Rave Reports: Unable to gain control of Rave data Communication System.

Erro: Unable to gain Control of RAVE Data communication System

Ao abrir duas aplicações que utilizam o mesmo relatório Rave simultaneamente, é apresentada. A solução é bastante simples, bastando abrir o arquivo de projeto (DPR) e acrescentar o seguinte:

program Project1;
uses
SysUtils, RPDefine, Forms,
Unit1 in ‘Unit1.pas’ {Form1};
{$R *.res}
begin
RPDefine.DataID := IntToStr(Application.Handle);
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.

Solução extraída do Blog do André Ferreira de Moraes
http://anfm.blogspot.com/2009/04/erro-unable-to-gain-control-of-rave.html

Delphi - chamando procedure com parâmetro tipo data: errro Invalid Field Type

Ao dar Execute em um client dataset que está chamando uma procedure em Oracle, que possui parâmetros tipo data, ocorre o erro Invalid Field Type.

Para resolver, você deve usar uma variável do tipo SQLTimeStamp para passar os parâmetros.

Adicione a unit SQLTimST no Uses;

Exemplo:
var
myTimeStamp: TSQLTimeStamp;
begin

cdsAuxGeral.Close;
cdsAuxGeral.CommandText :=
' begin ' +
' pkg_teste.RetornaVendasPeriodo(:p_DataHoraIni, :p_DataHoraFim, :lst);'+
' end; ';
cdsAuxGeral.Params.Clear;

cdsAuxGeral.Params.CreateParam(ftTimeStamp,'p_DataHoraIni', ptInput);
cdsAuxGeral.Params.CreateParam(ftTimeStamp,'p_DataHoraFim', ptInput);


cdsAuxGeral.Params.CreateParam(ftCursor,'Lst', ptOutput);

myTimeStamp := DateTimeToSQLTimeStamp(pPeriodoIni);
cdsAuxGeral.Params.ParamByName('p_DataHoraIni').AsSQLTimeStamp := myTimeStamp;

myTimeStamp := DateTimeToSQLTimeStamp(pPeriodoFim);
cdsAuxGeral.Params.ParamByName('p_DataHoraFim').AsSQLTimeStamp := myTimeStamp;

cdsAuxGeral.Execute;

Delphi - Rave Reports imprimindo o texto 'INVALID' no datatext

Isso acontece quando seu ClientDataset foi alterado (ao adicionar ou modificar algum campo).

No projeto do relatório, com o RaveReports aberto, localize seu RvDataSetConnection (lado direito da tela), clique com o botão direito e selecione REFRESH. E confirme com SIM para atualizar os campos.

Configurando TNSNAMES.ORA no Oracle Client

- Configurando o TNSNAMES.ORA no Oracle XE Client:

- Menu Iniciar\Executar: regedit;
- Crie um string value (valor de sequencia) chamada TNS_ADMIN em HKLM\Software\Oracle\KEY_XEClient\ , com value data = C:\XEClient\NETWORK\ADMIN


- Crie o arquivo tnsnames.ora na pasta C:\XEClient\NETWORK\ADMIN;
- E coloque configure suas conexões dentro dele.


***************************************
Configuring tnsnames.ora for Oracle 10g XE client

1. open regedit
2. create a string value HKLM\Software\Oracle\KEY_XEClient\TNS_ADMIN with value data = 'C:\XEClient\NETWORK\ADMIN'
3. create the tnsnames.ora file C:\XEClient\NETWORK\ADMIN\tnsnames.ora
4. Fill this file with your data conections;

quarta-feira, 1 de dezembro de 2010

Delphi - Internal error L681 ao dar o BUILD no projeto

No Delphi, ao dar um BUILD no projeto, ocorre o erro de compilação:
"Internal error L681".

Solução:
O erro ocorre pois a declaração de 'overload' de alguma função está replicada no bloco IMPLEMENTATION, e deve estar apensa no bloco INTERFACE.

Você deve retirar a palavra 'overload;' da função, no bloco IMPLEMENTATION

Ex.:

interface

function RetornaValor(pParam : String): Integer; overload;

implementation

function RetornaValor(pParam : String): Integer; overload;
begin
...
end;