Criar um banco via Delphi

Delphi

18/09/2007

Seguinte, quero q minha aplicação quando iniciar verifique se existe o arquivo do banco de dados (teste.fdb) caso naum exista quero que ela crie um banco de dados (novo.fdb) e insira algumas tabelas, como posso fazer isso???

Estou usando Delphi 2006 + Firebird 2


Jhosef

Jhosef

Curtidas 0

Respostas

Jhosef

Jhosef

18/09/2007

Ia esquecendo, estou usando o DBExpress para isso...


GOSTEI 0
Fabiano Góes

Fabiano Góes

18/09/2007

Uma opção para criar um novo DataBase é:
procedure CreateDataBase(const ADataBase: String);
var
  DataBase : TIBDatabase;
begin

  DataBase :=  TIBDatabase.Create( nil );
  try
    try
      with DataBase do
        begin
          DatabaseName := ADataSource;
          SQLDialect   := 3;
          Params.Clear;
          Params.Add(´USER ´´SYSDBA´´´);
          Params.Add(´PASSWORD ´´masterkey´´´);
          Params.Add(´PAGE_SIZE 16384´);
          Params.Add(´DEFAULT CHARACTER SET ISO8859_1´);
          CreateDatabase;
        end; // WITH CriaBanco DO
    finally
      FreeAndNil(DataBase);
    end;
  except
      raise Exception.Create(´ERROR: CreateDataBase´);
  end; 

end; 


após criar o DataBase, você abre uma conexão com o mesmo através do TSQLConnection, e com um TSQLQuery você cria as tabelas tipo:
procedure CreateTable(ACon: TSQLConnection; AScriptSQL: string);
var
   QRY: TSQLQuery;
begin
   QRY := TSQLQuery.Create(nil);
   try
      ACon.Open;
      QRY.SQLConnection := ACon;
      with QRY do
      begin
         Close;
         SQL.Clear;
         SQL.Text := AScriptSQL;
         ExecSQL();
      end;  
   finally
      ACon.Close;
      FreeAndNil(QRY);
   end;


ai um metodo para verificar se a tabela já existe antes de cria-la:
function TableExist(ACon: TSQLConnection; ATableName: string): Boolean;
var
   List: TStrings;
   i   : integer;
begin
   Result := False;
   List   := TStringList.Create;
   try
      ACon.Open;
      ACon.GetTableNames(List);

      for i := 0 to List.Count - 1 do
      begin
         if UpperCase(List.Strings[i]) = UpperCase(ATableName) then
            Result := True;
      end;

   finally
      List.Free;
      ACon.Close;
   end;
end;



então você pode usar assim:
begin
   if not FileExists(´C:\teste.fdb´) then
      CreateDataBase(´C:\teste.fdb´);   

   // aqui você configura o objeto TSQLConnection para se conectar com o DataBase: ´C:\teste.fdb´

   if not TableExist(´TableName´) then
      CreateTable(SQLConnection, SeuScriptSQL);      
        
end;


Abraço !!!


GOSTEI 0
Jhosef

Jhosef

18/09/2007

Primeiro isso vai servi para bancos Firebird tbem naum eh...

Outra coisa...
Se eu quiser fazer isso para outros bancos como MySQL, SQL Server, Access que são bancos que o DBExpress suporta???


GOSTEI 0
Jhosef

Jhosef

18/09/2007

A função CreateTable tbem pode seu usada para criar generators, procedures e alterações na estrutura da tabela???


GOSTEI 0
Fabiano Góes

Fabiano Góes

18/09/2007

Primeiro isso vai servi para bancos Firebird tbem naum eh...

o metodo [b:d220c43b95]CreateDataBase[/b:d220c43b95] cria Banco apenas Interbase/Firebird

Outra coisa... Se eu quiser fazer isso para outros bancos como MySQL, SQL Server, Access que são bancos que o DBExpress suporta???

eu ainda não consegui uma maneira generica para criar varios tipos de Banco de dados

para o MYSQL você pode abrir uma conexão com o Banco ´mysql´ que é criado na instalação, ai com uma query você executa a criação tipo:
   query.close;
   query.SQL.Text := ´create database ´ + DataBase;
   query.ExecSQL();


A função CreateTable tbem pode seu usada para criar generators, procedures e alterações na estrutura da tabela???


Sim como você passa um parametro com o ScriptSql você pode usar para executar qualquer script no banco, mude o nome no metodo para ExecSQL e use para executar seus scripts.


GOSTEI 0
Jhosef

Jhosef

18/09/2007

Blz deixando o createdatabase de lado entaum...

As outras funções podem ser utilizadas com outros bancos entaum... dai posso soh enviar um banco vazio e manipulo do jeito q for melhor...
Vlw pelas dicas, consegui no almoço executa-las no firebird...

huauuhahua

Vlw


GOSTEI 0
Fabiano Góes

Fabiano Góes

18/09/2007

Blz deixando o createdatabase de lado entaum... As outras funções podem ser utilizadas com outros bancos entaum... dai posso soh enviar um banco vazio e manipulo do jeito q for melhor... Vlw pelas dicas, consegui no almoço executa-las no firebird... huauuhahua Vlw


valeu por ter voltado para dizer que funcionou assim o post não fica em aberto e servirá quando outro amigo tiver duvida.

abraço !!!


GOSTEI 0
Renan.cb

Renan.cb

18/09/2007

e para criar uma trigger?

criei uma dll para fazer a criação do banco para mim, e chamo ela pelo meu instalador (Inno Setup). Fiz isso para diminuir o tamanho do meu instalador.

sera que nao tem uma maneira de usar as dll do firebird para fazer essas criações e alterações em tabelas?

abraço


GOSTEI 0
Renan.cb

Renan.cb

18/09/2007

existe alguma maneira de se executar um script (.sql) de dentro do delphi? tenho um script que gera o database, tabelas, triggers ...

pelo sql manager, temos a opção de abrir um script sql e executá-lo com sucesso. Teria com fazer isso de dentro de uma procedure ou funçao?

grato pela ajuda


GOSTEI 0
Renan.cb

Renan.cb

18/09/2007

sobe.
alguma dica?


GOSTEI 0
Pqno_icarus

Pqno_icarus

18/09/2007

tbm estou precisando urgente resolver isso, como instalar o postgres, definindo nome do db, usuário e senha em silente mode, e como rodar o script de criação das tabelas, relaçoes e tudo mais assim que instalar o applicativo... grato


GOSTEI 0
POSTAR