DBExpress carregar parametros de conexão
Caros colegas, como faço para carregar os paramentros de conexão ao iniciar o programa.
Grato
Eleusis.
Grato
Eleusis.
Eleusis
Curtidas 0
Respostas
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
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
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
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
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??
Qual a mensagem de erro??
GOSTEI 0
Eleusis
04/11/2005
a mensagem de erro é: Missing DriverName property
o q será que acontece?
o q será que acontece?
GOSTEI 0
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
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
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
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
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
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)
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
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
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
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
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
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
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.
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
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
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
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):
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
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
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:
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):
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
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
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
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
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