Gravar e caregar arquivo ini em banco de dados firebird
24/08/2021
0
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
Post mais votado
24/08/2021
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
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?
24/08/2021
Eduardo Richeli
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
24/08/2021
Emerson Nascimento
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.
24/08/2021
Eduardo Richeli
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
24/08/2021
Paulo
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.
25/08/2021
Emerson Nascimento
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;
25/08/2021
Emerson Nascimento
27/08/2021
Eduardo Richeli
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!
Clique aqui para fazer login e interagir na Comunidade :)