access violation at address 000000 no win7 ?
Pessoal tenho um sistema que no xp roda que é uma maravilha, ja no win7 64 da pau, resolvi colocar o delphi 7 na maquina win7 64, e compilar o sistema pra debugar e ver o que ocorre.
Percebi que logo de cara dava pau e a mensagem access violation at address 000000
Ao debugar vi que o problema esta no select. (uso o zeos 6.6.6 stable neste programa com firebird 2.1)
Utilizo INI para acesso ao banco.
Resolvi conectar diretamente no datamodule, o zConnection funcionou normal, agora quando tento abrir o zQuery (propriedade action = true) da novamente o erro access violation at address 000000
Fui no IbExpert pra ver se poderia ter algo a ver com isso, e nada abre a conexao e as tabelas normais.
Resolvi debugar entre os codigos F7 pra ver aonde ocorria o tal erro.
Não me lembro de cabeça qual é a unidade que esta dando pau no zeos, mais parece algo semelhante com uInterbase6.pas, sei que tem algo com Interbase6 nesta unidade que esta dando problema. E ao debugar o codigo faz umas comparações com o primeiro select que tenho no oncreate para verificar o registro do sistema, então ele verifica variias vezes a mesma linha de codigo até chegar em um momento que fecha a conexao causando um UNAVAILABLE DATABASE, e quando acontece isso, entra num exception do codigo do zeos e da pau.
Achei que o problema poderia esta na versão do zeos, e resolvi, copiar e colar o datamodule em um novo projeto e neste novo projeto ele abre normal sem erros de violação de acesso, inclusive coloquei num form um dbgrid setado para o zquery e fiz das duas formas o select, diretamente pelo componente, e no aplicativo abrindo em tempo de projeto, e ambas funcionaram.
Então fiquei na estaca zero, pq não consigo localizar a fonte do erro, o pe esta acontecendo isso?
Note: Este mesmo sistema esta no WinXp sem problemas. Sem mudar nenhuma linha de codigo
Pior que no win7 compilo da pau e não roda o sistema, mais se eu der um build no mesmo ele atualiza o executavel e na minha maquina consigo roda-lo. Só não na maquina do cliente.
este negocio esta me deixando louco.
Obs: Não tenho nem o interbase e nada referente ao interbase nesta maquina que possa estar dando conflito com o firebird. Até a dll do interbase retirei do system32
Percebi que logo de cara dava pau e a mensagem access violation at address 000000
Ao debugar vi que o problema esta no select. (uso o zeos 6.6.6 stable neste programa com firebird 2.1)
Utilizo INI para acesso ao banco.
Resolvi conectar diretamente no datamodule, o zConnection funcionou normal, agora quando tento abrir o zQuery (propriedade action = true) da novamente o erro access violation at address 000000
Fui no IbExpert pra ver se poderia ter algo a ver com isso, e nada abre a conexao e as tabelas normais.
Resolvi debugar entre os codigos F7 pra ver aonde ocorria o tal erro.
Não me lembro de cabeça qual é a unidade que esta dando pau no zeos, mais parece algo semelhante com uInterbase6.pas, sei que tem algo com Interbase6 nesta unidade que esta dando problema. E ao debugar o codigo faz umas comparações com o primeiro select que tenho no oncreate para verificar o registro do sistema, então ele verifica variias vezes a mesma linha de codigo até chegar em um momento que fecha a conexao causando um UNAVAILABLE DATABASE, e quando acontece isso, entra num exception do codigo do zeos e da pau.
Achei que o problema poderia esta na versão do zeos, e resolvi, copiar e colar o datamodule em um novo projeto e neste novo projeto ele abre normal sem erros de violação de acesso, inclusive coloquei num form um dbgrid setado para o zquery e fiz das duas formas o select, diretamente pelo componente, e no aplicativo abrindo em tempo de projeto, e ambas funcionaram.
Então fiquei na estaca zero, pq não consigo localizar a fonte do erro, o pe esta acontecendo isso?
Note: Este mesmo sistema esta no WinXp sem problemas. Sem mudar nenhuma linha de codigo
Pior que no win7 compilo da pau e não roda o sistema, mais se eu der um build no mesmo ele atualiza o executavel e na minha maquina consigo roda-lo. Só não na maquina do cliente.
este negocio esta me deixando louco.
Obs: Não tenho nem o interbase e nada referente ao interbase nesta maquina que possa estar dando conflito com o firebird. Até a dll do interbase retirei do system32
Adriano Dolce
Curtidas 0
Respostas
Adriano Dolce
03/05/2011
Não consigo entender o que acontece quando vou compilar o sistema no windows 7. 64bits
O sistema é o mesmo que uso no windows xp, o delphi é o mesmo, o componente é o mesmo, o banco é o mesmo, mais não consigo compilar no win seven.
Se dou um build não mostra erro, agora fiz a conexão direta no datamodule e abriu as tabelas normal sem erro, mais o infeliz da erro quando compilo... Olhem a imagem
BANCO DE DADOS INDISPONIVEL, mais porque, sendo que esta conectado no datamodulo?
O erro aponta para este bloco do zeos entrando no exception
Não sei o que são estas diretivas pra que serve, se é para desviar do interbase, enfim não sei.
Código:
A unidade que da este pau é esta aqui
ZDbcInterbase6Utils
Olhem que eu consigo conexão normal
To ficando louco com este maudito zeos, ou win7 ou delphi 7... Pq não compila, e consequentemente não consigo instalar em computadores win7 64bits
O sistema é o mesmo que uso no windows xp, o delphi é o mesmo, o componente é o mesmo, o banco é o mesmo, mais não consigo compilar no win seven.
Se dou um build não mostra erro, agora fiz a conexão direta no datamodule e abriu as tabelas normal sem erro, mais o infeliz da erro quando compilo... Olhem a imagem
BANCO DE DADOS INDISPONIVEL, mais porque, sendo que esta conectado no datamodulo?
O erro aponta para este bloco do zeos entrando no exception
Não sei o que são estas diretivas pra que serve, se é para desviar do interbase, enfim não sei.
Código:
procedure CheckInterbase6Error(PlainDriver: IZInterbasePlainDriver;
StatusVector: TARRAY_ISC_STATUS; LoggingCategory: TZLoggingCategory = lcOther;
SQL: string = '');
var
Msg: array[0..1024] of Char;
PStatusVector: PISC_STATUS;
ErrorMessage, ErrorSqlMessage: string;
ErrorCode: LongInt;
begin
if (StatusVector[0] = 1) and (StatusVector[1] > 0) then
begin
ErrorMessage:='';
PStatusVector := @StatusVector;
while PlainDriver.isc_interprete(Msg, @PStatusVector) > 0 do
ErrorMessage := ErrorMessage + ' ' + StrPas(Msg);
ErrorCode := PlainDriver.isc_sqlcode(@StatusVector);
PlainDriver.isc_sql_interprete(ErrorCode, Msg, 1024);
ErrorSqlMessage := StrPas(Msg);
{$IFDEF INTERBASE_EXTENDED_MESSAGES}
if SQL <> '' then
SQL := Format(' The SQL: %s; ', [SQL]);
{$ENDIF}
if ErrorMessage <> '' then
begin
DriverManager.LogError(LoggingCategory, PlainDriver.GetProtocol,
ErrorMessage, ErrorCode, ErrorSqlMessage + SQL);
{$IFDEF INTERBASE_EXTENDED_MESSAGES}
raise EZSQLException.CreateWithCode(ErrorCode,
Format('SQL Error: %s. Error Code: %d. %s',
[ErrorMessage, ErrorCode, ErrorSqlMessage]) + SQL);
{$ELSE}
raise EZSQLException.CreateWithCode(ErrorCode,
Format('SQL Error: %s. Error Code: %d. %s',
[ErrorMessage, ErrorCode, ErrorSqlMessage]));
{$ENDIF}
end;
end;
end;A unidade que da este pau é esta aqui
ZDbcInterbase6Utils
Olhem que eu consigo conexão normal
To ficando louco com este maudito zeos, ou win7 ou delphi 7... Pq não compila, e consequentemente não consigo instalar em computadores win7 64bits
GOSTEI 0
Rafael Mattos
03/05/2011
vc consegue acessar ele por outro programa? exemplo IBExpert?
GOSTEI 0
Adriano Dolce
03/05/2011
Ola amigo, obrigado por responder....
Sim consigo conectar pelo ibexpert e dentro do datamodule.
Mais basta eu usar o F9 para que ele feche a conexão cfe imagem acima.
Se eu usar somente o BUILD do delphi, atualiza o sistema com alterações efetuadas e consigo executar o sistema com as alterações, mais por fora do delphi com o F9 não consigo, e é só neste projeto ai.
Sim consigo conectar pelo ibexpert e dentro do datamodule.
Mais basta eu usar o F9 para que ele feche a conexão cfe imagem acima.
Se eu usar somente o BUILD do delphi, atualiza o sistema com alterações efetuadas e consigo executar o sistema com as alterações, mais por fora do delphi com o F9 não consigo, e é só neste projeto ai.
GOSTEI 0
Rafael Mattos
03/05/2011
não trabalho com o ZEUS, mas ja tive, erro semelhante era com o INI, tava apontando para o GDS32.dll ao inves de apontar para fbClient.dll
tanto que pelo IBExpert abria,mas meu programa não.
-----------
Da uma olhada ve na pasta desse projeto não tem uma versão de dll antiga
-----------
Da uma olhada ve na pasta desse projeto não tem uma versão de dll antiga
GOSTEI 0
Adriano Dolce
03/05/2011
não trabalho com o ZEUS, mas ja tive, erro semelhante era com o INI, tava apontando para o GDS32.dll ao inves de apontar para fbClient.dll
tanto que pelo IBExpert abria,mas meu programa não.
-----------
Da uma olhada ve na pasta desse projeto não tem uma versão de dll antiga
Então, eu ja tinha visto isso que vc falou amigo, inclusive tudo que era desta DLL GDS32.dll eu exclui do computador, e não resolveu, ai resolvi copiar o fbclient.dll com o nome GDS32.dll para ver se renomeando o fbclient com este nome fosse resolver, e nada ainda... Então estou com a dll fbclient na pasta system32 com o nome original e renomeado para GDS32.-----------
Da uma olhada ve na pasta desse projeto não tem uma versão de dll antiga
GOSTEI 0
Rafael Mattos
03/05/2011
mas dentro da pasta do projeto não tem?
GOSTEI 0
Adriano Dolce
03/05/2011
Então, como disse enteriormente, não tenho esta dll na minha maquina, tudo que tinha referente a ela, exclui do computador, só tenho ela mais renomeada com o o nome, mais o conteudo é da fbclient.
Tenho o fbclient na pasta aonde tem o projeto, e no system32 também, alem de mais duas dll que pertence ao zeos
fbclient20.dll e a outra não me lembro de cabeça.
Obrigado amigo.
Tenho o fbclient na pasta aonde tem o projeto, e no system32 também, alem de mais duas dll que pertence ao zeos
fbclient20.dll e a outra não me lembro de cabeça.
Obrigado amigo.
GOSTEI 0
Adriano Dolce
03/05/2011
O arquivo INI que eu tenho é este aqui
[ConexaoBanco]
HostName=
Database=192.168.1.101:C:\Aldac\Motoboy\Dados\MOTOBOY.FDB
Port=3050
Password=masterkey
User=SYSDBA
Protocol=firebird-2.1
No oncreate do form principal chamo assim o INI
depois dentro do datamodule estão as conexoes com o INI
Depois de ler eu faço uma conexao com a rede atraves de uma procedure
A procedure ConectarDatabase é esta aqui
O que o zConnection recebe nestas propriedades são
Database := '192.168.1.101:C:\Aldac\Motoboy\Dados\MOTOBOY.FDB'
User := 'SYSDBA'
Password := 'masterkey'
Protocol := 'firebird-2.1'
É isso que o debug mostra ai passa pelo connect e entra no select abaixo cfe mostro no codigo acima.
Na hora do open para abrir a tabela da o erro.
Debuguei com F7 para ver até aonde ia o erro, e caiu na unidade do zeos, ai são varias classes do zeos que chama outra classe e assim vai.
Reparei no bloco do zeos que ele passa diversas vezes por aquiele mesmo local trazendo valor na variavel SQL do codigo do zeos, até chegar o momento que cai a conexao do o banco e da o erro.
Minhas suspeitas recaem ao zeos em ambiente 64 bits, pois compilei no win xp sp3 e funciona, depois compilei o memso projeto no win 7 32bits e funciona também, ja no win 7 64 bits esta dando pau.
Obrigado amigo.
[ConexaoBanco]
HostName=
Database=192.168.1.101:C:\Aldac\Motoboy\Dados\MOTOBOY.FDB
Port=3050
Password=masterkey
User=SYSDBA
Protocol=firebird-2.1
No oncreate do form principal chamo assim o INI
dm.CarregaArquivoIni;
depois dentro do datamodule estão as conexoes com o INI
//funcoes INI
//Primeiro verifica se tem o arquivo ini de conexão com o banco
//se não tiver precisa perguntar se vai ser local o remoto
procedure TDM.GravarINITableMotoboy(Ip, CaminhoDB, Porta, Pass, Userx,
Protoc: String);
var
Arq: TIniFile;
NovoNome: string;
begin
(* Cria arquivo ini *)
NovoNome := dm.DataDirectory + 'ConexaoBanco.ini';
if not FileExists(NovoNome) then
begin
Arq := TIniFile.Create(NovoNome);
try
Arq.WriteString('ConexaoBanco', 'HostName', IP);
Arq.WriteString('ConexaoBanco', 'Database', CaminhoDB);
Arq.WriteString('ConexaoBanco', 'Port', Porta);
Arq.WriteString('ConexaoBanco', 'Password', Pass);
Arq.WriteString('ConexaoBanco', 'User', Userx);
Arq.WriteString('ConexaoBanco', 'Protocol', Protoc);
//Autor: Adriano
//Data: 22/04/2011
//Não ha mais necessidade da linha abaixo.
{
if frmParametrizarBanco.bTipoConnection = True then
Arq.WriteString('ConexaoBanco', 'Tipo Conexão', RetornaVersaoFirebird)
else
Arq.WriteString('ConexaoBanco', 'Tipo Conexão', RetornaVersaoFirebird);
}
finally
FreeAndNil(Arq);
end;
end;
end;
procedure TDM.CarregaArquivoIni;
var
Porta, CaminhoDB: String;
Arq: TIniFile;
ListaAtributos: TStrings;
i: Integer;
NovoNome: string;
begin
//Se não tiver gravado o INI no diretorio então cria o INI
(* Cria arquivo ini *)
NovoNome := dm.DataDirectory + 'ConexaoBanco.ini';
if not FileExists(NovoNome) then
begin
Arq := TIniFile.Create(NovoNome);
try
MeuIP := IdIPWatch1.LocalIP; //busca o IP da maquina
Application.CreateForm(TfrmParametrizarBanco, frmParametrizarBanco);
if frmParametrizarBanco.ShowModal = mrOk then
GravarINITableMotoboy('', //Nome do computador
frmParametrizarBanco.edtCaminhoBanco.Text, //Caminho do banco
frmParametrizarBanco.edtPorta.Text,
frmParametrizarBanco.edtsenha.Text,
frmParametrizarBanco.edtUser.Text,
frmParametrizarBanco.cbProtocolo.Text);
finally
FreeAndNil(Arq);
end;
end;
//Lista e carrega o INI no sistema
ListaAtributos := TStringList.Create;
CaminhoINI := dm.DataDirectory + 'ConexaoBanco.ini';
//Se existe o INI então conecta
if not FileExists(CaminhoINI) then
raise Exception.Create('Atenção! Não foi criado o arquivo CONEXAOBANCO.INI')
else
begin
(* Le o arquivo INI *)
Arq := TIniFile.Create(CaminhoINI);
Arq.ReadSectionValues('ConexaoBanco', ListaAtributos);
sHostName := Arq.ReadString('ConexaoBanco','HostName','');
sDatabase := Arq.ReadString('ConexaoBanco','Database','');
sPort := Arq.ReadString('ConexaoBanco','Port','');
sPassword := Arq.ReadString('ConexaoBanco','Password','');
sUser := Arq.ReadString('ConexaoBanco','User','');
sProtocol := Arq.ReadString('ConexaoBanco','Protocol','');
sLocal := Arq.ReadString('ConexaoBanco','Tipo Conexão','');
if sLocal = '(LOCAL)' then
bLocal := True
else
bLocal := False;
end;
Arq.Free;
ListaAtributos.Free;
end;Depois de ler eu faço uma conexao com a rede atraves de uma procedure
{$IFDEF FULLVERSION}
{Criando a conexão com o banco}
AUXConexao:= 1;
try
case AUXConexao of
1: ConectarDataBase;
end;
except
on E: Exception do
begin
Raise Exceptio.Create('Erro!' + e.Message);
application.terminate;
exit;
end;
end;
//Se passar pelo ConectarDataBase então faço um select para verificar a chave do sistema
try
with dm.registrocliente do
begin
Close;
sql.Clear;
sql.Text := ' SELECT * FROM registro ';
Open; <= Mais esta parando aqui e da o erro da imagem acima UNAVAILABLE DATABASE.
//Ne não tiver registro então abre o form para cadastrar um novo registro
if IsEmpty then
ChamaForm(TfrmRegistroCliente, frmRegistroCliente);
end;
except
on E:Exception do
raise exception.Create(e.Message);
end;
{$ENDIF}A procedure ConectarDatabase é esta aqui
procedure TFRMPRINCIPAL.ConectarDataBase; begin with dm.connection do begin Database := dm.sDatabase; User := dm.sUser; Password := dm.sPassword; Protocol := dm.sProtocol; Connect; end; end;
O que o zConnection recebe nestas propriedades são
Database := '192.168.1.101:C:\Aldac\Motoboy\Dados\MOTOBOY.FDB'
User := 'SYSDBA'
Password := 'masterkey'
Protocol := 'firebird-2.1'
É isso que o debug mostra ai passa pelo connect e entra no select abaixo cfe mostro no codigo acima.
Na hora do open para abrir a tabela da o erro.
Debuguei com F7 para ver até aonde ia o erro, e caiu na unidade do zeos, ai são varias classes do zeos que chama outra classe e assim vai.
Reparei no bloco do zeos que ele passa diversas vezes por aquiele mesmo local trazendo valor na variavel SQL do codigo do zeos, até chegar o momento que cai a conexao do o banco e da o erro.
Minhas suspeitas recaem ao zeos em ambiente 64 bits, pois compilei no win xp sp3 e funciona, depois compilei o memso projeto no win 7 32bits e funciona também, ja no win 7 64 bits esta dando pau.
Obrigado amigo.
GOSTEI 0