Gravar e caregar arquivo ini em banco de dados firebird
Bom dia Srs
Alguém tem uma rotina para gravar e recuperar um arquivo diretamente do banco de dados, quero passar e recuperar esses parâmetros em controles sem necessidade de armazenar no hd do cliente.
Agradeço
Alguém tem uma rotina para gravar e recuperar um arquivo diretamente do banco de dados, quero passar e recuperar esses parâmetros em controles sem necessidade de armazenar no hd do cliente.
Agradeço
Eduardo Richeli
Curtidas 0
Melhor post
Paulo
24/08/2021
Bom dia Srs
Alguém tem uma rotina para gravar e recuperar um arquivo diretamente do banco de dados, quero passar e recuperar esses parâmetros em controles sem necessidade de armazenar no hd do cliente.
Agradeço
Alguém tem uma rotina para gravar e recuperar um arquivo diretamente do banco de dados, quero passar e recuperar esses parâmetros em controles sem necessidade de armazenar no hd do cliente.
Agradeço
A intenção de um arquivo INI é justamente para acessar parâmetros que não precisam ser armazenados dentro do BD. Como ip do servidor, porta, diretório e etc.
Caso você queira armazenar outros parâmetros dentro do BD você pode criar uma tabela própria sendo o nome das colunas o nome dos parâmetros do ini.
Se você quiser armazenar o "arquivo ini" dentro do banco, poderia pegar o conteúdo que é só texto e armazenar dentro do BD em um campo blob.
Em ambos os casos a leitura, atualização e inserção é feita através dos comandos de SQL. (select, update, insert into)
GOSTEI 1
Mais Respostas
Emerson Nascimento
24/08/2021
se não vai armazenar nada no HD do cliente, porque não usar uma tabela no banco para gravar os parâmetros?
GOSTEI 1
Eduardo Richeli
24/08/2021
Obrigado amigos
O que ocorre e que em todo sistema tenho parametros ini, criar tabelas com colunas nao seria uma boa, por este motivo gostaria de gravar ele todo dentro de um blob.
Estou tentando via
var
Arquivo: TMemIniFile;
lstDados: TStringList;
begin
Arquivo := TMemIniFile.Create(''TESTE'');
Arquivo.WriteInteger(''IMPRESSÃO'', ''IMP1'', 0);
lstDados:= TStringList.Create;
Arquivo.SetStrings(lstDados);
e passar o lstDados para o banco de dados via blob, mas o lstDados fica em branco
O que ocorre e que em todo sistema tenho parametros ini, criar tabelas com colunas nao seria uma boa, por este motivo gostaria de gravar ele todo dentro de um blob.
Estou tentando via
var
Arquivo: TMemIniFile;
lstDados: TStringList;
begin
Arquivo := TMemIniFile.Create(''TESTE'');
Arquivo.WriteInteger(''IMPRESSÃO'', ''IMP1'', 0);
lstDados:= TStringList.Create;
Arquivo.SetStrings(lstDados);
e passar o lstDados para o banco de dados via blob, mas o lstDados fica em branco
GOSTEI 0
Emerson Nascimento
24/08/2021
"quero passar e recuperar esses parâmetros em controles sem necessidade de armazenar no hd do cliente."
então qual a finalidade do ini? ainda não entendi.
você não pode ler o ini ao iniciar teu sistema e guardar o conteúdo num record? ou mesmo numa stringlist (que funciona como o ini em si). daí basta consultar o record (ou stringlist) quando precisar do conteúdo do ini.
mas eu ainda optaria por criar a tabela. poderia ser bem simples, com quatro campos, para simular o ini:
secao, chave, tipo, valor
daí você gravaria os mesmos dados que têm no ini:
Eu faço desta forma pra configurar os formatos de data, moeda, configurações gerais do sistema, como impressora padrão, pasta padrão para arquivos temporários, pasta de relatórios, caminhos de programas auxiliares, etc. Além de como o sistema irá operar em certas situações, como em cálculos de impostos, etc.
então qual a finalidade do ini? ainda não entendi.
você não pode ler o ini ao iniciar teu sistema e guardar o conteúdo num record? ou mesmo numa stringlist (que funciona como o ini em si). daí basta consultar o record (ou stringlist) quando precisar do conteúdo do ini.
mas eu ainda optaria por criar a tabela. poderia ser bem simples, com quatro campos, para simular o ini:
secao, chave, tipo, valor
daí você gravaria os mesmos dados que têm no ini:
secao chave tipo valor IMPRESSÃO IMP1 I 0
Eu faço desta forma pra configurar os formatos de data, moeda, configurações gerais do sistema, como impressora padrão, pasta padrão para arquivos temporários, pasta de relatórios, caminhos de programas auxiliares, etc. Além de como o sistema irá operar em certas situações, como em cálculos de impostos, etc.
GOSTEI 1
Eduardo Richeli
24/08/2021
"quero passar e recuperar esses parâmetros em controles sem necessidade de armazenar no hd do cliente."
então qual a finalidade do ini? ainda não entendi.
você não pode ler o ini ao iniciar teu sistema e guardar o conteúdo num record? ou mesmo numa stringlist (que funciona como o ini em si). daí basta consultar o record (ou stringlist) quando precisar do conteúdo do ini.
mas eu ainda optaria por criar a tabela. poderia ser bem simples, com quatro campos, para simular o ini:
secao, chave, tipo, valor
daí você gravaria os mesmos dados que têm no ini:
Eu faço desta forma pra configurar os formatos de data, moeda, configurações gerais do sistema, como impressora padrão, pasta padrão para arquivos temporários, pasta de relatórios, caminhos de programas auxiliares, etc. Além de como o sistema irá operar em certas situações, como em cálculos de impostos, etc.
então qual a finalidade do ini? ainda não entendi.
você não pode ler o ini ao iniciar teu sistema e guardar o conteúdo num record? ou mesmo numa stringlist (que funciona como o ini em si). daí basta consultar o record (ou stringlist) quando precisar do conteúdo do ini.
mas eu ainda optaria por criar a tabela. poderia ser bem simples, com quatro campos, para simular o ini:
secao, chave, tipo, valor
daí você gravaria os mesmos dados que têm no ini:
secao chave tipo valor IMPRESSÃO IMP1 I 0
Eu faço desta forma pra configurar os formatos de data, moeda, configurações gerais do sistema, como impressora padrão, pasta padrão para arquivos temporários, pasta de relatórios, caminhos de programas auxiliares, etc. Além de como o sistema irá operar em certas situações, como em cálculos de impostos, etc.
Emerson,
obrigado, na verdade até fiz uma tabela com essas configurações, porém tenho telas que tem muitas consultas a esse arquivo ini, então para não ter uma query para cada "chave", pensei por este motivo em carregar o arquivo assim o banco não ficaria sendo consultado
outra opção seria carregar toda a tabela e pesquisar conforme for a demanda, porem no arquivo ini tem string, integer entre outros
lstDados:= TStringList.Create; Arquivo.SetStrings(lstDados);
eu carrego um string list em um TMemIniFile mas nao pq ele fica em branco, assim não consigo gravar no banco
GOSTEI 0
Paulo
24/08/2021
Eu não consegui entender. Se o problema de criar uma tabela com os parâmetros é consultar múltiplas vezes o banco de dados, armazenar o INI direto no banco não vai dar na mesma?
Se o problema for múltiplas consultas pode resolver capturando todos os parâmetros necessários na abertura do sistema e armazene as informações dentro de variáveis e consulte elas quando for necessário.
No teu código a "lstDados" dados fica em branco pois você cria ela e não envia nenhuma informação para ela armazenar. Não sei te dizer como você vai converter TMemIniFile para TStringList.
Outra coisa, dê exemplos de que tipo de dados você armazena nesse "ini" para entendermos melhor. Até agora eu não consegui qual é sua intenção.
Vale lembrar que faz parte das "boas praticas" parâmetros que não forem armazenados no ini armazenar diretamente no BD em tabelas especificas ainda mais se for de uso comum no sistema. E suas leituras são sempre feitas uma única vez no carregamento do sistema.
Se o problema for múltiplas consultas pode resolver capturando todos os parâmetros necessários na abertura do sistema e armazene as informações dentro de variáveis e consulte elas quando for necessário.
No teu código a "lstDados" dados fica em branco pois você cria ela e não envia nenhuma informação para ela armazenar. Não sei te dizer como você vai converter TMemIniFile para TStringList.
Outra coisa, dê exemplos de que tipo de dados você armazena nesse "ini" para entendermos melhor. Até agora eu não consegui qual é sua intenção.
Vale lembrar que faz parte das "boas praticas" parâmetros que não forem armazenados no ini armazenar diretamente no BD em tabelas especificas ainda mais se for de uso comum no sistema. E suas leituras são sempre feitas uma única vez no carregamento do sistema.
GOSTEI 0
Emerson Nascimento
24/08/2021
vamos lá... crie um record e popule-o com os dados do ini. normalmente esse tipo de "variável" é instanciada no DataModule, que geralmente é acessado por todas as telas do sistema.
se não for o caso, crie a instância no formulário que seja visível à toda a aplicação, ou crie-a de forma pública, assim toda a aplicação terá acesso.
o record deve ser algo assim:
daí cria a instância:
e popula com o conteúdo do ini, ao iniciar a aplicação:
assim, em qualquer ponto do sistema, ao precisa do conteúdo basta fazer algo como:
se não for o caso, crie a instância no formulário que seja visível à toda a aplicação, ou crie-a de forma pública, assim toda a aplicação terá acesso.
o record deve ser algo assim:
TParamSistema = record Impressora: integer; PastaTemporaria: string; PastaImagens: string; [demais propriedades que precise] )
daí cria a instância:
recParamSistema: TParamSistema;
e popula com o conteúdo do ini, ao iniciar a aplicação:
ArqIni := TIniFile.Create('arquivo.ini'); recParamSistema.Impressora := ArqIni.ReadInteger('IMPRESSÃO', 'IMP1', 0); recParamSistema.PastaTemporaria := ArqIni.ReadInteger('PASTAS', 'ArquivosTemporarios', 'c:\\temp'); recParamSistema.PastaImagens := ArqIni.ReadInteger('PASTAS', 'Imagens', 'c:\\temp\\images'); FreeAndNil(ArqIni);
assim, em qualquer ponto do sistema, ao precisa do conteúdo basta fazer algo como:
varImpressora := recParamSistema.Impressora; varDirTemp := recParamSistema.PastaTemporaria;
GOSTEI 1
Emerson Nascimento
24/08/2021
ali na leitura das pastas, onde está ReadInteger, leia-se ReadString.
GOSTEI 1
Eduardo Richeli
24/08/2021
vamos lá... crie um record e popule-o com os dados do ini. normalmente esse tipo de "variável" é instanciada no DataModule, que geralmente é acessado por todas as telas do sistema.
se não for o caso, crie a instância no formulário que seja visível à toda a aplicação, ou crie-a de forma pública, assim toda a aplicação terá acesso.
o record deve ser algo assim:
daí cria a instância:
e popula com o conteúdo do ini, ao iniciar a aplicação:
assim, em qualquer ponto do sistema, ao precisa do conteúdo basta fazer algo como:
se não for o caso, crie a instância no formulário que seja visível à toda a aplicação, ou crie-a de forma pública, assim toda a aplicação terá acesso.
o record deve ser algo assim:
TParamSistema = record Impressora: integer; PastaTemporaria: string; PastaImagens: string; [demais propriedades que precise] )
daí cria a instância:
recParamSistema: TParamSistema;
e popula com o conteúdo do ini, ao iniciar a aplicação:
ArqIni := TIniFile.Create(''arquivo.ini''); recParamSistema.Impressora := ArqIni.ReadInteger(''IMPRESSÃO'', ''IMP1'', 0); recParamSistema.PastaTemporaria := ArqIni.ReadInteger(''PASTAS'', ''ArquivosTemporarios'', ''c:\\\\\\\\temp''); recParamSistema.PastaImagens := ArqIni.ReadInteger(''PASTAS'', ''Imagens'', ''c:\\\\\\\\temp\\\\\\\\images''); FreeAndNil(ArqIni);
assim, em qualquer ponto do sistema, ao precisa do conteúdo basta fazer algo como:
varImpressora := recParamSistema.Impressora; varDirTemp := recParamSistema.PastaTemporaria;
Compreendi, obrigado amigo!
GOSTEI 0