Gravar e caregar arquivo ini em banco de dados firebird

24/08/2021

0

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
Eduardo Richeli

Eduardo Richeli

Responder

Post mais votado

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


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)

Paulo

Paulo
Responder

Mais Posts

24/08/2021

Emerson Nascimento


se não vai armazenar nada no HD do cliente, porque não usar uma tabela no banco para gravar os parâmetros?
Responder

24/08/2021

Eduardo Richeli

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
Responder

24/08/2021

Emerson Nascimento

"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:
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.






Responder

24/08/2021

Eduardo Richeli

"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:
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
Responder

24/08/2021

Paulo

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.


Responder

25/08/2021

Emerson Nascimento

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:
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;


Responder

25/08/2021

Emerson Nascimento

ali na leitura das pastas, onde está ReadInteger, leia-se ReadString.
Responder

27/08/2021

Eduardo Richeli

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

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar