CHAVE PRIMARIA E CARDINALIDADE - MODELO RELACIONAL

USUARIO.EXCLUIDOS 10/07/2005 19:13:44
#93227
Galera,
Estou iniciando na linguagem VB (6), tenho uma dúvida quanto a criação de chave primária e cardinalidade para BD Acess via VB6. Crio os tabelas, mas como incluo a chave primária e o vínculo entre as tabelas (um para muitos...)? Desculpem antes da pergunta pesquisei, em vários locais mas não encontrei nenhum artigo que explique como proceder dentro do aplicativo (VB6).

Obrigado à  todos e abraços
JEAN.JEDSON 11/07/2005 13:44:10
#93374
vc cria o banco pelo vb ou pelo access?
USUARIO.EXCLUIDOS 11/07/2005 18:55:09
#93501
BILLY_FAC,
Se você estiver usando ADO ai vai uma sequencia para criação de banco de dados, tabela, indices e restrições (PKs e FKs) via código.

' Neste exemplo foi usado a referência: Microsoft ADO Ext. 2.8 for DDL and Security
Sub CriaMDB(dbName As String)
Dim newMDB As New ADOX.Catalog

' Remove arquivo .mdb
If Dir(dbName, vbArchive Or vbNormal) <> "" Then Kill dbName

' Cria novo .mdb
newMDB.Create "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbName
Set newMDB = Nothing
End Sub


Fragmentos de código com criação de vários objetos no banco (PKs e FKs estão em vermelho).:

' Neste exemplo foi usado a referência: Microsoft ActiveX Data Objects 2.5 Library
Public cnn As New ADODB.Connection
Public cmd As New ADODB.Command

Set cnn = New ADODB.Connection
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\meuBD.mdb"

' Removendo constraints de chave estrangeira
cnn.Execute "ALTER TABLE Produtos DROP CONSTRAINT FK_Fornecedores", , adCmdText

' Removendo constraints de chave primaria
cnn.Execute "ALTER TABLE Produtos DROP CONSTRAINT XPK_Produtos", , adCmdText
cnn.Execute "ALTER TABLE Fornecedores DROP CONSTRAINT XPK_Fornecedores", , adCmdText

' Removendo indices
cnn.Execute "DROP INDEX IXidFornecedor ON Produtos", , adCmdText
cnn.Execute "DROP INDEX IXNome ON Fornecedores", , adCmdText

' Removendo registros
cnn.Execute "DELETE FROM Produtos", , adCmdText
cnn.Execute "DELETE FROM Fornecedores", , adCmdText

' Removendo campos
cnn.Execute "ALTER TABLE Produtos DROP COLUMN Preco", , adCmdText
cnn.Execute "ALTER TABLE Fornecedores DROP COLUMN Endereco", , adCmdText

' Removendo tabelas
cnn.Execute "DROP TABLE Produtos", , adCmdText
cnn.Execute "DROP TABLE Fornecedores", , adCmdText



' Criando tabelas
' autoNumber = Identity
cnn.Execute "CREATE TABLE Produtos " & _
"( CodProduto Integer NOT NULL," & _
" Descricao Varchar(50) NOT NULL," & _
" idFornecedor Integer NOT NULL DEFAULT 0," & _
" Status Bit)", , adCmdText
cnn.Execute "CREATE TABLE Fornecedores " & _
"( CodFornecedor Integer NOT NULL," & _
" Nome Varchar(50) )", , adCmdText

' Alterando campo
'cnn.Execute "ALTER TABLE Produtos MODIFY COLUMN Descricao NOT NULL"

' Adicionando campos
cnn.Execute "ALTER TABLE Produtos ADD COLUMN Preco Decimal(10,2) DEFAULT 0.0", , adCmdText
cnn.Execute "ALTER TABLE Fornecedores ADD COLUMN Endereco Varchar(50)", , adCmdText

' Inserindo dados
cnn.Execute "INSERT INTO Fornecedores (codFornecedor, Nome, Endereco) " & _
"VALUES(1, 'ABC', 'Av Principal, 175')", , adCmdText
cnn.Execute "INSERT INTO Produtos (CodProduto, Descricao, idFornecedor, Preco) " & _
"VALUES(1, 'Lápis', 1, 0.51)", , adCmdText
cnn.Execute "INSERT INTO Produtos (CodProduto, Descricao, idFornecedor, Preco) " & _
"VALUES(2, 'Caneta', 1, 0.25)", , adCmdText
cnn.Execute "INSERT INTO Produtos (CodProduto, Descricao, idFornecedor, Preco) " & _
"VALUES(3, 'Borracha', 1, 1.31)", , adCmdText
[txt-color=#ff0000]
' Criando constraints de chave primária
cnn.Execute "ALTER TABLE Produtos" & _
" ADD CONSTRAINT XPK_Produtos" & _
" PRIMARY KEY (CodProduto)", , adCmdText
cnn.Execute "ALTER TABLE Fornecedores" & _
" ADD CONSTRAINT XPK_Fornecedores" & _
" PRIMARY KEY (CodFornecedor)", , adCmdText

' Criando constraints de chave estrangeira (relacionamentos)
cnn.Execute "ALTER TABLE Produtos" & _
" ADD CONSTRAINT FK_Fornecedores" & _
" FOREIGN KEY (idFornecedor)" & _
" REFERENCES Fornecedores (CodFornecedor)", , adCmdText
[/txt-color]
' Criando indices (para indices unicos: CREATE UNIQUE INDEX)
cnn.Execute "CREATE INDEX IXidFornecedor ON Produtos (idFornecedor)", , adCmdText
cnn.Execute "CREATE INDEX IXNome ON Fornecedores (Nome)", , adCmdText

cnn.Close
USUARIO.EXCLUIDOS 16/07/2005 17:19:57
#94479
Valeu, pessoal. Dúvida esclarecida. Obrigado
Tópico encerrado , respostas não são mais permitidas