DBExpress carregar parametros de conexão

Delphi

04/11/2005

Caros colegas, como faço para carregar os paramentros de conexão ao iniciar o programa.

Grato

Eleusis.


Eleusis

Eleusis

Curtidas 0

Respostas

Firekiller

Firekiller

04/11/2005

Uma forma bem simples seruia, no evento OnCreate do Datamodule, você colocar assim:

if FileExists( ´ArqConf.Cfg´ ) then
SQLConnection.Params.LoadFromFile( ´ArqConf.Cfg´ );

E no arquivo ArqConf.Cfg você colocaria assim (um pequeno exemplo usando firebird):

Database=Localhost:C:\Arq\Base.FDB
Charset=Win1252
//Outras instruções


GOSTEI 0
Eleusis

Eleusis

04/11/2005

Estou acessando o SQL Server 2000
Onde deve ficar este arquivo ?
No mesmo diretório do executável?
estou testando, mas só que da um erro:
de uma olhada no arquivo

ConnectionName=TT
DriverName=MSSQL
HostName=200.168.124.241
DataBase=CEUNSP
User_Name=sa
Password=
BlobSize=-1
ErrorResourceFile=
LocaleCode=0000
MSSQL TransIsolation=ReadCommited
OS Authentication=False
libraryName=dbexpmss.dll
vendorlib=oledb

oque está errado?

Grato Eleusis


GOSTEI 0
Firekiller

Firekiller

04/11/2005

Dados como libraryname, vendorlib não entram nesse arquivo. O arquivo deve estar na mesma pasta do executável, e a propriedade connected não pode estar true.
Qual a mensagem de erro??


GOSTEI 0
Eleusis

Eleusis

04/11/2005

a mensagem de erro é: Missing DriverName property

o q será que acontece?


GOSTEI 0
Firekiller

Firekiller

04/11/2005

É que na verdade você já deixa definido o DriverName, LibraryName, Vendor lib... no exemplo que citei, o que é pego do arquivo, são os params do SqlConnection.


GOSTEI 0
Eleusis

Eleusis

04/11/2005

Me desculpe não ter respondido ontem, pois minha internet caiu e não voltou.
Vamos lá, estou fazendo o seguinte, no computador onde desenvolvi o sistema ele carrega, mas se ponho o programa no servidor , para que todos acessem, o programa da este erro: Missing drivername...
o q pode ser.

Grato
Eleusis


GOSTEI 0
Martins

Martins

04/11/2005

Me desculpe não ter respondido ontem, pois minha internet caiu e não voltou. Vamos lá, estou fazendo o seguinte, no computador onde desenvolvi o sistema ele carrega, mas se ponho o programa no servidor , para que todos acessem, o programa da este erro: Missing drivername... o q pode ser. Grato Eleusis

[b:3b56336e47]
DriverName=MSSQL [/b:3b56336e47] este pode ser o motivo do erro, esse driver está lá no servidor tb.?


GOSTEI 0
Martins

Martins

04/11/2005

[quote:c75e5b9433=´Eleusis´]Me desculpe não ter respondido ontem, pois minha internet caiu e não voltou. Vamos lá, estou fazendo o seguinte, no computador onde desenvolvi o sistema ele carrega, mas se ponho o programa no servidor , para que todos acessem, o programa da este erro: Missing drivername... o q pode ser. Grato Eleusis

[b:c75e5b9433]
DriverName=MSSQL [/b:c75e5b9433] este pode ser o motivo do erro, esse driver está lá no servidor tb.?[/quote:c75e5b9433]

Vc tá usando DbExpress correto? Então onde está o seu arquivo [b:c75e5b9433]dbxconnections.ini[/b:c75e5b9433]? ele deverá ficar no diretório do executáel.

[b:c75e5b9433]Veja abaixo a estrutura do arquivo[/b:c75e5b9433]
[MSSQLConnection]
DriverName=MSSQL
HostName=ServerName
DataBase=Database Name
User_Name=user
Password=password
BlobSize=-1
LocaleCode=0000
MSSQL TransIsolation=ReadCommited
OS Authentication=False


Este arquivo deve ser distribuído com suas aplicações ok!

vc poderá encontrá-lo na pasta:
[b:c75e5b9433] C:\Arquivos de programas\Arquivos comuns\Borland Shared\DBExpress[/b:c75e5b9433]

