Ir para conteúdo
Fórum Script Brasil
  • 0

Passagem De Parametros Em Tempo De Execução No Delphi 2007


fajo

Pergunta

Oi Pessoal,

nos meus projetos sempre repasso os parametros ao sqlconnection atraves de um arquivo .ini, cujo conteúdo é:

[PROJETO]

DriverName=UIB Firebird15

Database=C:\Sistemas\base.FDB

RoleName=RoleName

User_Name=SYSDBA

SQLDialect=3

BlobSize=-1

CommitRetain=False

WaitOnLocks=True

LocaleCode=

ErrorResourceFile=

Interbase TransIsolation=Read Commited

lc_ctype=WIN1252

TrimChar=False

e no evento OnCreate do DataModule:

procedure TDMPrincipal.DataModuleCreate(Sender: TObject);

var i : integer;

teste : TStringList;

begin

teste := TStringList.Create;

teste.LoadFromFile(extractfilepath(application.exename)+'base.ini');

SQLConnection1.Connected := False;

SQLConnection1.Params.Clear;

for I := 0 to teste.Count - 1 do

SQLConnection1.Params.Add(teste.Strings);

SQLConnection1.Params.Add('Password=masterkey');

Teste.Free;

SQLConnection1.LoginPrompt := False;

try

SQLConnection1.Connected := True;

except

begin

showmessage('Base de Dados Não Encontrada!');

Application.Terminate;

end;

end;

end;

no D2006 funciona perfeitamente, no entanto no D2007 ocorre um erro:

"Project Projeto1.exe raised exception class EAccessViolation with message 'Access violation at address 012E216B in module 'dbxint30.dll'.Read of Address 00000000'".

o que está acontecendo?

e outra, alguém sabe onde estão os arquivos dbxconnections.ini e dbxdrivers.ini usados pelo D2007, ou eles estão com outro nome, eu sei que o DBExpress mudou sua versão, mas...

Muito Obrigado

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

Fajo, se o código está como o postado, seu problema é similar ao que o colega Marcos-rj (link) postou esses dias.

Lá no OnDataModuleCreate você está esquecendo de uma barrinha ("\"). Está assim:

teste.LoadFromFile(extractfilepath(application.exename)+'base.ini');

e deveria ser assim:

teste.LoadFromFile(extractfilepath(application.exename)+'\base.ini');

Sugestão para este trecho do código - experimente:

teste.LoadFromFile(extractfilepath(application.exename)+'\base.ini');
SQLConnection1.Connected := False;
SQLConnection1.Params.Clear;
for I := 0 to teste.Count - 1 do
  SQLConnection1.Params.Add(teste.Strings[i]);
SQLConnection1.Params.Add('Password=masterkey');
Como Params já é um TList, não há necessidade de você alocar um objeto apenas para carregar os dados e depois mover para outro obtjeto da mesma classe - simplesmente utilize ele direto:
SQLConnection1.Connected := False;
SQLConnection1.Params.Clear;
SQLConnection1.Params.LoadFromFile(extractfilepath(application.exename)+'\base.ini');
SQLConnection1.Params.Add('Password=masterkey');

Confirme se era isto mesmo.

Abraços.

Link para o comentário
Compartilhar em outros sites

  • 0

Micheus, tá dando erro de "Missing Database Property", e quando mudo no D2006 o 1º código pelo seu dá o mesmo erro, estranho né? Partindo dessa premissa o código do D2006 deveria funcionar no D2007, mas...

Churc, na verdade não há tantas mudanças que justifique o upgrade já, pra mim há mais importante foi a atualização da DBX para a versão 4, com várias melhorias, eu é que gosto de sempre dá uma olhada no novo!

Editado por fajo
Link para o comentário
Compartilhar em outros sites

  • 0
Micheus, tá dando erro de "Missing Database Property"
fajo, você consegue depurar o código e observar o conteúdo de Params após a leitura e antes da abertura da conexção? (utilizar um break-point)

Se o erro ocorre na abertura da conexão, a mensagem sugere que o parâmetro database não está com um valor válido.

Link para o comentário
Compartilhar em outros sites

  • 0

Micheus o valor do parâmetro Database assim como os outros, são pegos do arquivo ini, e tá tudo certo, tanto é que se eu abrir o programa no

D2006, funciona perfeitamente;

Olha só o conteudo de dois arquivos gerados, um antes do repasse de parametros e outro depois:

Antes:

[TESTE]

DriverName=Interbase

DriverUnit=DBXDynalink

DriverPackageLoader=TDBXDynalinkDriverLoader

DriverPackage=DBXCommonDriver110.bpl

DriverAssemblyLoader=Borland.Data.TDBXDynalinkDriverLoader

DriverAssembly=Borland.Data.DbxCommonDriver,Version=11.0.5000.0,Culture=neutral,PublicKeyToken=a91a7c5705831a4f

Database=

RoleName=RoleName

User_Name=sysdba

Password=masterkey

ServerCharSet=

SQLDialect=3

BlobSize=-1

CommitRetain=False

WaitOnLocks=True

ErrorResourceFile=

LocaleCode=0000

Interbase TransIsolation=ReadCommited

Trim Char=False

Depois:

[TESTE]

DriverName=Interbase

DriverUnit=DBXDynalink

DriverPackageLoader=TDBXDynalinkDriverLoader

DriverPackage=DBXCommonDriver110.bpl

DriverAssemblyLoader=Borland.Data.TDBXDynalinkDriverLoader

DriverAssembly=Borland.Data.DbxCommonDriver,Version=11.0.5000.0,Culture=neutral,PublicKeyToken=a91a7c5705831a4f

Database=J:\Sistemas\Eleitor\BD\DBELEITOR.FDB

RoleName=RoleName

User_Name=sysdba

Password=masterkey

ServerCharSet=

SQLDialect=3

BlobSize=-1

CommitRetain=False

WaitOnLocks=True

ErrorResourceFile=

LocaleCode=0000

Interbase TransIsolation=ReadCommited

Trim Char=False

Password=masterkey

Link para o comentário
Compartilhar em outros sites

  • 0

Aparentemente o problema inicial referente ao path ficou resolvido e este é um novo problema, certo?!

Sobre o D2007 não tenho o que falar porque estou parado no D7.

Então fugiu um pouco do meu escopo, mas pelos sintomas, me parece algum problema com os drivers (só um palpite).

-----------

Estava olhando o post novamente e esse seu último .ini é sem dúvida bem diferente daquele do post inicial.

Inclusive, na linha DriverAssembly=Borland.Data.DbxCommonDriver,Version=11.0.5000.0,Culture=neutral, esta última vírgula não sugere que deveria ter algo além dela? É assim mesmo?

Editado por Micheus
Link para o comentário
Compartilhar em outros sites

  • 0

Resolvido Micheus,

naquel código que você deu:

conEleitor.Connected := False;

conEleitor.Params.Clear;

conEleitor.Params.LoadFromFile(extractfilepath(application.exename)+'configbd.ini');

conEleitor.Params.Add('Password=masterkey');

conEleitor.Connected := True;

falei que tava dando erro de Missing Database Property, ai mudei o LoadFromFile por LoadParamsFromIniFile e funcionou bacana:

conEleitor.Connected := False;

conEleitor.Params.Clear;

conEleitor.LoadParamsFromIniFile(extractfilepath(application.exename)+'configbd.ini');

conEleitor.Params.Add('Password=masterkey');

conEleitor.Connected := True;

Obrigado a todos

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...