Ir para conteúdo
Fórum Script Brasil
  • 0

Criando Tabelas No Banco De Dados Via Sql


dark0

Pergunta

Olá pessoal.

Resolvi abrir este tópico, para falarmos sobre Criação de Tabelas, com comandos SQL.

Agora, estou meio na correria. Então, vou apenas iniciar o tópico.

Depois, quando eu tiver mais tempo, eu dou mais detalhes sobre cada campo, e tudo mais.

Um simples Exemplo:

SQL = "CREATE TABLE nome_tabela (campo1 AutoIncrement, campo2 char(50), campo3 integer, Primary Key(campo1) )"
conexao.execute(SQL)

Ate mais

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

E ae pessoal.

Bom, ontem não tive muito tempo para explicar este comando.

Bem, a princípio, creio que todos saibam o que seja Criar Tabelas, certo?

Então, pode ser que em alguns casos, seja necessário que isto seja feito durante o codigo asp, com nomes dinâmicos, campos dinâmicos, e tudo mais.

Imaginem um exemplo:

Um sistema parecido com WEBMAIL.

Sempre que um novo usuário é cadastrado, é criado uma nova tabela com o nome dele, e com as pastas 'padrões', como Caixa de Entrada, Saída.

Então, pensem só..

Se não existisse tal comando, para criar dinâmicamente, toda vez que alguém se cadastrasse, o administrador teria que abrir o banco, criar a tabela, adicionar os campos padrões. Imaginem isto para 100 usuários. Mão de obra.. né?

Eu digo isto, porque já montei um sistema similar ao que citei anteriormente.

E foi por isso que corri atrás, para descobrir como criar tabelas direto, pelo SQL.

Bom. Chega de blah blah blah, e vamos ao que interessa.

Estes códigos, e sintaxes, eu testei apenas no Banco de dados ACCESS.

Portanto, não me responsabilizo, caso não funcione com outros tipos de banco de dados.

Vamos partir do Princípio:

Passo 1: Conectar ao Banco de dados

url_conexao = Server.MapPath("banco.mdb")
set conexao = Server.CreateObject("ADODB.Connection")
conexao.open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&url_conexao
Não vou entrar em detalhes de como é feita a conexão.. esta é uma forma, porém existem mais tipos. Com a conexão feita, podemos criar o SQL, que criará a tabela. Passo 2: Montando o SQL
SQL = "CREATE TABLE nome_tabela (campo1 AutoIncrement, campo2 char(50), campo3 integer, Primary Key(campo1) )"
Vamos entender o SQL acima: - CREATE TABLE, são comandos do SQL, que fazem a criação da tabela. Estes nunca mudam! - nome_tabela, é o nome da tabela que será criada. Pode ser uma variável, vinda de um formulario. Vale aqui ressaltar, que se a tabela já existir, via gerar um erro! Podemos driblar isto, fazendo um simples IF, e testando se a tabela já existe! - (, isto é um parentese mesmo. Ele inicia a definição de campos. E deve ser fechado, antes do término do SQL. - campo1, é o nome do campo que será criado. - AutoIncrement, é o tipo de campo que será criado. Este, é AutoNumeração. Mas pode ser Texto, Numero, Data, Memo, Etc .. - Primary Key (campo1), aqui estamos dizendo qual é a chave primária da tabela. Entre Parênteses, vai o nome do campo que será chave primaria. - ), aqui fechamos o parêntese, de definição dos campos da tabela. Bem, após o Passo2, a tabela foi criada com sucesso, ou não. Pois, pode ser que ela já exista, e tenha dado erro. Para isto, podemos usar o Passo 3! Passo3: Testando se a tabela já existe!
adSchemaTables = 20
Set rsTabs = conexao.OpenSchema(adSchemaTables)

tabela = false
Do while not rsTabs.EOF
if rsTabs("TABLE_TYPE") = "TABLE" then 
 if rsTabs("TABLE_NAME") = "nome_tabela" then
  tabela = true
 end if
end if
rsTabs.MoveNext 
Loop

if tabela = false then
 Response.Write "A tabela não existe"
else
 Response.Write "A tabela existe!"
end if

Então, vamos tentar entender.

A variavel tabela é inicializada com FALSE. Ela somente será TRUE, caso a tabela já exista!

