Fórum Criar dinamicamente um banco no Interbase #264520
07/01/2005
0
[color=red:3944dfad0a][/color:3944dfad0a]
Olá pessoal, estou criando um banco de dados no Interbase v.6 utilizando o Delphi v.7. Acontece que este sistema cria um banco de dados a partir
de um arquivo de texto contendo as seguintes informações:
ID;Ação;Tabela;Campo;TipoCampo;Tamanho;ValorPadrão;IniciadoZero;Requerido
1;1;A_Cartas;ID;4;4;;0;0 {Ação 1:Criar Tabela}
2;2;A_Cartas;Adoção;4;4;1;0;0 {Ação 1: Criar Campo}
Dependendo do TipoCampo;Tamanho;IniciadoZero ele liga um campo
a uma das possibilidades de domínio:
CREATE DOMAIN ´DATA´ AS DATE
DEFAULT NULL;
CREATE DOMAIN ´DATAC´ AS TIMESTAMP
DEFAULT NULL;
CREATE DOMAIN ´DESCRI025´ AS VARCHAR(25)
DEFAULT NULL;
CREATE DOMAIN ´DESCRI060´ AS VARCHAR(60)
DEFAULT NULL;
CREATE DOMAIN ´DESCRI0XX´ AS VARCHAR(255)
DEFAULT NULL;
CREATE DOMAIN ´DESCRI125´ AS VARCHAR(25) NOT NULL;
CREATE DOMAIN ´DESCRI160´ AS VARCHAR(60) NOT NULL;
CREATE DOMAIN ´DESCRI1XX´ AS VARCHAR(255) NOT NULL;
CREATE DOMAIN ´DOUBLE0´ AS DOUBLE PRECISION
DEFAULT 0;
CREATE DOMAIN ´DOUBLE1´ AS DOUBLE PRECISION
DEFAULT 0 NOT NULL;
CREATE DOMAIN ´HORA´ AS TIME
DEFAULT NULL;
CREATE DOMAIN ´INT0´ AS SMALLINT
DEFAULT 0;
CREATE DOMAIN ´INT1´ AS SMALLINT
DEFAULT 0 NOT NULL;
CREATE DOMAIN ´LONG0´ AS INTEGER
DEFAULT 0;
CREATE DOMAIN ´LONG1´ AS INTEGER
DEFAULT 0 NOT NULL;
CREATE DOMAIN ´MEMORANDO´ AS BLOB SUB_TYPE 0 SEGMENT SIZE 80
DEFAULT NULL;
CREATE DOMAIN ´MOEDA0´ AS DECIMAL(18, 2)
DEFAULT 0;
CREATE DOMAIN ´MOEDA1´ AS DECIMAL(18, 2)
DEFAULT 0 NOT NULL;
CREATE DOMAIN ´SIMNAO´ AS SMALLINT
DEFAULT 0
CHECK ((VALUE=0) OR (VALUE=-1) OR (VALUE is NULL));
CREATE DOMAIN ´SINGLE0´ AS FLOAT
DEFAULT 0
CHECK (VALUE>0);
CREATE DOMAIN ´SINGLE1´ AS FLOAT
DEFAULT 0
CHECK (VALUE>0) NOT NULL;
CREATE DOMAIN ´UF´ AS CHAR(2)
DEFAULT NULL;
O código feito até agora é este:
unit Unit1;
interface
uses
SysUtils, Types, Classes, Variants, QTypes, QGraphics, QControls, QForms,
QDialogs, QStdCtrls, QGrids, QDBGrids, DB, DBClient, dbClipImport;
type
TForm1 = class(TForm)
Button1: TButton;
ClientDataSet1: TClientDataSet;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure CFT_Criatab;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.xfm}
procedure TForm1.FormCreate(Sender: TObject);
var
delim : Char;
begin
delim := ´;´;
ImportFromFile(´c:\CFTTABELAS.txt´, delim, ClientDataSet1);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i : integer;
begin
ClientDataSet1.First;
for i := 0 to (ClientDataSet1.Fields.Count -1) do
begin
if ClientDataSet1.Fields[1].AsString = ´1´ then
cft_criatab;
ClientDataSet1.Next;
end;
end;
procedure TForm1.CFT_Criatab;
var
Nometab : string;
Nomecampo : string;
Tipocampo : integer;
Tamanho : integer;
SQLStr : string;
begin
try
Nometab := ClientDataSet1.Fields[2].AsString;
Nomecampo := ClientDataSet1.Fields[3].AsString;
Tipocampo := ClientDataSet1.Fields[4].AsInteger;
Tamanho := ClientDataSet1.Fields[5].AsInteger;
SQLStr := ´CREATE TABLE ´ + Nometab + ( ´ + Nomecampo + ´ ´;
case tipocampo of
1
begin
SQLStr := SQLStr + ´SIMNAO´;
end;
2, 3
begin
SQLStr := SQLStr + ´Int0´;
end;
4
begin
SQLStr := SQLStr + ´Long0´;
end;
5
begin
SQLStr := SQLStr + ´Single0´;
end;
6
begin
SQLStr := SQLStr + ´Double0´;
end;
end;
SQLStr := SQLStr + ´) CONSTRAINT .... PRIMARY KEY...´;
SQLConnection1.ExecuteDirect(SQLStr);
finally
tamanho := 0;
end;
end;
end.
[b:3944dfad0a]Eu tenho que ao criar a tabela criar o primeiro campo, que é sempre primary key.
Depois utilizando o alter table adiciona ou altera as propriedades de campo em uma tabela, confere se a tabela existe senão sinaliza no log e sai (acontece que não sei o que é log!!), confere na tabela e no banco de dados se o campo existe, adiciona o campo com as propriedades indicadas, atualiza a tabela[/b:3944dfad0a].
Por enquanto minha dúvida é como fazer estas coisas que estão em negrito.
Olá pessoal, estou criando um banco de dados no Interbase v.6 utilizando o Delphi v.7. Acontece que este sistema cria um banco de dados a partir
de um arquivo de texto contendo as seguintes informações:
ID;Ação;Tabela;Campo;TipoCampo;Tamanho;ValorPadrão;IniciadoZero;Requerido
1;1;A_Cartas;ID;4;4;;0;0 {Ação 1:Criar Tabela}
2;2;A_Cartas;Adoção;4;4;1;0;0 {Ação 1: Criar Campo}
Dependendo do TipoCampo;Tamanho;IniciadoZero ele liga um campo
a uma das possibilidades de domínio:
CREATE DOMAIN ´DATA´ AS DATE
DEFAULT NULL;
CREATE DOMAIN ´DATAC´ AS TIMESTAMP
DEFAULT NULL;
CREATE DOMAIN ´DESCRI025´ AS VARCHAR(25)
DEFAULT NULL;
CREATE DOMAIN ´DESCRI060´ AS VARCHAR(60)
DEFAULT NULL;
CREATE DOMAIN ´DESCRI0XX´ AS VARCHAR(255)
DEFAULT NULL;
CREATE DOMAIN ´DESCRI125´ AS VARCHAR(25) NOT NULL;
CREATE DOMAIN ´DESCRI160´ AS VARCHAR(60) NOT NULL;
CREATE DOMAIN ´DESCRI1XX´ AS VARCHAR(255) NOT NULL;
CREATE DOMAIN ´DOUBLE0´ AS DOUBLE PRECISION
DEFAULT 0;
CREATE DOMAIN ´DOUBLE1´ AS DOUBLE PRECISION
DEFAULT 0 NOT NULL;
CREATE DOMAIN ´HORA´ AS TIME
DEFAULT NULL;
CREATE DOMAIN ´INT0´ AS SMALLINT
DEFAULT 0;
CREATE DOMAIN ´INT1´ AS SMALLINT
DEFAULT 0 NOT NULL;
CREATE DOMAIN ´LONG0´ AS INTEGER
DEFAULT 0;
CREATE DOMAIN ´LONG1´ AS INTEGER
DEFAULT 0 NOT NULL;
CREATE DOMAIN ´MEMORANDO´ AS BLOB SUB_TYPE 0 SEGMENT SIZE 80
DEFAULT NULL;
CREATE DOMAIN ´MOEDA0´ AS DECIMAL(18, 2)
DEFAULT 0;
CREATE DOMAIN ´MOEDA1´ AS DECIMAL(18, 2)
DEFAULT 0 NOT NULL;
CREATE DOMAIN ´SIMNAO´ AS SMALLINT
DEFAULT 0
CHECK ((VALUE=0) OR (VALUE=-1) OR (VALUE is NULL));
CREATE DOMAIN ´SINGLE0´ AS FLOAT
DEFAULT 0
CHECK (VALUE>0);
CREATE DOMAIN ´SINGLE1´ AS FLOAT
DEFAULT 0
CHECK (VALUE>0) NOT NULL;
CREATE DOMAIN ´UF´ AS CHAR(2)
DEFAULT NULL;
O código feito até agora é este:
unit Unit1;
interface
uses
SysUtils, Types, Classes, Variants, QTypes, QGraphics, QControls, QForms,
QDialogs, QStdCtrls, QGrids, QDBGrids, DB, DBClient, dbClipImport;
type
TForm1 = class(TForm)
Button1: TButton;
ClientDataSet1: TClientDataSet;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure CFT_Criatab;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.xfm}
procedure TForm1.FormCreate(Sender: TObject);
var
delim : Char;
begin
delim := ´;´;
ImportFromFile(´c:\CFTTABELAS.txt´, delim, ClientDataSet1);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i : integer;
begin
ClientDataSet1.First;
for i := 0 to (ClientDataSet1.Fields.Count -1) do
begin
if ClientDataSet1.Fields[1].AsString = ´1´ then
cft_criatab;
ClientDataSet1.Next;
end;
end;
procedure TForm1.CFT_Criatab;
var
Nometab : string;
Nomecampo : string;
Tipocampo : integer;
Tamanho : integer;
SQLStr : string;
begin
try
Nometab := ClientDataSet1.Fields[2].AsString;
Nomecampo := ClientDataSet1.Fields[3].AsString;
Tipocampo := ClientDataSet1.Fields[4].AsInteger;
Tamanho := ClientDataSet1.Fields[5].AsInteger;
SQLStr := ´CREATE TABLE ´ + Nometab + ( ´ + Nomecampo + ´ ´;
case tipocampo of
1
begin
SQLStr := SQLStr + ´SIMNAO´;
end;
2, 3
begin
SQLStr := SQLStr + ´Int0´;
end;
4
begin
SQLStr := SQLStr + ´Long0´;
end;
5
begin
SQLStr := SQLStr + ´Single0´;
end;
6
begin
SQLStr := SQLStr + ´Double0´;
end;
end;
SQLStr := SQLStr + ´) CONSTRAINT .... PRIMARY KEY...´;
SQLConnection1.ExecuteDirect(SQLStr);
finally
tamanho := 0;
end;
end;
end.
[b:3944dfad0a]Eu tenho que ao criar a tabela criar o primeiro campo, que é sempre primary key.
Depois utilizando o alter table adiciona ou altera as propriedades de campo em uma tabela, confere se a tabela existe senão sinaliza no log e sai (acontece que não sei o que é log!!), confere na tabela e no banco de dados se o campo existe, adiciona o campo com as propriedades indicadas, atualiza a tabela[/b:3944dfad0a].
Por enquanto minha dúvida é como fazer estas coisas que estão em negrito.
Arhat
Curtir tópico
+ 0
Responder
Posts
07/01/2005
Reginaldo174
Amigo, não sei se entendi . mas tavlez ajude.
vc já tem instrução Sql é quer saber como criar uma tabela.
exemplo : segue a instrução sql montada:
vc pode criar uma var string para montar o Sql
Exemplo: memo1.text := sql montada;
Se não for isso, pode me encontrar no msn para debater.
vc já tem instrução Sql é quer saber como criar uma tabela.
exemplo : segue a instrução sql montada:
CREATE TABLE "TESTE"
(
"CODIGO"INTEGER NOT NULL,
"TITULO"VARCHAR(40),
"NOTAS"BLOB SUB_TYPE TEXT
SEGMENT SIZE 80,
"FOTO"BLOB SUB_TYPE 0 SEGMENT SIZE 80,
CONSTRAINT "PK_ALBUM" PRIMARY KEY
("CODIGO")
);vc pode criar uma var string para montar o Sql
Exemplo: memo1.text := sql montada;
with IBQuery1 do begin close; sql.Clear; sql.Add(memo1.text); try ExecSQL; except MessageDlg(´Deu Pau !´, mtError, [mbOK], 0); end; end;
Se não for isso, pode me encontrar no msn para debater.
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)