VERIFICAR E CRIAR BANCO/TABLELA/CAMPO

ADILSOO 14/01/2014 23:05:30
#433068
Boa noite pessoal!
Bom, venho aqui pedir a ajuda de todos para o seguinte problema, esses dias me deparei com uma situação, eu fiz a atualização no cliente, mas eu me esqueci que nessa atualização eu deveria ter incluido 2 campos na tabela do banco de dados, resumindo, tive que voltar lá, e incluir, mas tudo bem. Mas a questão é a seguinte, para isso não acontecer, estava pensando se teria algum modo de eu estar verificando se existe aquele banco, se nao criar, se já existe a tabela naquele banco, se não criar, verificar se existe os campos naquela tabela, se não, criar. Eu estava procurando por aí, o que encontrei foi tipo de um script, até notei que o backup do mysql é assim, mas não sei como usá-lo no vb, será que alguém pode me dar uma luz? Obrigado desde já, um abraço!!!
MARSOLIM 15/01/2014 16:05:56
#433104
já pesquisou no google por [txt-color=#e80000]visual basic mysql create table[/txt-color] e [txt-color=#e80000]visual basic mysql alter table[/txt-color]?
ADILSOO 15/01/2014 22:26:44
#433120
Sim cara, como disse, eu encontrei e todos que encontrei foi um comanto sql, só que não consegui implementar no vb
MARCELO.TREZE 16/01/2014 11:12:36
#433142
Adilsoo como você faz a consulta no banco ou insere os dados posta ai pragente, que te explico como funciona pra adicionar a tabela campos, etc.
ADILSOO 16/01/2014 12:32:38
#433149
Bom, seria assim...

sSQL = [Ô][Ô]SELECT tabela FROM banco WHERE campo = '[Ô]& critério &[Ô]'[Ô]
Set rs = Conexao.Execute (sSQL)
MARCELO.TREZE 16/01/2014 12:56:50
#433154
Resposta escolhida
então colega veja como é dificil

vou criar uma tabela no banco de dados com alguns campos

conexao.Execute [Ô]CREATE TABLE IF NOT EXISTS tabela_nova (campo_nome VARCHAR(20), campo_endereco VARCHAR(500), campo_cidade VARCHAR(100), campo_dataNasc date)[Ô]


entendeu agora para você criar, se parte do mesmo principio de consultar, inserir, deletar

outro exemplo:

vou criar um campo em uma tabela já existente, acima criei a tabela toda agora vou criar apenas o campo(coluna)

conexao.Execute [Ô]ALTER TABLE aluno ADD idade int(11)[Ô]


acima criei um campo idade na tabela aluno, dificil né.

e assim segue agora veja a documentação mysql ficará claro como poderá proceder





ADILSOO 16/01/2014 20:29:30
#433192
Agora consegui, valeu!
Mas ficou uma dúvida, os campos eu não consegui verificar se existe antes de mandar criar, a tabela deu certo...
Estou fazendo assim...

 sSQL = [Ô]ALTER TABLE IF NOT EXISTS teste ADD idade int(11)[Ô]
Conexao.Execute (sSQL)
MARCELO.TREZE 16/01/2014 21:26:30
#433195
Para os campos não existe o [IF NOT EXIST] ou seja ALTER TABLE não usa o IF NOT EXIST você tera criar uma função, ou verificar de outra forma

uma alternativa é preencher um array com os campos da tabela comparar com o novo campo que você quer inserir, seria algo mais ou menos assim


Dim rs As Recordset
Dim fld As Field
Set rs = Conexao.Execute([Ô]select * from sua_tabela[Ô])
For Each fld In rs.Fields
List2.AddItem fld.Name
Next


no exemplo acima os campos serão colocados em um listbox, basta você criar uma array pra depois comparar com os campos que irá inserir.


RO.DRIGOSG 17/01/2014 15:55:45
#433233
Adilson,

Segue script de verificação de campos com o alter table:

IF NOT EXISTS (	SELECT 
OBJ.NAME, COL.NAME
FROM
SYS.ALL_OBJECTS OBJ
INNER JOIN SYS.ALL_COLUMNS COL ON
COL.OBJECT_ID = OBJ.OBJECT_ID
WHERE
OBJ.NAME = [ô]PROPOSTAS[ô]
AND COL.NAME = [ô]TESTE[ô]
)
BEGIN
ALTER TABLE PROPOSTAS ADD
TESTE INT NULL
END


é só implementar esse script no vb para ser executado.

Obs.:
Na tabela SYS.ALL_OBJECTS, estão todas as tabelas do seu banco.
Na tabela SYS.ALL_COLUMNS, estão todos os campos de suas tabelas.
No caso acima eu coloquei para pesquisar onde a tabela é igual a [ô]PROPOSTAS[ô] e o campo é igual a [ô]TESTE[ô]
ADILSOO 18/01/2014 09:58:55
#433253
Amigo, pelo que eu entendi, eu preciso gravar as tabelas e campos no próprio banco, e eu não estava querendo depender do banco em si para isso, pois eu quero que quando eu instalar o sistema, quero que seja criado todas as tabelas e campos necessários, pensei em fazer o seguinte, criar um arquivo INI e colocar todas as tabelas e campos nesse INI, quando houver alguma alteração na base de dados, eu envio junto com a atualização para o cliente o arquivo INI, quando o sistema inicializar pela próxima vez, já criará todos as tabelas e campos necessários. Até aí já está definido, agora vou ver a melhor maneira para se fazer isso...
MARSOLIM 18/01/2014 13:09:36
#433255
tu pode adaptar a dica do marcelo treze e adicionar os campos em um array para comparar com os campos da tabela

Dim rs As Recordset
Dim fld As Field
Dim existe as Boolean = False
Dim nomecampos() As String = {[Ô]campo1[Ô], [Ô]campo2[Ô], [Ô]campo3[Ô]}
Dim cadacampo As String

Set rs = Conexao.Execute([Ô]select * from sua_tabela[Ô])

For Each fld In rs.Fields
For Each cadacampo In nomecampo
If cadacampo = rs.Fields.Name Then
existe = True
End If
Next

If existe = False Then
comando para inserir o campo
End If
Next
Tópico encerrado , respostas não são mais permitidas