Re: [firebase-br] De forma Estranha - Mas Resolvida a Questão do Firebird Embarcado - DBExpress

Felipe Giotto felipe em metasoftware.com.br
Seg Out 24 11:29:19 -03 2005


Olá, pessoal da lista!!

Estou passando por um erro muito estranho com Delphi 7 + dbExpress...

Nós distribuíamos, juntamente com o nosso aplicativo, as DLLs 
DBEXPINT.DLL, GDS32.DLL E MIDAS.DLL.... Porém, há alguns dias, em um dos 
posts do companheiro User-BA, ele disse que havia declarados as units 
"MidasLib" e "DbExpInt" e, dessa forma, não mais precisou distribuir as 
DLLs.. Porém, quando utilizo essas units, ao invés das DLLs, estou 
recebendo um erro na hora de executar um stored procedure, sendo que 
tanto no IBOConsole quanto quando eu utilizava as DLLs, tudo funcionava 
normalmente! O erro é: "Token unknown - line 1, char 20 - ?'. Alguém 
sabe o que pode estar acontecendo? A Stored Procedure que eu uso não faz 
nada de mais, somente roda dois UPDATEs no banco, além de que ela está 
funcionando normalmente com qualquer outro driver.

Desde já agradeço,

Felipe Giotto ;-)



User-BA wrote:

