GARANTIR DESCONTO

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.


Arhat

Arhat

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:

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

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

Aceitar