Prova De Aptidão Profissional - SoS PeoPleWaRe - Versão de Impressão +- Forum Pplware (http://forum.pplware.com) +-- Fórum: Mais Tech (/forumdisplay.php?fid=11) +--- Fórum: Programação e Web (/forumdisplay.php?fid=16) +--- Tópico: Prova De Aptidão Profissional - SoS PeoPleWaRe (/showthread.php?tid=5988) |
Prova De Aptidão Profissional - SoS PeoPleWaRe - P3dr0 - 10-05-2010 23:06 Boa noite! Isto é assim eu sou aluno do 12º ano e frequento o curso profissional de técnico de Gestão, E no final dos 3 anos de curso temos que fazer a PaP(Prova de Aptidão Profissional) e só tendo a mesma positiva é que receberemos o diploma com o prémio de fim de curso. Bem eu para a minha PaP vou fazer uma aplicação de Gestão de venda de productos informáticos, tipo a worten ou a box, mas claro em termos de tamanho é mini xD E gostava que podesse ter este tópico aqui aberto para ir pondo aqui as minhas duvidas e erros que me vão aparecendo para me irem ajudando... Bem como programa para a minha base de dados estou a usar o sql server 2008 utilizando o visual basic para a manusear. e em termos de base de dados já tenho tudo feito, mas agora que comecei a programar acerio é que isto ta mal ^^ Bem então comecei por tentar adicionar clientes na base de dados, a tabela clientes que recebe todos os valores do programa que o utilizador digita, menos o codigo postal que vem numa tabela aparte, ou seja a tabela cliente relaciona se com a codigo postal, de forma a ter todos os codigos postais numa combobox para o utilizador la ir buscar. tenho o seguinte código: Código: Private Sub Novo_Cliente_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load PS: Esta parte serve para quando o form novo_cliente é carregado vaia buscar a tabela codigopostal os valores a meter na combobox para o utilizador possa selecionar o que deseja. Código: Private Sub Avançar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Avançar.Click PS: esta Parte é para adicionar Valores na base de dados! Até aqui tudo Bem, mas quando vou correr o programa e acesso á base de dados da me o seguinte erro: Código: ConstraintException was unhandled: Erro este na parte do load do form, quando estou a fazer o código para ir buscar os valores á tabela codigo postal, ja tentei de tudo, ja fui a BD tirar e por os allow nulls activos e desactivos vezes sem conta, e mexi e remexi e da sempre o mesmo erro. mas o engrançado é que se eu for a tabela clientes e meter o codigo postal como nulo, e na parte do codigo puser em comentario tudo aquilo que tem haver com o codigopostal e correr o programa já consigo adicionar coisas na tabela, o que me leva a crer que o erro deve estar nas ligações entre as tabelas clientes e codigo postal, mas não sei... portanto se alguem me puder dar uma ajuda nisto força se não perceberem algo digam ^^ RE: Prova De Aptidão Profissional - SoS PeoPleWaRe - crazyman - 11-05-2010 01:17 boas seria optimo tb colocares as ligaçoes que fizeste na BD, para vermos se estao correctas... Pelo menos entre a tbl clientes e a tbl codigo postal Qual é a versão do VB? pelo erro que está a dar, penso que será da chave estrangeira, ou seja da chave da tb cod post, mas... Só vendo as ligaçoes... RE: Prova De Aptidão Profissional - SoS PeoPleWaRe - jaimetotal - 11-05-2010 09:44 Mostra também as queries. RE: Prova De Aptidão Profissional - SoS PeoPleWaRe - P3dr0 - 11-05-2010 10:30 Aqui está o diagrama das minhas tabelas... as ligações que tenho feito entre a tabela clientes e a tabela fornecedores com a tabela codigo postal, e que o campo codigopostal na tabela codigo postal e chave primaria e o campo codigopostal nas outras tabelas e chave estrangeira... o programa que uso é o visual basic express edition 2008! RE: Prova De Aptidão Profissional - SoS PeoPleWaRe - crazyman - 11-05-2010 20:35 nao creio q o codigo postal possa ser uma chave primaria... o meu vizinho do 3º andar tem o mesmo codigo postal do que eu... RE: Prova De Aptidão Profissional - SoS PeoPleWaRe - norua - 12-05-2010 10:25 Sinceramente, embora construcção de base de dados nunca tenha sido o meu forte, acho que teres ai a tabela Código Postal só não tem utilidade nenhuma como não tem lógica também. Já para não falar no problema que no post a cima descreveram. Para ser sincero se fosse a ti (e tive-res tempo) tentava fazer isso sem essa tabela. Cumps. RE: Prova De Aptidão Profissional - SoS PeoPleWaRe - crazyman - 12-05-2010 11:12 ontem apenas coloquei aquele post porque estava com pressa e apenas detectei aquele erro Mas agora olhando bem para estas ligaçoes existem aqui alguns erros de coerencia que te vao dar erros no futuro: tabela vender_produto: Trata-se de uma tabela intermédia com o contribuinte como chave primaria e cod_produto como chave estrangeira vai te dar um problema grave. 1 cliente so pode comprar 1 unica vez nessa loja... Sugestão: Cria um campo nessa tabela como numeração automatica com o titulo por exemplo "cod_ven_prod" e esse sim fica como chave primaria e mantem os outros como chave estrangeira Tabela Fornecedor_produto O erro é exactamente o mesmo do anterior. A solução passa pela mesma Tabela cod_postal Pelas razões que já descrevi no meu post anterior A solução passa por atribuires uma Chave primaria de numeração automatica como por exemplo "cod_codpost" Assim funcionará de certeza absoluta... Existem outros pormenores que eu alterearia/intrudozia mas isso já depende do que se queira fazer... Por exemplo: Criaria mais 2 tabelas: Tabela Familia e Tabela Subfamilia Alterava a chave n_contribuite da tabela Cliente para a Chave N_BI, pois na programação pode confundir com o N_contribuite da tabela Fornecedor. Para te poupar trabalho tenho aqui as tabelas ja feitas com os codigos postais, freguesias, conselhos e distritos que utilizei para uma aplicação que fiz ha pouco tempo. Se quizeres manda me uma MP. 1 abraço RE: Prova De Aptidão Profissional - SoS PeoPleWaRe - P3dr0 - 12-05-2010 11:27 Mas o codigo postal so é chave primaria na sua propria tabela, na tabela clientes ja não o e, o que faz com que 2 clientes possam ter o mesmo codigo postal... então mas a tabela codigo postal vem de forma a ter adicionado la todos os codigos postais existentes e as relativas localidades ao que os mesmos correspondem, de forma a que quando estou a adicionar um cliente ou fornecedor, faça simplesmente o levantamento do codigo postal e a localidade venha logo incorporada... RE: Prova De Aptidão Profissional - SoS PeoPleWaRe - jaimetotal - 12-05-2010 11:55 Viva, o código postal está correcto como está, pelos mesmos argumentos que usaste. Muitas pessoas nem sabem correctamente a localidade delas. Mas caso queiras os códigos postais todos, tens isso no site dos CTT, mas é necessário uma limpeza. Quanto aos clientes, recomendo-te usares um ID automático. Não te esqueças que o NIF são 9 dígitos e pesquisar sempre por eles é complicado, o mesmo para o fornecedor. Não é que esteja mal, mas é standard. Para vender e comprar, recomendo-te outro tipo de tabela, que é o que se costuma fazer Código: Tabela CabecDoc Código: Tabela LinhasDoc (Para comprar mais que um artigo na mesma factura) A ter em conta: - A tabela CabecDoc normalmente até é mais elaborada, mas para ficar simples, isto chega. - Na tabela LinhasDoc, fazes a relação das linhas de artigo com a cabeçalho da factura através do NumCabecDoc e NumLinhasDoc. Se não quiseres NumLinhasDoc, NumCabecDoc não pode ser chave única. - Convém guardar o preço de cada artigo, porque como é algo dinâmico, tens que saber o preço do dia da factura, não no dia em que vás ver a factura. - Não é necessário saber o total, porque calcula-se na hora do levantamento. Quanto ao teu problema concretamente : - Mostra as queries de consulta, e a que usaste para criar a tabela código postal e clientes. O erro queixa-se basicamente de uma constraint que aplicaste que está a ser violada. - Conheces SqlDataReader? Usas com o SqlCommand,SqlConnection e são melhores que datasets em muitos casos (até maioria dos casos) e aplicam-se melhor no teu Novo_Cliente_Load. exemplo: Código: dim sqlCmd as new sqlCommand("select codigo from dbo.codigopostal",sqlCon) - Por último, tenta mudar a maneira que dás nomes às coisas. Primeiro o tipo de objecto txt,cmb,mtxt, e o nome. Exemplo: txtNome,frmCliente. O mesmo para as variáveis: i(nt)CodPostal (só pelo nome vê-se que é inteiro). Embora existam várias maneiras de nomear as coisas, tens que aderir a uma. É mais perceptível o que é e para o que serve, e ajudar-te-á no futuro, caso queiras vir para estes lados. Cumps. RE: Prova De Aptidão Profissional - SoS PeoPleWaRe - crazyman - 12-05-2010 12:30 Tens a tabela de cod postais toda preenchida com todas as localidades do pais e nao tens nenhum codigo postal repetido???? Entao pode ficar como chave primaria... Se no futuro nao te aparecer uma localidade diferente com o mesmo codigo postal... |