Pois, dentro do LOOP, estamos passando por todas as tabelas existentes, testando se alguma delas é igual à que vamos criar!

Bem, por hora, acho que é isso!

Em breve quero postar mais sobre cada tipo de campo, que pode ser criado!

Abraços, e boa Programação!

Link para o comentário
Compartilhar em outros sites

  • 0

Vou tentar ajudar.

Alguns tipos de dados

Para números temos os tipos:

REAL , ocupa 4 bytes - Ponto Flutuante de precisão simples

FLOAT , ocupa 8 bytes - Ponto Flutuante de precisão dupla

SMALLINT , ocupa 2 bytes - Inteiro entre -32.768 e 32.767

INTERGER , ocupa 4 bytes - Inteiro entre -2.147.483.648 e 2.147.483.647

O campo SIM/não é um tipo BIT

O campo Monetário é um tipo MONEY , ocupa 8 bytes

O Campo Memorando é um tipo TEXT , ocupa 2 bytes por caracter

Um comentário alguém poderia perguntar qual a diferença entre um tipo CHAR(n) e um tipo Text(n). Eu diria que para valores de n entre 0 e 255(que é o comprimento máximo de um tipo CHAR) menhuma. Os dois ocupam um espaço de armazenamento de 2 bytes por caracter.

Agora fica a pergunta: Como criar campos que aceitem uma seguência vazia?

Aproveitando a oportunidade, mais uma pergunta: Onde podemos encontrar os valores das constantes para OpenSchema?

[]'s

Link para o comentário
Compartilhar em outros sites

  • 0

ola

eu deixei esse tópico suspenso por semanas.. mas foi na época que eu criei ele..

querem que pendure de novo?

se sim.. postem aí.. q algum mod pendura..

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

dê uma buscada aí por permissoes..

eu fiz uma explicação sobre isso um tempo atras

Link para o comentário
Compartilhar em outros sites

  • 0

bom tenho uma duvida sobre SQL, não sei se esse tópico pode-se discutir duvidas, mais vamos lá:

tenho um bd mysql que está + ou - assim:

ID    NOME
12    Vinicius
13    Digo
14    Digo
15    Vinicius
16    Digo
17    Vinicius
.
.

eu queria mudar todos os registros que tem o nome Digo para Rodrigo

então eu pensei em rodar essa SQL no meu php myadmin:

UPDATE tabela SET Nome='Rodrigo' WHERE nome='Digo'

porém ele me deu erro de sintaxe.. dai eu tentei:

UPDATE `tabela` SET `nome`='Rodrigo' WHERE `Nome`=Digo;

e ele me deu o mesmo erro....

então eu alterei um manualmente e reparei que ele usou esse codigo:

UPDATE `tabela` SET `nome`='Rodrigo' WHERE `ID`=26;

será que não vou conseguir mudar usando o where no nome ??? apenas na auto numeração tem algum jeito de eu mudar esses registros tenho quase 200 huauha

Link para o comentário
Compartilhar em outros sites

  • 0
bom tenho uma duvida sobre SQL, não sei se esse tópico pode-se discutir duvidas, mais vamos lá:

tenho um bd mysql que está + ou - assim:

ID    NOME
12    Vinicius
13    Digo
14    Digo
15    Vinicius
16    Digo
17    Vinicius
.
.

eu queria mudar todos os registros que tem o nome Digo para Rodrigo então eu pensei em rodar essa SQL no meu php myadmin:
UPDATE tabela SET Nome='Rodrigo' WHERE nome='Digo'
porém ele me deu erro de sintaxe.. dai eu tentei:
UPDATE `tabela` SET `nome`='Rodrigo' WHERE `Nome`=Digo;
e ele me deu o mesmo erro.... então eu alterei um manualmente e reparei que ele usou esse codigo:
UPDATE `tabela` SET `nome`='Rodrigo' WHERE `ID`=26;
será que não vou conseguir mudar usando o where no nome ??? apenas na auto numeração tem algum jeito de eu mudar esses registros tenho quase 200 huauha
Deve ser algum bug na ferramente front-end q voce utiliza, pois já fiz isso no MySQL Query Browser e funciona.
[/code]

Link para o comentário
Compartilhar em outros sites

  • 0

valeu moçada, mais uma então, vamos lá

eu tenho na minha tabela varias veses o nome Maria e Ariane

