Mudar cliente e diretorio de dados...
Ola,
Tenho uma folha de pagamento em paradox e os cliente possuem diretorios diferentes neste estilo ( c:\sistemas\sfpa\arq001 para cliente cliente 001 e c:\sistemas\sfpa\arq002 para cliente 002...e assim por diante para os outros clientes),pois bem...meu problema e o seguinte quando abro uma sessão para o cliente 001 e seto as tabelas para este cliente com o seguinte codigo :
onde vCodigo := 001;
Session.DeleteAlias(´ARQ001´);
Session.SaveConfigFile;
Session.DeleteAlias(´ARQ´+StrZero(vCodigo,3));
Session.SaveConfigFile;
e ao abrir o cliente 002 :
onde vCodigo := 002;
Session.DeleteAlias(´ARQ001´);
Session.SaveConfigFile;
Session.DeleteAlias(´ARQ´+StrZero(vCodigo,3));
Session.SaveConfigFile;
os dados que aparecem nas tabelas é do cliente anterior...ou seja ele não muda nas sessões das tabelas abertas anteriormente para o cliente 001
alguem já passou por este aberto...
valeu,
fabio cavalcanti
Tenho uma folha de pagamento em paradox e os cliente possuem diretorios diferentes neste estilo ( c:\sistemas\sfpa\arq001 para cliente cliente 001 e c:\sistemas\sfpa\arq002 para cliente 002...e assim por diante para os outros clientes),pois bem...meu problema e o seguinte quando abro uma sessão para o cliente 001 e seto as tabelas para este cliente com o seguinte codigo :
onde vCodigo := 001;
Session.DeleteAlias(´ARQ001´);
Session.SaveConfigFile;
Session.DeleteAlias(´ARQ´+StrZero(vCodigo,3));
Session.SaveConfigFile;
e ao abrir o cliente 002 :
onde vCodigo := 002;
Session.DeleteAlias(´ARQ001´);
Session.SaveConfigFile;
Session.DeleteAlias(´ARQ´+StrZero(vCodigo,3));
Session.SaveConfigFile;
os dados que aparecem nas tabelas é do cliente anterior...ou seja ele não muda nas sessões das tabelas abertas anteriormente para o cliente 001
alguem já passou por este aberto...
valeu,
fabio cavalcanti
Cavalcanti.fabio
Curtidas 0
Respostas
Cavalcanti.fabio
29/06/2006
:(
GOSTEI 0
Cavalcanti.fabio
29/06/2006
:(
GOSTEI 0
Cavalcanti.fabio
29/06/2006
:wink:
Aí galera...alguem + poderia dar uma dica...acresentando que quando mudo o cliente (arq001) ele abrea os dados...so que quando tento abrir o dados do diretorio (arq001\0106) onde o 0106 corresponde ao backup do cliente 001 que agora estão no subdiretorio de arq001 chamado 0106 que corresponde ao mes de janeiro/ano 06
Grato a todos....vamos dar uma força!
fabio cavalcanti
Aí galera...alguem + poderia dar uma dica...acresentando que quando mudo o cliente (arq001) ele abrea os dados...so que quando tento abrir o dados do diretorio (arq001\0106) onde o 0106 corresponde ao backup do cliente 001 que agora estão no subdiretorio de arq001 chamado 0106 que corresponde ao mes de janeiro/ano 06
Grato a todos....vamos dar uma força!
fabio cavalcanti
GOSTEI 0
Host
29/06/2006
O velho não lembro muito bem, mas o session ta ligado ao database, correto? Tu fecha o database , muda o Session e depois abre o database denovo?
GOSTEI 0
Cavalcanti.fabio
29/06/2006
Olá colega...olha...na primeira session eu abro o arq001 com os dados do cliente atualmente...tipo assim :
MDPrincipal.tblFuncionarios.Close;
MDPrincipal.tblFuncionarios.DatabaseName := ´ARQ´+StrZero(StrToInt(Dbcodigoemp),3);
MDPrincipal.tblFuncionarios.open;
onde dbcodigoemp := 001
e quero mudar para o diretorio de backup do mes de 0106 (ou seja o diretorio passa a ser agora arq001 mas setado para o diretorio 0106 do cliente arq001...isso faço na sessio a seguir :
vCodigo := 001;
vperiodo := ´0106´;
Session.DeleteAlias(´ARQ001´);
Session.SaveConfigFile;
Session.DeleteAlias(´ARQ´+StrZero(vCodigo,3)+´/´+vperiodo);
Session.SaveConfigFile;
ou seja agora na seleção do cliente eu tambem informo o diretorio de backup ( 0106 ) e desejo que as minhas tabelas tragam o movimento do diretorio (0106)...espero ter sido claro...alguma duvida...favor me reportar...só mais uma coisa...quando fecho o sistema e abro com o cliente indicando o diretorio de backup...o sistema me retorna o que desejo...mas esta ficando chato para o cliente toda vez que precisar consulta ou alterar ele tem que fechar e entrar no sistema novamente...
valeu,
fabio cavalcanti
MDPrincipal.tblFuncionarios.Close;
MDPrincipal.tblFuncionarios.DatabaseName := ´ARQ´+StrZero(StrToInt(Dbcodigoemp),3);
MDPrincipal.tblFuncionarios.open;
onde dbcodigoemp := 001
e quero mudar para o diretorio de backup do mes de 0106 (ou seja o diretorio passa a ser agora arq001 mas setado para o diretorio 0106 do cliente arq001...isso faço na sessio a seguir :
vCodigo := 001;
vperiodo := ´0106´;
Session.DeleteAlias(´ARQ001´);
Session.SaveConfigFile;
Session.DeleteAlias(´ARQ´+StrZero(vCodigo,3)+´/´+vperiodo);
Session.SaveConfigFile;
ou seja agora na seleção do cliente eu tambem informo o diretorio de backup ( 0106 ) e desejo que as minhas tabelas tragam o movimento do diretorio (0106)...espero ter sido claro...alguma duvida...favor me reportar...só mais uma coisa...quando fecho o sistema e abro com o cliente indicando o diretorio de backup...o sistema me retorna o que desejo...mas esta ficando chato para o cliente toda vez que precisar consulta ou alterar ele tem que fechar e entrar no sistema novamente...
valeu,
fabio cavalcanti
GOSTEI 0
Cavalcanti.fabio
29/06/2006
:cry:
GOSTEI 0
Host
29/06/2006
Olha so tu abre o database definindo o alias pelo database... depois tu modifica o a Session ... mas a session ta conectado ao database? Se não esta, tu deveria abrir e fechar o database para dar refresh .. o q tu ta querendo fazer é algo do tipo:
Alterando Idapi32.Cfg Via Programa
Check(DbiAddAlias(Nil, PChar(´ AliasName ´), Nil, PChar(´ AliasPath´), True));
Substitua AliasName pelo nome do alias que você quer criar e em AliasPath pelo path dos arquivos de dados que você quer no seu alias.
Inclua na cláusula ´USES´ as units BD e BDE.
Complemento enviado por um colaborador:
procedure TForm1.AlterarClick(Sender: TObject);
var
AParams: TStringList;
caminho:string;
begin
caminho:=´path=´ + edit1.text;
if not Session.IsAlias(´Teste´) then
begin
Check(dbiInit(nil));
Check(dbiAddAlias(Nil, PChar(´teste´), szParadox, PChar(caminho), True));
Check(DbiExit);
end;
AParams := TStringList.Create;
try
Session.GetAliasParams(´Teste´,AParams);
begin
AParams.Clear;
AParams.Add(caminho);
Session.ModifyAlias(´Teste´,AParams);
Session.SaveConfigFile;
end;
finally
AParams.Free;
end;
end;
Correto?
Alterando Idapi32.Cfg Via Programa
Check(DbiAddAlias(Nil, PChar(´ AliasName ´), Nil, PChar(´ AliasPath´), True));
Substitua AliasName pelo nome do alias que você quer criar e em AliasPath pelo path dos arquivos de dados que você quer no seu alias.
Inclua na cláusula ´USES´ as units BD e BDE.
Complemento enviado por um colaborador:
procedure TForm1.AlterarClick(Sender: TObject);
var
AParams: TStringList;
caminho:string;
begin
caminho:=´path=´ + edit1.text;
if not Session.IsAlias(´Teste´) then
begin
Check(dbiInit(nil));
Check(dbiAddAlias(Nil, PChar(´teste´), szParadox, PChar(caminho), True));
Check(DbiExit);
end;
AParams := TStringList.Create;
try
Session.GetAliasParams(´Teste´,AParams);
begin
AParams.Clear;
AParams.Add(caminho);
Session.ModifyAlias(´Teste´,AParams);
Session.SaveConfigFile;
end;
finally
AParams.Free;
end;
end;
Correto?
GOSTEI 0
Cavalcanti.fabio
29/06/2006
Olá companheiro...da forma que vc me passou esta sendo criado o alias no BDE...eis a forma que estou abrindo a minha tabela apos criar o alias :
MDPrincipal.tblMovimentosTmp.Close;
MDPrincipal.tblMovimentosTmp.DatabaseName := ´SFPA´+StrZero(StrToInt(MDPrincipal.tblEmpresTmp.FieldByName(´CODIGO_EM´).AsString),3);
MDPrincipal.tblMovimentosTmp.TableName := ´Movime.db´;
MDPrincipal.tblMovimentosTmp.open;
MDPrincipal.tblMovimentosTmp.Refresh;
será a maneira correta de atribuir o novo alias criado ou estou fazendo alguma coisa errada...pois existe um alias que o caminho e arq029/0606 e o movimento que ele esta buscando ou melhor trazendo e do movimento atual...ou seja...ele esta esquecendo o caminho do alias na PATH que e ARQ029/0606 e me traz o movimento do ARQ029 atual...coisa de louco...e como se ele estivesse maluco ou não aceitando o alias criado para este cliente...os cliente que ainda estão com o movimento atual do mes 0606 ele pega so que o cliente ARQ029 tem um diretorio de backup chamado 0606 que esta toda a movimentação de Junho/06 (0606)...vc entendeu.
grato,
fabio cavalcanti
Obs : acho que não estou sabendo setar a minha tabela para este novo alias...
MDPrincipal.tblMovimentosTmp.Close;
MDPrincipal.tblMovimentosTmp.DatabaseName := ´SFPA´+StrZero(StrToInt(MDPrincipal.tblEmpresTmp.FieldByName(´CODIGO_EM´).AsString),3);
MDPrincipal.tblMovimentosTmp.TableName := ´Movime.db´;
MDPrincipal.tblMovimentosTmp.open;
MDPrincipal.tblMovimentosTmp.Refresh;
será a maneira correta de atribuir o novo alias criado ou estou fazendo alguma coisa errada...pois existe um alias que o caminho e arq029/0606 e o movimento que ele esta buscando ou melhor trazendo e do movimento atual...ou seja...ele esta esquecendo o caminho do alias na PATH que e ARQ029/0606 e me traz o movimento do ARQ029 atual...coisa de louco...e como se ele estivesse maluco ou não aceitando o alias criado para este cliente...os cliente que ainda estão com o movimento atual do mes 0606 ele pega so que o cliente ARQ029 tem um diretorio de backup chamado 0606 que esta toda a movimentação de Junho/06 (0606)...vc entendeu.
grato,
fabio cavalcanti
Obs : acho que não estou sabendo setar a minha tabela para este novo alias...
GOSTEI 0
Cavalcanti.fabio
29/06/2006
:)
GOSTEI 0
Cavalcanti.fabio
29/06/2006
:?
GOSTEI 0
Cavalcanti.fabio
29/06/2006
olá...ainda preciso de ajuda galera...
:lol:
grato,
fabio cavalcanti
:lol:
grato,
fabio cavalcanti
GOSTEI 0
Cavalcanti.fabio
29/06/2006
caramba...ja estou ficando maluco...quando abro o cliente no periodo que desejo : 06/06 ele me traz movimento...so que quanto o periodo do cliente esta 07/06 e sem fechar o programa abro o periodo 06/06...ele continua me trazendo as informações atuais de 07/06...
vamos galera...
abraço,
fabio
vamos galera...
abraço,
fabio
GOSTEI 0
Host
29/06/2006
Parece problema de refresh......
GOSTEI 0
Cavalcanti.fabio
29/06/2006
olá host...como vc pode observar estou fazendo o refresh na tabela...como vc faria neste caso...
grato,
fabio cavalcanti
grato,
fabio cavalcanti
GOSTEI 0
Host
29/06/2006
Olha qdo usava BDE as vezes a unica foma de dar refresh era fechando e abrindo o database? O Session ta ligado ao BDE?
GOSTEI 0
Micheus
29/06/2006
[b:6b84c35535]cavalcanti.fabio[/b:6b84c35535], vou dar uma sugestão que talvez implique em algumas alterações em relação ao que modo como vc está fazendo atualmente o acesso as tabelas.
Acredito que simplifica bastante as coisas. Avalie e teste.
Como vc utiliza tabelas paradox, vou considerar que utilize a paleta BDE:
1) Vc teria que adicionar um TDatabase ao form principal, por exemplo. Ele precisará estar em um lugar que exista durante todo o tempo em que o seu programa estiver aberto;
2) Dando um duplo click no componente, defina:
a) [i:6b84c35535]Name[/i:6b84c35535] com DBClientes - vc poderá utilizar outro se quizer;
b) Em [i:6b84c35535]Driver Name[/i:6b84c35535] selecione STANDARD;
c) Clique no botão [i:6b84c35535]Defaults[/i:6b84c35535];
d) Desmarque a opção [i:6b84c35535]Login Prompt[/i:6b84c35535];
3) Agora, nas tabelas associadas ao clientes (aquelas em que altualmente altera a propriedade database name para apontar para o alias que vc cria em tempo de execução), vc seleciona, em design-time, na propriedade DatabaseName o nome do database recém criado - DBClientes (ele estará lá em meio aos aliases que existem no BDE)
4) Crie então um procedimento para o qual vc passa o diretório do cliente, e este será ´inicializado´ no database (DBClientes). Neste procedimento vc fecha o database, atribui o novo diretório e reabre o database apontando para o novo local.
5) Neste ponto basta abrir as tabelas a serem utilizadas, que automaticamente estarão apontando para o local desejado.
Como vc pode ter notado, não há necessidade de incluir, deletar, fazer qualquer operação com Aliases. Isto funciona como um Alias dinâmico. E acredito que fica bastante simples e ´transparente´.
Para vc ter uma idéia segue um pedaço do código ex que fiz. Através de 2 botões ele abre duas tabelas cliente.db diferentes em diretórios diferentes, seguindo a metodologia que coloquei acima:
Postei o exemplo neste [url=http://www.4shared.com/dir/573206/649e0251/Progamacao.html]link (DBEAlias.zip)[/url]
Espero ter ajudado.
[]s
Acredito que simplifica bastante as coisas. Avalie e teste.
Como vc utiliza tabelas paradox, vou considerar que utilize a paleta BDE:
1) Vc teria que adicionar um TDatabase ao form principal, por exemplo. Ele precisará estar em um lugar que exista durante todo o tempo em que o seu programa estiver aberto;
2) Dando um duplo click no componente, defina:
a) [i:6b84c35535]Name[/i:6b84c35535] com DBClientes - vc poderá utilizar outro se quizer;
b) Em [i:6b84c35535]Driver Name[/i:6b84c35535] selecione STANDARD;
c) Clique no botão [i:6b84c35535]Defaults[/i:6b84c35535];
d) Desmarque a opção [i:6b84c35535]Login Prompt[/i:6b84c35535];
3) Agora, nas tabelas associadas ao clientes (aquelas em que altualmente altera a propriedade database name para apontar para o alias que vc cria em tempo de execução), vc seleciona, em design-time, na propriedade DatabaseName o nome do database recém criado - DBClientes (ele estará lá em meio aos aliases que existem no BDE)
4) Crie então um procedimento para o qual vc passa o diretório do cliente, e este será ´inicializado´ no database (DBClientes). Neste procedimento vc fecha o database, atribui o novo diretório e reabre o database apontando para o novo local.
5) Neste ponto basta abrir as tabelas a serem utilizadas, que automaticamente estarão apontando para o local desejado.
Como vc pode ter notado, não há necessidade de incluir, deletar, fazer qualquer operação com Aliases. Isto funciona como um Alias dinâmico. E acredito que fica bastante simples e ´transparente´.
Para vc ter uma idéia segue um pedaço do código ex que fiz. Através de 2 botões ele abre duas tabelas cliente.db diferentes em diretórios diferentes, seguindo a metodologia que coloquei acima:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, DBGrids, DB, DBTables;
type
TForm1 = class(TForm)
DBCliente: TDatabase;
TabCliente: TTable;
DSCliente: TDataSource;
DBGrid1: TDBGrid;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
procedure OpenDataBaseCliente(ClientDir :String);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.OpenDataBaseCliente(ClientDir :String);
begin
DBCliente.Close; // Fechará todas as tabelas abertas associada a este DB
DBCliente.Params.Values[´PATH´] := ClientDir; // Altera o path para a base do cliente desejado
DBCliente.Open;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
OpenDataBaseCliente(ExtractFilePath(Application.ExeName) +´BASE\CLI001´);
// Abre tabelas
TabCliente.Open;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
OpenDataBaseCliente(ExtractFilePath(Application.ExeName) +´BASE\CLI002´);
// Abre tabelas
TabCliente.Open;
end;
end.Postei o exemplo neste [url=http://www.4shared.com/dir/573206/649e0251/Progamacao.html]link (DBEAlias.zip)[/url]
Espero ter ajudado.
[]s
GOSTEI 0
Cavalcanti.fabio
29/06/2006
olá...galera...ainda preciso de vcs...
grato,
fabio cavalcanti
grato,
fabio cavalcanti
GOSTEI 0