paulobergo Postado Março 5, 2007 Denunciar Share Postado Março 5, 2007 (editado) Oi pessoal!Eu de novo com coisas estranhas no MySQL!!!Mas vamos lá...Até então, vinha com sucesso (e empolgado) com o MySQL5+XP+Apache+IIS e o Comp. Zeos...Só que agora que passei para a parte "pesada", nas aplicações que são, em sua maioria, dll's, comecei a receber a mensagem de erro "runtime error 216 at 1001ada7" ao sair da aplicação.Detalhando... 99% das aplicações desktop que eu desenvolvo são dll's, como no exemplo simplesa seguir... ou seja, as janelas (form's) estão todas em dll's chamadas pela aplicação principal...E tudo ia bem até eu cismar de substituir os componentes de bancos de dados da BDE pelos da Zeos...A Aplicação até funciona, mas dá a mensagem de erro ao fechar... não precisa sequer abrir uma tabelado MySQL... basta estabelecer a conexão com o servidor e pronto.No exemplo a seguir, criei uma dll simples, que tão somente abre um form no desktop e estabelece aconexão com o MySQL... não faz mais nada e fecha... Após a aplicação "chamadora" fechar, aparece amensagem...Então:********** Executável - aplicação principal ********** Início. unit teste2MySQLUnit; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; Function FazLogin(): Boolean; StdCall; External 'uMySQL4.dll'; Implementation {$R *.dfm} Procedure TForm1.Button1Click(Sender: TObject); Begin FazLogin(); ShowMessage('Conectou sem falha?'); Application.Terminate; End; End. ********** Executável - aplicação principal ********** Fim. ********** Dll - arquivo principal, que define a uMySQL4.dll ***** Início Library uMySQL4; // uMySQL4.dpr uses ShareMem, Classes, SysUtils, Windows, Forms, Dialogs, uMySQL1 in 'uMySQL1.pas' {MySQLForm}; {$R *.res} Function FazLogin(): Boolean; Export; Begin Try Begin MySQLForm := TMySQLForm.Create(Application); MySQLForm.SoLogin(); End; Finally MySQLForm.Release; End; FazLogin := True; End; Exports FazLogin; Begin End. ********** Dll - arquivo principal, que define a uMySQL4.dll ***** Final ********** Dll - unit do form, que contem o componente Zeos ****** Início unit uMySQL1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ZConnection; type TMySQLForm = class(TForm) FecharButton: TButton; ZConn: TZConnection; procedure FormActivate(Sender: TObject); procedure FecharButtonClick(Sender: TObject); private { Private declarations } public { Public declarations } Function SoLogin(): Boolean; end; Var MySQLForm: TMySQLForm; sMySQLDatabase, sMySQLUser, sMySQLPass, sMySQLHostName: String; bMySQLLoginPrompt: Boolean; iMySQLPort: Integer; Implementation {$R *.dfm} Function TMySQLForm.SoLogin(): Boolean; Begin MySQLForm.ShowModal; SoLogin := True; End; Procedure TMySQLForm.FormActivate(Sender: TObject); Begin sMySQLDatabase := 'acmeltda'; sMySQLUser := 'root'; sMySQLPass := '1234r'; sMySQLHostName := 'localhost'; iMySQLPort := 3306; bMySQLLoginPrompt := False; With zConn do Begin Database := sMySQLDatabase; User := sMySQLUser; Password := sMySQLPass; HostName := sMySQLHostName; Port := iMySQLPort; LoginPrompt := bMySQLLoginPrompt; Connected := True; End;{With zConn} End; Procedure TMySQLForm.FecharButtonClick(Sender: TObject); Begin zConn.Connected := False; MySQLForm.Close; End; End. ********** Dll - unit do form, que contem o componente Zeos ****** FimE' isso aí...O que pode estar errado?Os componentes da Zeos (Table, Queries, etc...) comportam-se extremamente bem dentro dos executáveismas dentro da dll provoca esse 'bug' na sáida...Grato por qualquer ajuda!!!Abraços! Editado Março 6, 2007 por paulobergo Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Churc Postado Março 5, 2007 Denunciar Share Postado Março 5, 2007 (editado) OpaTem alguns erros por exemplo, TMySQLForm.Create(Application);Você está fazendo uma referência a Aplicação mas que na verdadena DLL ela não tem nenhum tipo de linkagem com o EXE, tem internomas não por nenhuma variável, como a que você está passando...O correto era se passar nil neste caso...também tem coisas desnecessárias ou que poderiam ser melhoradas...Vou fazer um exemplo aqui e depois posto ele aqui...abraço**************************************************************Fiz um exemplo mais ou menos baseado no seu código...DownloadSenha: scriptbrasilCompactei também a unit FastShareMem que é uma sucessorada ShareMem que você está usando, é mais rápida e otimizada e vocênão vai precisar distribuir nenhuma DLL como aquela borndlmm.dll,para usar basta colocar a unit FastShareMem na sua pasta Lib doDelphi e substituir todos os ShareMem por FastShareMemQualquer coisa poste ai...abraço Editado Março 5, 2007 por Churc Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 paulobergo Postado Março 5, 2007 Autor Denunciar Share Postado Março 5, 2007 Puxa vida... viver não é preciso... mas aprender é!!!Devo ter perto de umas trezentas dll's desse tipo... todas no mesmo padrão e a maioria delas ia receber o componente da Zeos... (isto é, irão receber!)... então, foi ótimo solucionar isso!!! Agradeço muitíssimo pela colaboração!Abraços! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 paulobergo Postado Março 6, 2007 Autor Denunciar Share Postado Março 6, 2007 Olá Churc!E'... estamos de volta!O esquema de criar as dll's do jeito que você indicou quase resolveram o problema... Infelizmente, bastou colocar um componente zTable da Zeos para a mensagem voltar! isso acontece também com os componentes Query... tudo funciona direitinho, mas na hora de fechar, eis que surge a mensagem de "runtime error..."Executando na IDE, aparece também esta mensagem "MySQLConn.exe raised too many consecutive exceptions: 'access violation...'"...E o chato é que isso só acontece com os componentes da ZeosLib... com uma TQuery ou TTable da BDE (inclusive com o conector ODBC para o MySQL), tudo certo...Ao código que você passou, eu só acrescentei isso:Try Connected := True; // Removi porque aqui não tem como eu conectar... bIsOk := True; Except bIsOk := False; End; If bIsOk then Begin zQuery := TZReadOnlyQuery.Create(Self); zQuery.Connection := zConn; zQuery.SQL.Add('select * from dbsenha'); Try zQuery.Open; bTableOk := True; Except bTableOk := False; End; If bTableOk then ShowMessage('conectou legal e abriu a query...') Else ShowMessage('conectou legal mas não abriu a query...'); {EndIf} If bTableOk then Begin zQuery.Close; ShowMessage('Tabela Fechada!'); End; {EndIf} ShowMessage('Destruir!'); zQuery.Destroy; ShowMessage('Enfim!'); End Else ShowMessage('olha os parametros porque não conectou!'); {EndIf} ShowMessage('ok até aqui?');Ah... no código acima, fiz a tentativa de resolver o problema criando o comp. query dinamicamente... mas isso tambem não resolveu...Então, pessoal, novamente, grato por qualquer ajuda!!!Abraços! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Churc Postado Março 6, 2007 Denunciar Share Postado Março 6, 2007 Opa ehehPaulobergo coloque o código fonte em algum site que hospedearquivos, porque desta maneira fica dificil ajudar...Coloque no rapidshare.com por exemplo, deixe somente o códigofonte sem .exe e sem .dllabraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 paulobergo Postado Março 7, 2007 Autor Denunciar Share Postado Março 7, 2007 Ok...misterio.zipGrato pela ajuda!!!Abraços! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Churc Postado Março 7, 2007 Denunciar Share Postado Março 7, 2007 OpaNão está fazendo download diz que não tenho acesso, acho que vocêprecisa compartilhar o arquivo!abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 paulobergo Postado Março 7, 2007 Autor Denunciar Share Postado Março 7, 2007 E'... não sei porque há bloqueio para fazer o download clicando diretamente no link...Mas acho que você consegue baixá-lo, com um ritght-click e salvar destino como...De qualquer forma, salvei outra cópia neste link: Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Churc Postado Março 7, 2007 Denunciar Share Postado Março 7, 2007 OpaEntão pra mim não deu erro, porque não tem como eu fazer a conexão aqui,o erro como você mencionou é usando o ztable e zquery, mas de qualquerforma, você declarou fastsharemem na DLL e não declarou no EXE, para issovai no menu Project, View Source e declare a FastShareMem no EXE...Isso pode ser a causa do problema mas pouco provável, se não for fica difícilte ajudar visto que não tenho um servidor de MySQL aquiLembrando que a unit FastShareMem tem que ser a primeira de todas...library bla;usesFastShareMem,...program ble;usesFastShareMem,...abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 paulobergo Postado Março 7, 2007 Autor Denunciar Share Postado Março 7, 2007 Oi...Realmente, declarar ou não a fastsharemem não faz diferença... tem mesmo alguma coisa pegando na Zeos...Já experimentei até mesmo criar os componentes dinamicamente, mas também não adianta...Agora, isso tudo só acontece nas dll's... nas aplicações normais (executáveis), não tem problema...Ainda vou experimentar colocar estes componentes em outro programa agora, que vai rodar como um serviço no xp para dar acesso às tabelas do MySQL para os usuários dos programas em Clipper... vamos ver se, como serviço, os componentes da Zeos resolvem funcionar sem problemas!Por enquanto, nas dll's, vou usando o TDatabase mesmo!De qualquer forma, agradeço muitissimo a colaboração!!!Abraços! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Churc Postado Março 7, 2007 Denunciar Share Postado Março 7, 2007 Oi...Realmente, declarar ou não a fastsharemem não faz diferença... tem mesmo alguma coisa pegando na Zeos...Já experimentei até mesmo criar os componentes dinamicamente, mas também não adianta...Agora, isso tudo só acontece nas dll's... nas aplicações normais (executáveis), não tem problema...Ainda vou experimentar colocar estes componentes em outro programa agora, que vai rodar como um serviço no xp para dar acesso às tabelas do MySQL para os usuários dos programas em Clipper... vamos ver se, como serviço, os componentes da Zeos resolvem funcionar sem problemas!Por enquanto, nas dll's, vou usando o TDatabase mesmo!De qualquer forma, agradeço muitissimo a colaboração!!!Abraços!OpaEntão, por enquanto não está fazendo diferença porque você não esta passandodados entre a DLL e o EXE, mas quando começar a passar vai fazer diferença sim!Agora, vou instalar o MySQL Server aqui e testar, ai eu te posto o que houve...abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest --Magno -- Postado Fevereiro 26, 2008 Denunciar Share Postado Fevereiro 26, 2008 Opa. Eu estava com o mesmo problema, meu delphi é o 2005 + mysql5 + zeos. Só de conectar o Zconnection1 e sair do aplicativo já dava o erro.Resolvi simplesmente renomeando a libmysql5.dll(que vei junto com o componente zeos) para lybmysql.dll e copiando ela para a pasta windows\system32. Falou. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kconsys Postado Abril 28, 2011 Denunciar Share Postado Abril 28, 2011 Paulo voce deu conta de resolver isto????estou com o mesmo problema. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Abril 29, 2011 Denunciar Share Postado Abril 29, 2011 qual é o protocolo de conexão que voce esta usando ? Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
paulobergo
Oi pessoal!
Eu de novo com coisas estranhas no MySQL!!!
Mas vamos lá...
Até então, vinha com sucesso (e empolgado) com o MySQL5+XP+Apache+IIS e o Comp. Zeos...
Só que agora que passei para a parte "pesada", nas aplicações que são, em sua maioria, dll's,
comecei a receber a mensagem de erro "runtime error 216 at 1001ada7" ao sair da aplicação.
Detalhando... 99% das aplicações desktop que eu desenvolvo são dll's, como no exemplo simples
a seguir... ou seja, as janelas (form's) estão todas em dll's chamadas pela aplicação principal...
E tudo ia bem até eu cismar de substituir os componentes de bancos de dados da BDE pelos da Zeos...
A Aplicação até funciona, mas dá a mensagem de erro ao fechar... não precisa sequer abrir uma tabela
do MySQL... basta estabelecer a conexão com o servidor e pronto.
No exemplo a seguir, criei uma dll simples, que tão somente abre um form no desktop e estabelece a
conexão com o MySQL... não faz mais nada e fecha... Após a aplicação "chamadora" fechar, aparece a
mensagem...
Então:
E' isso aí...
O que pode estar errado?
Os componentes da Zeos (Table, Queries, etc...) comportam-se extremamente bem dentro dos executáveis
mas dentro da dll provoca esse 'bug' na sáida...
Grato por qualquer ajuda!!!
Abraços!
Editado por paulobergoLink para o comentário
Compartilhar em outros sites
13 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.