dai eu tentei:

SELECT * FROM tabela WHERE nome='maria' and nome='isabela'

ele dá erro pois a comsulta é na mesma coluna..

também tentei :

SELECT * FROM tabela WHERE nome='maria,isabela'

tente colocar paretenses, um monte de coisa, alguém tem alguma idéia de como fazer isso ? wink.gif

Link para o comentário
Compartilhar em outros sites

  • 0

mano.. não faria sentido esse seu sql..

é impossível acontecer sua condição..

não seria apropriado usar o OR?

E outra coisa.. qual o nome de sua tabela?

você disse que o nome da tabela é NOME.. (mas no sql, você colocou o nome da tabela de TABELA)..

Bem.. tente com o OR:

sql = "SELECT * FROM tabela WHERE nome='maria' or nome='isabela' "

Link para o comentário
Compartilhar em outros sites

  • 0
mano.. não faria sentido esse seu sql..

é impossível acontecer sua condição..

Bem.. tente com o OR:

sql = "SELECT * FROM tabela WHERE nome='maria' or nome='isabela' "

eu corrigi lá , tinha escrito errado....

ahn eu postei isso porque já conteceu isso comigo já tive que usar...

o OR só exibe o segundo resutlado se ele não encontrar o primeiro.... e numa lista de 120 alunos de uma escola, eu precisava pegar três alunos de uma tabela que controlava as faltas deles...

Link para o comentário
Compartilhar em outros sites

  • 0

mas, então..

você tem 1 campo nome, certo?

como, que o campo nome teria mais de 1 nome por registro?

seria incoerente cara..

pois.. veja só como não teria logica:

nome = 'maria'

nome = 'isabela'

select * from tabela where nome= 'maria' and nome='isabela'

Veja, que o campo nome tem somente MARIA, e somente ISABELA

Como você quer pegar maria E isabela?

não sei se você conseguiu entender.. mas não teria logica.. o proprio sql estaria sem logica..

pois, como um campo vai ser X e Y ao mesmo tempo?

bem.. pelo menos foi isso aí que eu entendi..

se o esquema tem alguma logica.. mostra ela aí..

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
você tem 1 campo nome, certo?

como, que o campo nome teria mais de 1 nome por registro?

seria incoerente cara..

pois.. veja só como não teria logica:

nome = 'maria'

nome = 'isabela'

select * from tabela where nome= 'maria' and nome='isabela'

Veja, que o campo nome tem somente MARIA, e somente ISABELA

Como você quer pegar maria E isabela?

não sei se você conseguiu entender.. mas não teria logica.. o proprio sql estaria sem logica..

pois, como um campo vai ser X e Y ao mesmo tempo?

bem.. pelo menos foi isso aí que eu entendi..

se o esquema tem alguma logica.. mostra ela aí..

abraço

rs... você tá certo sim.. não tem sentido um SQL desses, mais é a forma qeu eu encontrei de explicar o meu Problema....

mais montei do jeito qeu o cyberalex falou e funcionou.....

Link para o comentário
Compartilhar em outros sites

  • 0

hehehe..

beleza..

ficou meio esquisito.. mas o que vale é que funcionou tongue.gif

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
tente

ASP

nome="maria"

nome1="nazare"

sql="SELECT * FROM tabela WHERE nome='"&nome&"' or nome='"&nome1&"'"

masi dai vai ocorrer aquele problema que eu tinha citado, ele só vai exibir o segundo nome que está na variavel nome1 se ele não encontrar nenhum registro que está em nome entende ??

quando na verdade ele teria que exibir todos os registros que tenham esses coisa nomes !!

Link para o comentário
Compartilhar em outros sites

  • 0
tente

ASP

nome="maria"

nome1="nazare"

sql="SELECT * FROM tabela WHERE nome='"&nome&"' or nome='"&nome1&"'"

masi dai vai ocorrer aquele problema que eu tinha citado, ele só vai exibir o segundo nome que está na variavel nome1 se ele não encontrar nenhum registro que está em nome entende ??

quando na verdade ele teria que exibir todos os registros que tenham esses coisa nomes !!

Quando lhe indiquei o UNION nem testei o uso do OR, mais agora resolvi testar e funcionou normalmente.

Ps: Não testei via script apenas digitei o select no MySQL Query Browser

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...