Criar campos dinamicamente - Access

Delphi

02/11/2006

Caros amigos, já pesquisei aqui no forum e não encontrei uma solução para o meu problema.

Queria que quando o meu programa fosse atualizado, o programa verifica-se o banco de dados antigo (toda vez tenho que trocar o banco de dados) e se preciso fosse cria-se os campos novos automaticamente. Eu uso banco de dados access, queria fazer isto usando ado sql é possivel?

Vocês poderiam me mostrar um exemplo ou me indicar onde tem um?

obrigado pela a atenção.


Ranyeryfip

Ranyeryfip

Curtidas 0

Respostas

Paulocesar1301

Paulocesar1301

02/11/2006

esse código me ajudou uma vez ...
... é só trabalhá-lo um pouco.

[b]Uses ,  ADOInt, ComObj, ADODB[/b]

[b]procedure[/b] CriandoTabelaAccess;
[b]var[/b] Catalog : Variant;
    Table    : Variant;
    Field    : Variant;
    Key      : Variant;
    Index    : Variant;
    BaseName : String;
    ConnStr  : String;
[b]begin[/b]
 BaseName := ´c:\windows\desktop\demo.mdb´;
 Catalog := CreateOLEObject(´ADOX.Catalog´);

 // Cria o banco de dados MDB compative com Access 97 (type=4). Access 2000=Type 5
 ConnStr := ´Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Engine Type=4;Data Source=´+BaseName;
 If FileExists(BaseName) Then DeleteFile(BaseName);
 Catalog.Create(ConnStr);

 // Cria a tabela
 Table := CreateOLEObject(´ADOX.Table´);
 Table.Name := ´Clientes´;
 Catalog.Tables.Append(Table);

 // Primeiro Metodo para criacao de campos
 Field := CreateOLEObject(´ADOX.Column´);
 Field.ParentCatalog := Catalog;
 Field.Name := ´Codigo´;
 Field.Type := adInteger;
 Field.Properties[´Nullable´].Value      := false;
 Field.Properties[´Description´].Value   := ´Este é o campo da chave primária´;
 Field.Properties[´AutoIncrement´].Value := true;
 Table.Columns.Append(Field);

 // Cria a chave Primária para o campo Codigo
 Key := CreateOLEObject(´ADOX.Key´);
 Key.Name := ´PrimaryKey´;
 Key.Type := 1; //adKeyPrimary
 Key.Columns.Append(´Codigo´);
 Table.Keys.Append(Key);

 // Segundo Metodo para criacao de campos
 Table.Columns.Append(´Nome´  , adVarWChar, 50);  // Veja a relacao de tipos de campos no arquivo ADOInt.pas do Delphi

 // Cria outro indice para a tabela
 Table.Keys.Append(´Nome´,3,´Nome´);

 // Mais colunas
 Table.Columns.Append(´Email´ , adVarWChar, 70);
 Table.Columns.Append(´Cidade´ , adVarWChar, 40);
 Table.Columns.Append(´Bairro´ , adVarWChar, 30);

 // Adiciona o estado com validação
 Field := CreateOLEObject(´ADOX.Column´);
 Field.ParentCatalog := Catalog;
 Field.Name                     
 Field.ParentCatalog := Catalog;
 Field.Name := ´Codigo´;
 Field.Type := adInteger;
 Field.Properties[´Nullable´].Value      := false;
 Field.Properties[´Description´].Value   := ´Este é o campo da chave primária´;
 Field.Properties[´AutoIncrement´].Value := true;
 Table.Columns.Append(Field);

 // Cria a chave Primária para o campo Codigo
 Key := CreateOLEObject(´ADOX.Key´);
 Key.Name := ´PrimaryKey´;
 Key.Type := 1; //adKeyPrimary
 Key.Columns.Append(´Codigo´);
 Table.Keys.Append(Key);

 // Segundo Metodo para criacao de campos
 Table.Columns.Append(´Nome´  , adVarWChar, 50);  // Veja a relacao de tipos de campos no arquivo ADOInt.pas do Delphi

 // Cria outro indice para a tabela
 Table.Keys.Append(´Nome´,3,´Nome´);

 // Mais colunas
 Table.Columns.Append(´Email´ , adVarWChar, 70);
 Table.Columns.Append(´Cidade´ , adVarWChar, 40);
 Table.Columns.Append(´Bairro´ , adVarWChar, 30);

 // Adiciona o estado com validação
 Field := CreateOLEObject(´ADOX.Column´);
 Field.ParentCatalog := Catalog;
 Field.Name                             := ´Estado´;
 Field.Type                             := adVarWChar;
 Field.DefinedSize                      := 2;
 Field.Properties[´Nullable´].Value     := False;
 Field.Properties[´Description´].Value  := ´Campo de Estado´;
 Field.Properties[´Jet OLEDB:Allow Zero Length´].Value := True;
 Field.Properties[´Default´].Value      := ´MG´;
 Field.Properties[´Jet OLEDB:Column Validation Rule´].Value := ´<>""´;
 Field.Properties[´Jet OLEDB:Column Validation Text´].Value := ´Por favor preencha o campo CIDADE´;
 Table.Columns.Append(Field);

 // Cria um Indice Composto
 Index := CreateOLEObject(´ADOX.Index´);
 Index.Name := ´BairroCidade´;
 Index.Columns.Append(´Bairro´);
 Index.Columns.Append(´Cidade´);
 Index.IndexNulls := 1; //adIndexNullsDisallow
 Table.Indexes.Append(Index,EmptyParam);

 Catalog := Unassigned;
 Table   := Unassigned;
 Field   := Unassigned;
 Key     := Unassigned;
 Index   := Unassigned;

[b]end;[/b]


Abraços e Bons Códigos :wink:


GOSTEI 0
Ranyeryfip

Ranyeryfip

02/11/2006

[b:4f0b23649d]paulocesar1301[/b:4f0b23649d] muito obrigado pela a ajuda.


GOSTEI 0
POSTAR