Array
(
)

DBExpress carregar parametros de conexão

Eleusis
   - 04 nov 2005

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

Grato

Eleusis.


Firekiller
   - 04 nov 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


Eleusis
   - 04 nov 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


Firekiller
   - 04 nov 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??


Eleusis
   - 04 nov 2005

a mensagem de erro é: Missing DriverName property

o q será que acontece?


Firekiller
   - 04 nov 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.


Eleusis
   - 05 nov 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


Martins
   - 05 nov 2005


Citação:
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


DriverName=MSSQL este pode ser o motivo do erro, esse driver está lá no servidor tb.?


Martins
   - 05 nov 2005


Citação:

Citação:
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


DriverName=MSSQL este pode ser o motivo do erro, esse driver está lá no servidor tb.?


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

Veja abaixo a estrutura do arquivo
#Código


[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:
C:\Arquivos de programas\Arquivos comuns\Borland Shared\DBExpress

Espero q isso o ajude!!

Boa Sorte!!


Firekiller
   - 05 nov 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)


Martins
   - 05 nov 2005


Citação:
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 Firekiller, mas é q o nosso colega não informou tb se o propriedade LoadParams estava setada para true, ou se estava com padrão false, então resolvi citar o uso do arquivo dbxconnections.ini, ele agora tem duas opções, hehehe, e bem lembrado, se bem q eu tb já lembrei isso, os arquivos Lib.

Esperemos q ele resolva essa problemática.

Boa Sorte!!!


Firekiller
   - 05 nov 2005

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


Martins
   - 07 nov 2005


Citação:
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!!!


Eleusis
   - 11 nov 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


Emerson
   - 11 nov 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.


Eleusis
   - 11 nov 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


Emerson
   - 11 nov 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):
#Código

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;



Martins
   - 11 nov 2005


Citação:
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):
#Código

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!!!


Emerson
   - 11 nov 2005

por exemplo:
tendo a seguinte ligação:
SQLDataset_Conta -> DatasetProvider_Conta -> ClientDataset_Conta [-> Datasource_Conta]
com a instrução SQL:
#Código

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):
#Código
procedure procedure TForm1.DataSetProvider_ContaBeforeUpdateRecord(
Sender: TObject; SourceDS: TDataSet; DeltaDS: TCustomClientDataSet;
UpdateKind: TUpdateKind; var Applied: Boolean);
begin
DeltaDs.FieldByName(´Nome´).ProviderFlags := [pfHidden];
end;



Eleusis
   - 12 nov 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


Eleusis
   - 12 nov 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