Espero q isso o ajude!!

Boa Sorte!!


GOSTEI 0
Firekiller

Firekiller

04/11/2005

Colega Martins, se eu não estou enganado, você apenas deve levar o arquivo dbxconnections.ini se a propriedade loadParams tiver marcada com true. Se não tiver, não precisa.

Faço apenas dessa forma que citei ao colega, (carregando os parâmetros de um arquivo qualquer), e não tive problemas com a conexão. Mas de qualquer forma, se for usar esse arquivo, não há necessidade de se levar o arquivo que citei, pois todas as configurações estariam no arquivo ini.

Ao colega Eleusis, você se lembrou de levar as dll´s correspondentes a sua conexão?? (dbexpmss.dll , etc)


GOSTEI 0
Martins

Martins

04/11/2005

Colega Martins, se eu não estou enganado, você apenas deve levar o arquivo dbxconnections.ini se a propriedade loadParams tiver marcada com true. Se não tiver, não precisa. Faço apenas dessa forma que citei ao colega, (carregando os parâmetros de um arquivo qualquer), e não tive problemas com a conexão. Mas de qualquer forma, se for usar esse arquivo, não há necessidade de se levar o arquivo que citei, pois todas as configurações estariam no arquivo ini. Ao colega Eleusis, você se lembrou de levar as dll´s correspondentes a sua conexão?? (dbexpmss.dll , etc)


Blz colega [b:649a7272d3]Firekiller[/b:649a7272d3], mas é q o nosso colega não informou tb se o propriedade [b:649a7272d3]LoadParams[/b:649a7272d3] estava setada para true, ou se estava com padrão false, então resolvi citar o uso do arquivo [b:649a7272d3]dbxconnections.ini[/b:649a7272d3], ele agora tem duas opções, hehehe, e bem lembrado, se bem q eu tb já lembrei isso, os arquivos [b:649a7272d3]Lib[/b:649a7272d3].

Esperemos q ele resolva essa problemática.

Boa Sorte!!!


GOSTEI 0
Firekiller

Firekiller

04/11/2005

Blz... foi apenas uma observação minha, isso porque por padrão, ele vem setado como false.... foi só observação mesmo.


GOSTEI 0
Martins

Martins

04/11/2005

Blz... foi apenas uma observação minha, isso porque por padrão, ele vem setado como false.... foi só observação mesmo.

Tranquilo, não tem erro não.

Abraço!!!


GOSTEI 0
Eleusis

Eleusis

04/11/2005

Caro Martins,
Se tenho na minha query um join, ou seja , usando duas ou mais tabelas, como faço para alterar os dados da tabela principal ? Uso o join para carregar dados das chaves estrangeiras em um grid. Mais quando dou applyupdates ele dá um erro, me dizendo que não existem os campos definidos no clientdataset, no caso os campos da outra tabela.
Como resolver este problema ?

Grato
Eleusis


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

04/11/2005

desculpe a intromissão...

mas para resolver esse problema coloque o providerflags desses campos ´estrangeiros´ para [pfHidden] (somente essa flag deve ficar setada). assim os campos ficarão ´escondidos´ no momento das alterações.

eu faço isso no datasetprovider. mas vc pode tentar alterar no próprio clientdataset, desde que tenha persistido os campos.


GOSTEI 0
Eleusis

Eleusis

04/11/2005

Caro Emerson, tentei fazer isso mas dá a seguinte mensagem de erro:
Invalid column name ´Descricao´ e outros campos da chave estrangeira.
Coloquei a instrução que vc me disse, (Hidden) nos campos do ClientDataSet, mas não resolveu. Não achei uma maneira de fazer isso no datasetprovider, como fazer ?

Grato
eleusis


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

04/11/2005

vamos lá...
supondo que seja um relacionamento para nostas fiscais, os campos a terem as flags alteradas são os campos estrangeiros: aqueles que serão exibidos, mas pertencem à outra tabela que não aquela que se deseja gravar (será que eu consegui explicar direito? não sou muito didático...)

bom, respondendo a sua pergunta de como setar as flags no datasetprovider:

no evento beforeupdaterecord do datasetprovider, faça assim (ainda usando o exemplo de nota fiscal e supondo que você utiliza tabelas aninhadas):
if sourceds = sqldataset_notafiscal then
  with deltads do
  begin
    fieldbyname(´nomedocliente´).providerflags := [pfHidden];
    fieldbyname(´nomedatransportadora´).providerflags := [pfHidden];
  end
else
if sourceds = sqldataset_notafiscalitem then
  with deltads do
  begin
    fieldbyname(´nomedoproduto´).providerflags := [pfHidden];
    fieldbyname(´descricaocfop´).providerflags := [pfHidden];
    fieldbyname(´descricaounidadedemedida´).providerflags := [pfHidden];
    fieldbyname(´descricaoembalagem´).providerflags := [pfHidden];
  end;



GOSTEI 0
Martins

Martins

04/11/2005

vamos lá... supondo que seja um relacionamento para nostas fiscais, os campos a terem as flags alteradas são os campos estrangeiros: aqueles que serão exibidos, mas pertencem à outra tabela que não aquela que se deseja gravar (será que eu consegui explicar direito? não sou muito didático...) bom, respondendo a sua pergunta de como setar as flags no datasetprovider: no evento beforeupdaterecord do datasetprovider, faça assim (ainda usando o exemplo de nota fiscal e supondo que você utiliza tabelas aninhadas):
if sourceds = sqldataset_notafiscal then
  with deltads do
  begin
    fieldbyname(´nomedocliente´).providerflags := [pfHidden];
    fieldbyname(´nomedatransportadora´).providerflags := [pfHidden];
  end
else
if sourceds = sqldataset_notafiscalitem then
  with deltads do
  begin
    fieldbyname(´nomedoproduto´).providerflags := [pfHidden];
    fieldbyname(´descricaocfop´).providerflags := [pfHidden];
    fieldbyname(´descricaounidadedemedida´).providerflags := [pfHidden];
    fieldbyname(´descricaoembalagem´).providerflags := [pfHidden];
  end;


Muito interessante isso!!!


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

04/11/2005

por exemplo:
tendo a seguinte ligação:
[b:f4c1bd27b9]SQLDataset_Conta[/b:f4c1bd27b9] -> [b:f4c1bd27b9]DatasetProvider_Conta[/b:f4c1bd27b9] -> [b:f4c1bd27b9]ClientDataset_Conta[/b:f4c1bd27b9] [-> Datasource_Conta]
com a instrução SQL:
Select
  A.*,
  B.Nome
from
  conta A
inner join
  Banco B on (B.Numero = A.Banco)
where {sua condição de pesquisa}


nesse caso queremos todos os campos da tabela Conta e apenas o campo ´Nome´ da tabela Banco.

que resultaria em:
Codigo
Banco
Agencia
Conta
Contato
Nome - CAMPO estrangeiro (vem da tabela Banco)

(evite o uso de ´*´ sempre que possível. deixe explícito quais campos necessita na sua consulta. isso torna a execução mais rápida, pois o gerenciador do banco de dados não precisará ´montar´ a instrução)

dessa forma, basta colocar, no evento beforeupdaterecord do datasetprovider (desde que o provider esteja ligado somente à um dataset):
procedure procedure TForm1.DataSetProvider_ContaBeforeUpdateRecord(
  Sender: TObject; SourceDS: TDataSet; DeltaDS: TCustomClientDataSet;
  UpdateKind: TUpdateKind; var Applied: Boolean);
begin
  DeltaDs.FieldByName(´Nome´).ProviderFlags := [pfHidden];
end;



GOSTEI 0
Eleusis

Eleusis

04/11/2005

Caro Emerson, alterei os dados e não obtive êxito.
Não sei mais o que fazer.

Verifiquei que meu datasetprovider não esta alterando a instrução SQL, mesmo mudando os parâmetros do DataFields. O q pode ser ?

Grato
Eleusis
eleusisbordini@uol.com.br


GOSTEI 0
Eleusis

Eleusis

04/11/2005

Caro Emerson, ALELUIA......
VAleu por esta dica, funcionou legal esta instrução, que voce passou.
De forma estatica não estava funcionando, dinamicamente funcionou.
Valu mesmo

Ignore mensagem anterior.

Valeu.
Eleusis
eleusisbordini@uol.com.br


GOSTEI 0
POSTAR