Arquivo .INI

Delphi

08/09/2008

Olá a todos
bem,vamos a minha duvida
tenho uma aplicação em delphi 7 usando interbase com o ibexpert,
gostaria de saber como eu faço para abrir minha aplicação em outro computador sem ter que ficar mudando o caminho do banco toda hora
ouvi falar que eu preciso criar um arquivo .ini,que criaria tabelas em branco,ou algo assim para que eu não necessitace mudar o caminho e tal...
alguém sabe como faço isso
(não quero abrir o arquivo .ini em nenhum botão,quero que abra quando eu abrir o projeto,em qualquer máquina)

agradeço desdejá a ajuda :wink:


--lh-pim--

--lh-pim--

Curtidas 0

Respostas

Orc

Orc

08/09/2008

vai um exemplo ai , crie um arquivo ini com 2 variaveis servidor e caminho do banco deixe padrão a senha do banco e tudo bem é so sempre uqe entrar na aplicação ler o arquivo ini ai ele ja conecta automaticamente com obanco de dados

Inclua a unit IniFiles na clausula uses do seu form.

Procedure TForm1.GravaIni( Numero : Longint ; Texto : String ; Condicao : Boolean);
var
ArqIni : TIniFile;
begin
ArqIni := TIniFile.Create(´c:\windows\temp\Teste.Ini´);
Try
ArqIni.WriteInteger(´Dados´, ´Numero´, Numero);
ArqIni.WriteString(´Dados´, ´Texto´, Texto);
ArqIni.WriteBool(´Dados´, ´Condição´, Condicao);
Finally
ArqIni.Free;
end;
end;
 
Procedure TForm1.LeIni( Var Numero : Longint ; Var Texto : String ; Var Condicao : Boolean);
var
ArqIni : tIniFile;
begin
ArqIni := tIniFile.Create(´c:\windows\temp\Teste.Ini´);
Try
Numero := ArqIni.ReadInteger(´Dados´, ´Numero´, Numero );
Texto := ArqIni.ReadString(´Dados´, ´Texto´, Texto );
Condicao := ArqIni.ReadBool(´Dados´, ´Condição´, Condicao );
Finally
ArqIni.Free;
end;
end;
 
Utilize as procedures assim:

 
procedure TForm1.Button1Click(Sender: TObject);
begin
GravaIni(1234,´TESTE´,True);
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var
N: Integer;
T: String;
C: Boolean;
begin
LeIni(N,T,C);
Showmessage(IntToStr(N)+´ ´+T);
end; 



GOSTEI 0
Fabiano Góes

Fabiano Góes

08/09/2008

qual a camada de acesso que você está usando???
se for DBExpress você pode criar um arquivo ini como esse:
[Connect]
DriverName=Interbase
Database=192.168.1.100:C:\Data\Seubanco.gdb
RoleName=RoleName
User_Name=sysdba
Password=masterkey
ServerCharSet=
SQLDialect=3
BlobSize=-1
CommitRetain=False
WaitOnLocks=True
ErrorResourceFile=
LocaleCode=0000
Interbase TransIsolation=ReadCommited
Trim Char=False


coloque o arquivo ini no diretório do sistema, ai no OnCreate do seu programa você faz a carga do arquivo ini:
procedure TForm1.FormCreate(Sender: TObject);
begin
   SQLConnection1.Close;
   SQLConnection1.LoadParamsFromIniFile(ExtractFilePath(Application.ExeName) + ´Connect.ini´);
   SQLConnection1.Open;
end;


agora, se não estiver usando DBExpress e estiver usando por exemplo IBX, você cria um ini mais simple tipo:
[connect]
Server=192.168.1.102
Database=C:\Arquivos de programas\Arquivos comuns\Borland Shared\Data\EMPLOYEE.GDB


no OnCreate você faz a carga:
procedure TForm1.FormCreate(Sender: TObject);
var INI: TIniFile;
begin
   INI := TIniFile.Create(ExtractFilePath(Application.ExeName)+´Connect.ini´);
   try
      IBDatabase1.Close;
      IBDatabase1.DatabaseName := INI.ReadString(´Connect´, ´Server´, ´´) + ´:´ +
                                  INI.ReadString(´Connect´, ´Database´, ´´);
      IBDatabase1.Open;
   finally
      INI.free;
   end;
end;


assim você não vai precisar ficar mudando o banco de lugar, ou ter que reconpilar o programa, basta editar o arquivo ini.

