Tipos

Firebird

16/10/2003

1-Para me usar num atributo preco q tipo tenho q usar?(real, float, etc?)
eu to colocando float e os numeros q eu to inserindo esta aparecendo assim:
se eu inseriro 1.5 aparece 1.5000000000111111

2-por q?

3-por exemplo se eu coloquei integer como q eu faço pra mudar pra float em sql?
eu tentei


alter table Produtos alter Column preco type float

e não funcionou....

4-como q eu faço para alterar o nome de uma coluna da tabela em sql por exemplo de preco para precos????

5-e para alter o nome de uma tabela?


agradeço desde já!


Heero

Heero

Curtidas 0

Respostas

Heero

Heero

16/10/2003

eh o interbase q eu estou usando...


GOSTEI 0
Mateus_henriques

Mateus_henriques

16/10/2003

Caro Heero...

sou iniciante não sei se posso te ajudar muito mais vai no site: www.delphibr.com.br na parte de apostilas, la tem uma apostilas com tudo que é tipo de comando sql pra interbase... explica tudo, eu recomendo, estou estudando por ele. :)


GOSTEI 0
Afarias

Afarias

16/10/2003

|1-Para me usar num atributo preco q tipo tenho q usar?(real, float, etc?)
|eu to colocando float e os numeros q eu to inserindo esta aparecendo

NÃO USE FLOAT. Float é só para números *MUITO* grandes e nunca deve ser usado quando é necessário precisão.

defina seu tipo como NUMERIC .. ex:: NUMERIC(9,2)


|3-por exemplo se eu coloquei integer como q eu faço pra mudar pra
|float em sql? eu tentei alter table Produtos alter Column preco type float
|e não funcionou....

tenho certeza q funciona. qual o erro q vc recebeu??
mas, use numeric::

ALTER TABLE PRODUTOS ALTER PRECO TYPE NUMERIC(9,2)


|como q eu faço para alterar o nome de uma coluna da tabela em sql por
|exemplo de preco para precos????

dê uma lida no SQL HELP do INTERBASE -- veja o comando ALTER TABLE

alter table nome_tabela alter nome_coluna to novo_nome;


|5-e para alter o nome de uma tabela?

humm... acho q nào é possível.


T+


GOSTEI 0
Heero

Heero

16/10/2003

usei quantidade q eh integer pra passar pra float deu esse erro:

Unsuccessful metadata update
Cannot change datatype for QUANTIDADE. Conversion from base type INTEGER to FLOAT is not supported
Statement: ALTER TABLE PRODUTOS ALTER quantidade TYPE float


eu to pensando em usar float pois estou interagindo com linguagem de programacao java, pois pra me receber esse valor acho q tinha q ser do tipo float, ou tem outra solucao? vai poder usar numeric mesmo? ou float?

e me explica melhor uma coisa o Double precision eh o doblo do float não eh?

obrigado pela ajuda foi de grande valia!!!


GOSTEI 0
Afarias

Afarias

16/10/2003

como disse use NUMERIC !!

quando se usa NUMERIC o INTERBASE escolhe qual tipo será armazenado internamente de acordo com a precisão e escala fornecidos. Assim vc estará mais ´otimizado´

Mas... se quer usar FLOAT vá em frente... crie um novo campo FLOAT e migre seus values integer para lá.


T+


GOSTEI 0
Heero

Heero

16/10/2003

entendi q q vc quiz dizer...
o problema meu eh q eu não sei se o java aceita receber numeric numa variavel dele, vc sabe? pois ele não tem o tipo numeric. vc sabe como q eu faço pra receber um valor numeric? eu posso declarar no java float e receber um valor do interbase numeric?

essa duvida permaneceu


GOSTEI 0
Afarias

Afarias

16/10/2003

Veja... o tipo de dados do banco de dados não tem q ser o mesmo (em NOME) da linguagem de programação!!

FLOAT no IB não é necessáriamente IGUAL ao FLOAT no Java... são coisas distintas.

qualquer valor como FLOAT, NUMERIC, DECIMAL ou outro, provavelmente poderá ser carregado no tipo Float do Java, blz?!


T+


GOSTEI 0
Heero

Heero

16/10/2003

obrigado pela ajuda entendi muito bem!!!!

vou te mostrar minha tabela ateh fiz umas modificacoes nelas , vc dah uma ajuda pra mim pra ver se tah certo? eu quebrei a cabeca pra fazer ela e o maximo da laranja q eu consegui ispremer foi isso:

* = chave primária
^ = chave extrangeira


Produtos (*codigoproduto, nomeproduto, tipo, Preço, Quantidade, Preço de Custo)

Fornecedores (*Codigofornecedor, nomefornecedor, tipo, Endereço, Cidade, Telefone)

Itenspedidos (*codigoItempedido, ^Codigoproduto, Quantidade, Sub-Total)

A tabela a cima eu cadastro os produtos a serem pedidos pela empresa

No caso o código do produto acima pode ser soh estrangeira ou tem q ser primaria tbm?
Por q?

