CONSULTAR ANTES DE CRIAR!!!
AMIGOS,
TENHO UM PROJETO QUE O USUÃRIO CRIA TODAS AS TABELAS E CAMPOS, MAIS TEM UM PROBLEMA, SE A TABELA OU CAMPO NA TABELA JÃ EXISTE EVIDENTEMENTE GERA UM ERRO.
COMO POSSO PESQUISA SE A TABELA JÃ EXISTE ANTES DE CRIA-LA, E, COMO POSSO PESQUISA SE O CAMPO JÃ EXISTE ANTES DE ADICIONA-LO A TABELA?
AGRADEÇO A AJUDA DE TODOS...
OBS: VB6 x SQLSERVER
TENHO UM PROJETO QUE O USUÃRIO CRIA TODAS AS TABELAS E CAMPOS, MAIS TEM UM PROBLEMA, SE A TABELA OU CAMPO NA TABELA JÃ EXISTE EVIDENTEMENTE GERA UM ERRO.
COMO POSSO PESQUISA SE A TABELA JÃ EXISTE ANTES DE CRIA-LA, E, COMO POSSO PESQUISA SE O CAMPO JÃ EXISTE ANTES DE ADICIONA-LO A TABELA?
AGRADEÇO A AJUDA DE TODOS...
OBS: VB6 x SQLSERVER
vc pode verificar nas tabelas System do SqlServer
Acho q isso serve, é um exemplo de criação de uma tabela para cadastro de empresa:
A SQL=[Ô]create table if not exists 'Tabela' - realiza a verificação se a tabela existe e a cria.
[txt-color=#e80000]Public Function CriarTabelaEmpresa()
SQL = [Ô]CREATE TABLE IF NOT EXISTS 'Empresa' ([Ô] _
& [Ô]'razao' varchar(50) NOT NULL default [ô][ô], [Ô] _
& [Ô]'fantasia' varchar(50) NOT NULL default [ô][ô], [Ô] _
& [Ô]'cnpj' varchar(30) NOT NULL default [ô][ô], [Ô] _
& [Ô]'estadual' varchar(25) NOT NULL default [ô][ô], [Ô] _
& [Ô]'endereco' varchar(50) NOT NULL default [ô][ô], [Ô] _
& [Ô]'bairro' varchar(50) NOT NULL default [ô][ô], [Ô] _
& [Ô]'cep' varchar(10) NOT NULL default [ô][ô], [Ô] _
& [Ô]'cidade' varchar(30) NOT NULL default [ô][ô], [Ô] _
& [Ô]'uf' varchar(2) NOT NULL default [ô][ô], [Ô] _
& [Ô]'telefone' varchar(20) NOT NULL default [ô][ô], [Ô] _
& [Ô]'email' varchar(50) NOT NULL default [ô][ô], [Ô] _
& [Ô]'responsavel' varchar(40) NOT NULL default [ô][ô], [Ô] _
& [Ô]'telresponsavel' varchar(20) NOT NULL default [ô][ô], [Ô] _
& [Ô]PRIMARY KEY ('cnpj') [Ô] _
& [Ô]) TYPE=MyISAM[Ô]
gConexao.Execute SQL, , adExecuteNoRecords
End Function[/txt-color]
A SQL=[Ô]create table if not exists 'Tabela' - realiza a verificação se a tabela existe e a cria.
[txt-color=#e80000]Public Function CriarTabelaEmpresa()
SQL = [Ô]CREATE TABLE IF NOT EXISTS 'Empresa' ([Ô] _
& [Ô]'razao' varchar(50) NOT NULL default [ô][ô], [Ô] _
& [Ô]'fantasia' varchar(50) NOT NULL default [ô][ô], [Ô] _
& [Ô]'cnpj' varchar(30) NOT NULL default [ô][ô], [Ô] _
& [Ô]'estadual' varchar(25) NOT NULL default [ô][ô], [Ô] _
& [Ô]'endereco' varchar(50) NOT NULL default [ô][ô], [Ô] _
& [Ô]'bairro' varchar(50) NOT NULL default [ô][ô], [Ô] _
& [Ô]'cep' varchar(10) NOT NULL default [ô][ô], [Ô] _
& [Ô]'cidade' varchar(30) NOT NULL default [ô][ô], [Ô] _
& [Ô]'uf' varchar(2) NOT NULL default [ô][ô], [Ô] _
& [Ô]'telefone' varchar(20) NOT NULL default [ô][ô], [Ô] _
& [Ô]'email' varchar(50) NOT NULL default [ô][ô], [Ô] _
& [Ô]'responsavel' varchar(40) NOT NULL default [ô][ô], [Ô] _
& [Ô]'telresponsavel' varchar(20) NOT NULL default [ô][ô], [Ô] _
& [Ô]PRIMARY KEY ('cnpj') [Ô] _
& [Ô]) TYPE=MyISAM[Ô]
gConexao.Execute SQL, , adExecuteNoRecords
End Function[/txt-color]
AMIGO SNNIFER,
ISSO é MUITO VÃLIDO SIM, MAIS NO MEU CASO NAUM SERVER, PQ SE A TEBALA EXISTE TEM Q SER CRIADA OUTRA TABELA,
EXEMPLOS:
O USUARIO CADASTRO UM NOVO SETOR COM ISSO SERÃ CRIADO UMA NOVA TABELA PARA REFERENCIA DO SETOR, O NOME DA TABELA SERÃ O Q O USUARIO KISER E OS CAMPOS TAMBEM, COM ISSO, SE ELE TENTAR CADASTRA UMA TABELA JÃ EXISTENTE O SISTEMA TEM QUE AVISAR Q O NOME Q A TABELA JÃ EXISTE PARA ELE PODER UTILIZAR OUTRO NOME.
ENTENDEL MEU PROBLEMA AMIGO?
ISSO é MUITO VÃLIDO SIM, MAIS NO MEU CASO NAUM SERVER, PQ SE A TEBALA EXISTE TEM Q SER CRIADA OUTRA TABELA,
EXEMPLOS:
O USUARIO CADASTRO UM NOVO SETOR COM ISSO SERÃ CRIADO UMA NOVA TABELA PARA REFERENCIA DO SETOR, O NOME DA TABELA SERÃ O Q O USUARIO KISER E OS CAMPOS TAMBEM, COM ISSO, SE ELE TENTAR CADASTRA UMA TABELA JÃ EXISTENTE O SISTEMA TEM QUE AVISAR Q O NOME Q A TABELA JÃ EXISTE PARA ELE PODER UTILIZAR OUTRO NOME.
ENTENDEL MEU PROBLEMA AMIGO?
meu conselho é o seguinte, coloque um treeview em seu projeto, exiba totas as tabelas e campos existentes, quando for criar uma nova tabela, faça uma varredura para verificar se existe a tabela ou os campos, acho que ficará algo bem profissional.
PARA SABER SE UMA TABELA EXISTE PODE-SE UTILIZAR ISSO:
Public Function ExistTable(Tabela As String) As Boolean
ExistTable = False
Dim RS As ADODB.Recordset
Set RS = New ADODB.Recordset
Set RS = cn.OpenSchema(adSchemaTables, Array(Empty, Empty, Tabela, [Ô]TABLE[Ô]))
If Not RS.EOF Then
ExistTable = True
Else
ExistTable = False
End If
RS.Close
End Function
AINDA NAUM DESCOBRI COMO SABER SE UM CAMPO EXISTE!!!
Public Function ExistTable(Tabela As String) As Boolean
ExistTable = False
Dim RS As ADODB.Recordset
Set RS = New ADODB.Recordset
Set RS = cn.OpenSchema(adSchemaTables, Array(Empty, Empty, Tabela, [Ô]TABLE[Ô]))
If Not RS.EOF Then
ExistTable = True
Else
ExistTable = False
End If
RS.Close
End Function
AINDA NAUM DESCOBRI COMO SABER SE UM CAMPO EXISTE!!!
veja este exemplo que lista todas a tabelas e campos
Private Sub ListarTabelasADO()
Dim Conn As New ADODB.Connection
Dim TablesSchema As ADODB.Recordset
Dim ColumnsSchema As ADODB.Recordset
Conn.Provider = [Ô]MSDASQL[Ô]
Conn.Open [Ô]DSN=...;Database=...;[Ô], [Ô]UID[Ô], [Ô]PWD[Ô]
Set TablesSchema = Conn.OpenSchema(adSchemaTables)
Do While Not TablesSchema.EOF
DoEvents
Set ColumnsSchema = Conn.OpenSchema(adSchemaColumns, _
Array(Empty, Empty, [Ô][Ô] & TablesSchema([Ô]TABLE_NAME[Ô])))
Do While Not ColumnsSchema.EOF
DoEvents
Debug.Print TablesSchema([Ô]TABLE_NAME[Ô]) & [Ô], [Ô] & _
ColumnsSchema([Ô]COLUMN_NAME[Ô])
ColumnsSchema.MoveNext
Loop
TablesSchema.MoveNext
Loop
End Sub
AMIGO MARCELO,
é +- ISSO Q PRECISO, ESTOU MODIFICANDO O Q ME PASSOU PARA VER SE CHEGO AO RESULTADO ESPERANDO, PRECISO DE ALGO COMO A MINHA POSTAGEM ANTERIOR, ONDE ELE PROCURA A TABELA E RETORNA [Ô]TRUE OU FALSE[Ô], O MESMO PRECISO PARA O CAMPO, ALGO Q A ROTINA PERCORRA A TABELA E VISUALIZA SE EXITE O CAMPO PASSADO POR PARAMETOR, E ME RETORNE, [Ô]TRUE[Ô] SE EXISTIR E [Ô]FALSE[Ô] SE NAUM EXISTIR!!!
MESMO ASSIM OBRIGADO PELA ATENÇÃO, SE EU CONSEGUI RESOLVER FAZENDO ALGUMAS MOTIFICAÇÕES NO EXIMPLO Q VC ME PASSOU VOU POSTAR AKI!!!
é +- ISSO Q PRECISO, ESTOU MODIFICANDO O Q ME PASSOU PARA VER SE CHEGO AO RESULTADO ESPERANDO, PRECISO DE ALGO COMO A MINHA POSTAGEM ANTERIOR, ONDE ELE PROCURA A TABELA E RETORNA [Ô]TRUE OU FALSE[Ô], O MESMO PRECISO PARA O CAMPO, ALGO Q A ROTINA PERCORRA A TABELA E VISUALIZA SE EXITE O CAMPO PASSADO POR PARAMETOR, E ME RETORNE, [Ô]TRUE[Ô] SE EXISTIR E [Ô]FALSE[Ô] SE NAUM EXISTIR!!!
MESMO ASSIM OBRIGADO PELA ATENÇÃO, SE EU CONSEGUI RESOLVER FAZENDO ALGUMAS MOTIFICAÇÕES NO EXIMPLO Q VC ME PASSOU VOU POSTAR AKI!!!
AGORA SIM, O PROBLEMA DO CAMPO TB ESTA RESOLVIDO, GRAÇAS A AJUDA DO NOSSO AMIGO MARCELO!!!!
AI ESTA A FUNCTION.
Function ExistColumn(Tabela As String, Coluna As String) As Boolean
ExistColumn = False
Dim Rc As ADODB.Recordset
Set Rc = New ADODB.Recordset
Set Rc = cn.OpenSchema(adSchemaColumns, _
Array(Empty, Empty, Tabela, Coluna))
If Not Rc.EOF Then
ExistColumn = True
Else
ExistColumn = False
End If
Rc.Close
End Function
AI ESTA A FUNCTION.
Function ExistColumn(Tabela As String, Coluna As String) As Boolean
ExistColumn = False
Dim Rc As ADODB.Recordset
Set Rc = New ADODB.Recordset
Set Rc = cn.OpenSchema(adSchemaColumns, _
Array(Empty, Empty, Tabela, Coluna))
If Not Rc.EOF Then
ExistColumn = True
Else
ExistColumn = False
End If
Rc.Close
End Function
Tópico encerrado , respostas não são mais permitidas