espero ter ajudado.
um abraço!!!


GOSTEI 0
--lh-pim--

--lh-pim--

08/09/2008

estou usando DBExpress, e fiz exatamente do modo como me descreveu, não mudei nada nas configurações do arquivo .ini, apenas no evento Oncreate que mudei. deu erro no banco...
não sei se estou fazendo errado,se devia mudar algo do que escreveu no arquivo .ini?? ou se deixo do jeito como escreveu??

obrigado pela ajuda
e agradeço aos próximos posts desde já


GOSTEI 0
Fabiano Góes

Fabiano Góes

08/09/2008

[quote:62f7f259f3=´--LH-PIM--´]estou usando DBExpress, e fiz exatamente do modo como me descreveu, não mudei nada nas configurações do arquivo .ini, apenas no evento Oncreate que mudei. deu erro no banco...
não sei se estou fazendo errado,se devia mudar algo do que escreveu no arquivo .ini?? ou se deixo do jeito como escreveu??

obrigado pela ajuda
e agradeço aos próximos posts desde já[/quote:62f7f259f3]

criei um método pra você usar, tenta ai
function OpenConnection(oConnect: TSQLConnection; sFileIni: String): Boolean;
begin
   with oConnect do
   begin
      Connected      := False;
      ConnectionName := ´Connect´;
      DriverName     := ´Interbase´;
      GetDriverFunc  := ´getSQLDriverINTERBASE´;
      KeepConnection := False;
      LibraryName    := ´dbexpint.dll´;
      LoginPrompt    := False;
      VendorLib      := ´fbclient.dll´;

      LoadParamsFromIniFile(sFileIni);
      try
         Connected := True;
         Result    := True;
      except
         Result    := False;
         raise Exception.Create(´Erro na conexão com o banco de dados´);
      end;

   end;
end;


exemplo de como usar:
   if OpenConnection(SQLConnection1, ExtractFilePath(Application.ExeName) + ´Connect.ini´) then
      ShowMessage(´Connect OK´);


O primeiro parametro do método você passa seu objeto SQLConnetion.
o segundo parametro do método você o caminho do seu arquivo ini

assim o sistema espera que exista no diretório do sistema um arquivo ini chamado ´Connect.ini´

ExtractFilePath(Application.ExeName) + ´Connect.ini´



GOSTEI 0
--lh-pim--

--lh-pim--

08/09/2008

Olá,novamente com problemas... ´/

veja só,estou executando a minha aplicação e quando faço isso ela diz a mensagem:
´missing driver property´ e tbm apareceu a seguinte mensagem:
´unavaliable database´

por que?
estou com muita duvida sobre isso,só queria executar o programa sem ficar mudando o banco de lugar toda a hora... ´/

se puderem ajudar agradeço desde já


GOSTEI 0
Paullsoftware

Paullsoftware

08/09/2008

Que camada de acesso está usando? Tecnologia, Componentes, Etc... assim fica melhor de te ajudar...

Como já mensionaram acima, se for DbExpress use a função abaixo:
procedure LoadConnection(SqlConn:TSQLConnection);
var
 ArqConf : string;
begin
 ArqConf        := ExtractFilePath(ParamStr(0)) + ´Config.ini´;
 PathTemp      := ExtractFileDir(ParamStr(0))+´\BANCO.FDB´;//aqui vai o nome do banco de dados que uso como padrão, mais pode alterar depois que ele criar o arquivo ini em sua aplicação
 with SqlConn do
  begin
  if FileExists(ArqConf) then
   begin
     try
       Close;
       Params.LoadFromFile(ArqConf);
       Open;
       PreparaData();
     except
     on E: Exception do
      begin
       MessageDlg(´Erro ao conectar com o banco de dados! ´+#10+E.Message,mtError,[mbOK],0);
      end;
     end;
   end
  else
   begin
    Params.Values[´DataBase´] := PathTemp;
    Params.Insert(0,´[´+SqlConn.ConnectionName+´]´);
    Params.SaveToFile(ArqConf);
    MessageDlg(´Não foi possível encontrar o arquivo de configuração, o sistema vai criar um pré-configurado para acessa a BASE DE DADOS no endereço: ´+pChar(PathTemp)+´ tente abrir novamente o sistema, se o problema persistir entre em contato com desenvolvedor´,mtError,[mbOK],0);
    Application.Terminate;
   end;
  end;
end; (* LoadConnection *)


espero ter ajudado! :wink:


GOSTEI 0
POSTAR