Fórum Criar um banco via Delphi #346172

18/09/2007

0

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

Responder

Posts

18/09/2007

Jhosef

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


Responder

Gostei + 0

18/09/2007

Fabiano Góes

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


Responder

Gostei + 0

18/09/2007

Jhosef

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???


Responder

Gostei + 0

18/09/2007

Jhosef

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


Responder

Gostei + 0

18/09/2007

Fabiano Góes

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.


Responder

Gostei + 0

18/09/2007

Jhosef

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


Responder

Gostei + 0

18/09/2007

Fabiano Góes

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


Responder

Gostei + 0

19/11/2007

Renan.cb

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


Responder

Gostei + 0

19/11/2007

Renan.cb

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


Responder

Gostei + 0

22/11/2007

Renan.cb

sobe.
alguma dica?


Responder

Gostei + 0

13/03/2008

Pqno_icarus

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


Responder

Gostei + 0

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

Aceitar