Pedidos (*codigopedido,^codigoItempedido, ^codigofornecedor, Data)

A tabela acima relaciona os pedidos pedidos aos seus fornecedores, pois vários pedidos podem ser feitos a um fornecedor.

No caso o códigoItemPedido e códigofornecedor pode ser soh estrangeira acima pode ser soh estrangeira ou tem q ser primaria tbm?
Por q?


Empregado(*codigoempregado, nomeempregado, endereço, Telefone, Identidade, cargo)

Clientes (*codigocliente, nomecliente, endereço, Telefone, Identidade)

ItensVendas (*CodigoVenda, ^codigoproduto, ^codigocliente, quantidade)

Mesmo tipo de pergunta feito acima

Vendas (*^codigoVenda,^codigoempregado,total,data)

Mesmo tipo de pergunta feito acima

Está certo?
Eu tenho que agrupar alguma chave tipo agrupar códigovenda com código do empregado? Pra q q serve agrupar? como q eu faço isso?


GOSTEI 0
Afarias

Afarias

16/10/2003

hummmm... vc está quase lá... ;-)


A relação entre PEDIDOS e ITENS_PEDIDOS é de 1 para N (1 pedido pode conter vários ítens) sendo assim, a chave estrangeira deve ficar em ITENS_PEDIDOS e não em PEDIDOS (^CodigoItemPedido) ... ex::

Pedidos (*CodigoPedido, ^CodigoFornecedor, Data)

ItensPedidos (*CodigoItemPedido, ^CodigoPedido, ^CodigoProduto, Quantidade, SubTotal)


bom, isso se vc terá um CodigoItemPedido independente (único) -- agora, algumas pessoas preferem ter códigos de ítens de pedido POR pedido (tipo: pedido 1, ítens 1, 2, 3 -- pedido 2, ítens 1, 2)

dessa forma ItensPedidos ficaria::

ItensPedidos (*^CodigoPedido, *CodigoItemPedido, ^CodigoProduto, Quantidade, SubTotal)


neste caso, CodigoPedido e CodigoItemPedido fazem parte da chave primária (composta) pois CodigoItemPedido se repete para Pedidos diferentes. -- E, é claro, CodigoPedido continua sendo chave estrangeira TAMBEM para manter a integridade da relação entre as entidades.


T+


GOSTEI 0
Heero

Heero

16/10/2003

deixa eu ver se eu entendi, por exemplo se eu tiver duas chaves primarias (ex: codVenda , codProduto) eu posso ter 1 2, 1 3, 1 4 , 2 2, 2 3 (valores integer de cada chave) porem eu não posso ter 1 2, 1 2, certo?
por exemplo se eu colocar duas primary key numa tabela elas jah ficam compostas? se não como q eu faço pra deixar elas compostas?


GOSTEI 0
Afarias

Afarias

16/10/2003

|deixa eu ver se eu entendi, por exemplo se eu tiver duas chaves
|primarias (ex: codVenda , codProduto) eu posso ter 1 2, 1 3, 1 4 , 2 2, 2
|3 (valores integer de cada chave) porem eu não posso ter 1 2, 1 2,
|certo?

Certo!

Mas não são 2 chaves primárias! é apenas 1 sendo q composta por 2 campos.


|por exemplo se eu colocar duas primary key numa tabela elas jah ficam
|compostas? se não como q eu faço pra deixar elas compostas?

vc somente pode ter 1 chave primária em uma tabela. entretanto, esta chave primária pode ser composta ou seja, pode ter 2 ou mais campos participando de sua formação.



T+


GOSTEI 0
Heero

Heero

16/10/2003

valeu carah! to começando a fragar o movimento de chave primaria... e olha q eu fiquei um tempão estudando bd, e soh agora entendi o movimento...

olha soh então, se eu decrar 2 chaves primarias em uma tabela automaticamente elas vão ser compostas, eh isso? então elas se interagem pra formar uma soh, chamada de chave composta? uma não sobrevive sem a outra certo?

valeu!


GOSTEI 0
Afarias

Afarias

16/10/2003

|olha soh então, se eu decrar 2 chaves primarias em uma tabela
|automaticamente elas vão ser compostas, eh isso? {...}

NÃO!!

como disse antes, vc só pode declarar 1 chave primária na tabela e PRONTO!!!

exemplo::

alter table nome_tabela add constraint pk_nome primary key (campo1);

ou, caso vc queira (ou precise de) uma chave composta::

alter table nome_tabela add constraint pk_nome primary key (campo1, campo2); // ou mais campos se desejar


se vc definiu uma chave de forma incorreta (ou, suas necessidades mudaram) e vc precisa redefinir a chave primária, vc tem q 1º destruir a que já existe e então criá-la novamente::

alter table nome_tabela drop constraint pk_nome;
alter table nome_tabela add constraint pk_nome primary key (campo3, campo4);


só uma dica:: evite a todo custo chaves primárias compostas -- acredito q vai te livrar de muitas dores de cabeça no futuro!!!

blz?!?! T+


GOSTEI 0
POSTAR