>
> Não fiz maiores mudanças no meu simples programinha de teste.
> Mas o problema foi resolvido 100%.
> Inseri na uses, as units "MidasLib e Dbexpint", dispensando assim a 
> necessidade de distribuir as DLLs "dbexpint.dll" e "midas.dll" na raiz 
> (ondo fica o .exe)
>
> * LoadParamsOnConnect -> deixei como estava padrão (false), não era a 
> causa do problema.
> * TM -> (nome da minha conexão) foi mantida (não era também a causa do 
> problema).
>
> No final, ficou gravado no cd apenas :)
>
> A pasta -> intl
> O BD -> tm.fdb,
> O Executável -> tm.exe
> O Servidor Embeded -> gds32.dll
>
> Sinistro hein :)
>
> Todo o restante foi descartado, embora a maioria das literaturas que 
> recorri, orientam o contrário.
>
> - Caso utilize UDFs (deve-se incluir a pasta -> UDF (e as UDFs :))
> - O 2000 e o XP, por padrão instalam as DLLs "msvcp60.dll e 
> msvcrt.dll", então, só precisa incluir como precaução extra :)
> - ib_util.dll, firebird.conf, aliases.conf (também foram descartado do 
> meu exemplo :))
>
> * Só um detalhe...
> * Utilizei o SQLDialect 3, mas não consegui fazer o ServerCharSet 
> WIN1252 (deixei como NONE).
> * Testei incluindo todos arquivos e pastas omitidos, mas não consegui 
> compilar com o ServerCharSet (WIN1252).
>
> Embora meu pequeno exemplo esteja funcional em 2000 e XP (no HD e 
> CDROM), se puderem acrescentar algo a respeito da utilidade dos 
> arquivos que eu descartei, ficarei grato, pois gostaria de ter um 
> domínio maior sobre este processo, já que o meu próximo passo é 
> construir o meu primeiro catálogo eletrônico (textos, fotos (talvez 
> som)) utilizando o Firebird Embeded. E não gostarie de ver meu 
> aplicativo dando pau em algum sistema por aí :).
>
> * Delphi 7 + DBExpress + Firebird
>
> Valeu gente
> Abraços.
> User-BA.
>
> Felipe Giotto escreveu:
>
>> Olá!!
>>
>> Provavelmente seu problema está na propriedade ConnectionName, do 
>> SQLConnection. Ela é utilizada quando vc define uma conexão global no 
>> micro, como um Alias do BDE. Alterando seus parâmetros, todos os 
>> aplicativos que utilizam aquela conexão passam a apontar para o outro 
>> local. No seu caso, você não está criando a conexão "TM", caso ela 
>> não exista, correto? Se vc não criá-la e o aplicativo tentar ler os 
>> parâmetros em um micro onde ela não esteja criada, seu aplicativo 
>> será fechado!! Se você tiver com a propriedade LoadParamsOnConnect, a 
>> SQLConnection vai procurar a conexão "TM" para conectar com o banco. 
>> Tente utilizar a conexão padrão (acho que é "IBConnection", ao invés 
>> de TM. Confira também se as DLLs necessárias para o dbExpress também 
>> estão acessíveis ao aplicativo (tente copiar para a mesma pasta do 
>> programa para ver o que acontece). São elas: "dbexpint.dll", 
>> "gds32.dll", "fbclient.dll" e, conforme o caso, "midas.dll".
>>
>> Espero ter ajudado,
>>
>> Felipe Giotto ;-)
>>
>>
>>
>> User-BA wrote:
>>
>>>
>>> Oi gente!
>>>
>>> Preciso de uma força para entender o funcionamento de um aplicativo 
>>> embarcado.
>>> São 23:19 e posso garantir que fui dormir nesta madrugada as 04:XX :)
>>> Tentando entender o processo.
>>> Estou com um livro do Eric Harmon, Cantu e Matérias da Net.
>>>
>>> Sou leigo...
>>> Comecei a mexer com banco de dados a pouco tempo.
>>> tô precisando de ajuda nisto...
>>> e vou precisar de mais dicas em outras coisa :)
>>>
>>> Não sei se este é um procedimento correto ou ético sei lá.
>>> Me inscrevi ontem em outros foruns...
>>> Estou tentando esclarecer esta dúvida neste forum "firebase"...
>>> Vou esperar respostas...
>>> A depender vou colar este mesmo texto nos outros.
>>> Achei melhor fazer assim do que postar logo em todos :)
>>>
>>> Toda dica a respeito,
>>> inclusive sobre minha atitude
>>> em relação aos cadastros nos foruns serão bem-vidas.
>>>
>>> * Desculpem a carta :)
>>>
>>> Meu aplicativo embarcado é para titulo de aprendizado.
>>> Utilizei o IBExpert para criar e registrar um banco de dados 
>>> Firebird = Local
>>> Tabela de caracteres = None
>>> Dialecto = 3
>>> Criei 2 tabelas (com campos char, varchar, blob (text), date);
>>>
>>> No delphi utilizado o BDexpress com o quarteto
>>> (Sqlconnection + SqlDataSet + SQLProvider + ClientDataSet)
>>> Botei meu aplicativo para funcionar
>>> (novo, altera, cancela, exclui, grava, pesquisa :))
>>>
>>> Vejam minha string de conexão
>>>
>>> ConnectionName := 'TM';
>>> DriverName := 'Interbase';
>>> GetDriverFunc := 'getSQLDriverINTERBASE';
>>> LibraryName := 'dbexpint.dll';
>>> LoginPrompt := False;
>>> Params.Clear;
>>> Params.Add('DriverName=Interbase');
>>> Params.Add('Database=TM.FDB');
>>> Params.Add('RoleName=RoleName');
>>> Params.Add('User_Name=sysdba');
>>> Params.Add('Password=masterkey');
>>> Params.Add('ServerCharSet=NONE');
>>> Params.Add('SQLDialect=3');
>>> Params.Add('BlobSize=-1');
>>> Params.Add('CommitRetain=False');
>>> Params.Add('WaitOnLocks=True');
>>> Params.Add('ErrorResourceFile=');
>>> Params.Add('LocaleCode=0000');
>>> Params.Add('Interbase TransIsolation=ReadCommited');
>>> Params.Add('Trim Char=False');
>>> VendorLib := 'gds32.dll';
>>>
>>>
>>> Seguindo as intruções de sites da net e de algumas literaturas
>>> dispus os arquivos e pastas (teoricamente) necessários
>>> para o funcionamento de meu aplicativo embarcado.
>>>
>>> Pasta -> intl
>>> Pasta -> UDF (aparentemente não tem necessidade pois não utilizo udfs)
>>> aliases.conf (aparente não necessidade)
>>> firebird.conf (tá como o original (tudo identado(então imagino que 
>>> deva fucionar com valores padrões)))
>>> TM.exe (meu exe :))
>>> TM.FDB (meu banco :))
>>> dbexpint.dll (essa parece que tem que ter mesmo por causa do 
>>> dbexpress :))
>>> gds32.dll (a dll do servidor embarcado = 1.489 kb)
>>> ib_util.dll (não sei para que server esta)
>>> midas.dll (num livro li que teria que disponibilizar esta)
>>> msvcp60.dll (inclui está para o caso do windows do usuário não ter)
>>> msvcrt.dll (não sei para que serve)
>>>
>>> Agora vejam...
>>>
>>> Na minha maquina de desenvolvimento (XP com SP2)
>>> (desligo o servidor normal do firebird)
>>> executo o aplicativo e funciona normal
>>>
>>> Em outro máquina (com XP + SP2)
>>> diz que o programa tem que ser fechado
>>> (Não dá maiores detalhes, mas num botão prá gerar relatorios para 
>>> microsoft
>>> vejo algumas informação do erro ligado ao kernel)
>>>
>>> Na mesma máquina em outra partição tenho um windows 2000
>>> (só tem mesmo o sistema, sem nada instalado ligado a programação)
>>> o aplicativo funciona normal :)
>>>
>>> Agora... vejam só esta joça.
>>>
>>> Eu gravo o aplicativo em cdrom...
>>> Na minha maquina funciona normal apartir do cdrom ou numa pasta no hd
>>> No windows 2000 na outra máquina também funciona normal no cdrom ou 
>>> numa pasta no hd
>>> No windows XP que dava pau :) funciona normal no cdrom
>>> Mas se eu copiar do cdrom para uma pasta no disco deste windows XP
>>> ele funciona normal, desde que eu deixe o cd com o aplicativo no 
>>> drive :)
>>> Pois se eu tirar o cd ele fica informando que não achou o cd no drive
>>> e se eu cancelar, recebo a tal mensagem que o aplicativo será 
>>> fechado :(
>>>
>>> Qause finalizando :)
>>> fiz mais alguns testes.
>>> Passei o banco para somente leitura utilizando o IBExpert...
>>> Configurei no delphi os componentes para ReadOnly
>>> Tirei algumas dos arquivos para distribuir...
>>> Ficou assim a estrutura:
>>>
>>> Pasta -> intl
>>> TM.exe
>>> TM.FDB
>>> dbexpint.dll
>>> gds32.dll
>>> ib_util.dll
>>> midas.dll
>>> msvcp60.dll
>>>
>>> Repeti o processo nas minhas duas máquina e sistemas
>>> tudo funciona da mesma forma
>>> no meu xp de produção (funciona no cdrom e no hd)
>>> na outra maquina no windows 2000 (funciona no cdrom e no hd)
>>> na outra maquina no windows xp (funciona somente no cdrom)
>>>
>>> Uaiiii...
>>> Gente...
>>> O que tá acontecendo? Onde estou errando?
>>> O que eu tenho que fazer para um aplicativo embarcado
>>> funcionar corretamente apartir do cdrom
>>> ou apartir do hd em qualquer sistema?
>>>
>>> * Espero um dia poder esta respondendo mais do que perguntando.
>>>
>>> Abraços a todos.
>>> User-BA
>>>
>>>               
>>> _______________________________________________________ Promoção 
>>> Yahoo! Acesso Grátis: a cada hora navegada você acumula cupons e 
>>> concorre a mais de 500 prêmios! Participe! http://yahoo.fbiz.com.br/
>>>
>>>
>>> ______________________________________________
>>> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
>>> Para editar sua configuração na lista, use o endereço 
>>> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
>>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>>
>>>
>>
>
>
>     
>
>     
>        
> _______________________________________________________ Promoção 
> Yahoo! Acesso Grátis: a cada hora navegada você acumula cupons e 
> concorre a mais de 500 prêmios! Participe! http://yahoo.fbiz.com.br/
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
> Para editar sua configuração na lista, use o endereço 
> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>





Mais detalhes sobre a lista de discussão lista