gadNY Posted May 6, 2009 at 11:38 AM Report #261829 Posted May 6, 2009 at 11:38 AM SqlConnection sqlconn = new SqlConnection(connectionString); //Abrir a ligacao: sqlconn.Open(); //executar comandos: SqlCommand cmd = new SqlCommand("SELECT nometurma,anoturma,nomearea FROM turmas, areas WHERE nometurma = @letraturma", sqlconn); cmd.Parameters.Add("@letraturma", SqlDbType.NVarChar).Value = comboturma.SelectedItem; //datareader: SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { List.Items.Add(dr["nometurma"] + " - " + dr["anoturma"] + " - " + dr["nomearea"]); } eu tenho isto para apresentar numa list os campos que tenho em duas tabelas . o problema e que ao inserir na combobox o nome da turma(letraturma) ele vai listar na List o ano da turma, a letra para cada area :X´ ou seja aparece o seguinte na list: A-3-Inf A-3-Elect o problema e que eu so tenho A-3-Inf :X alguem sabe porque esta a mostrar um ano e uma letra para cada area ? :x
anolsi Posted May 6, 2009 at 12:55 PM Report #261840 Posted May 6, 2009 at 12:55 PM Na consulta SQL falta-te relacionar a chave primária com a externa, ou seja relacionar as duas tabelas. "Nós somos o que fazemos repetidamente, a excelência não é um feito, e sim, um hábito."Não respondo a questões por PM que possam ser colocadas no fórum!
gadNY Posted May 6, 2009 at 01:29 PM Author Report #261848 Posted May 6, 2009 at 01:29 PM como assim, nao percebi :x
amiloM1425 Posted May 6, 2009 at 02:30 PM Report #261862 Posted May 6, 2009 at 02:30 PM Bem, não sei se percebi muito bem o teu problema, mas vamos lá então. Para já vamos esclarecer alguns pontos: Inf - É o que tu chamas área, certo? 3 - É o ano da turma? A - É a turma? Partindo do principio que assim é, na tua ComboBox queres algo do género ? Turma 3A Inf Turma 3B Elec Turma 1C Inf etc... Partindo do principio que é isso que queres, presumo que tenhas na tua tabela turmas uma chave estrangeira da tabela areas, de modo a que saibas a que área a turma pertence. Portanto na tua consulta tens de ligar as duas tabelas através dessa chave estrangeira. Ficaria assim: SELECT nometurma,anoturma,nomearea FROM turmas, areas WHERE nometurma = @letraturma AND turmas.fk_area=areas.pk_area
gadNY Posted May 6, 2009 at 02:47 PM Author Report #261865 Posted May 6, 2009 at 02:47 PM sim, eu tenho tres combos, uma para escolher a area, outra a turma e outra o ano. ao fazer a pesquisa por uma combo(ex:turma) queria que mostra-se todas as turmas com essa letra e respectivos anos e areas. mas se eu tiver so uma turma "A" do 3 ano e da area de informatica ele nao vai mostrar apenas isso, associa uma turma a cada area existente , ou seja vai apresentar: A 3 informatica A 3 electronica mas a A 3 electronica nao existe, ele associa uma turma a todas as areas que existem
amiloM1425 Posted May 6, 2009 at 03:08 PM Report #261870 Posted May 6, 2009 at 03:08 PM hmm ok, já percebi Se puderes mostrar um diagrama da tua BD ou a estrutura das 2 tabelas (turmas e areas) seria mais fácil ajudar-te. Mas bom, uma forma é criares uma consulta para cada "filtro" (ano, turma, área) que associavas ao evento SelectedIndexChanged das ComboBox. Em que as consultas ficariam desta forma: - Para o ano: SELECT nometurma,anoturma,nomearea FROM turmas, areas WHERE anoturma= @anoturma AND turmas.fk_area = areas.pk_area - Para a turma: SELECT nometurma,anoturma,nomearea FROM turmas, areas WHERE nometurma= @nometurma AND turmas.fk_area = areas.pk_area - Para a area: SELECT nometurma,anoturma,nomearea FROM turmas, areas WHERE turmas.fk_area = @fk_area AND turmas.fk_area = areas.pk_area Ao juntares "turmas.fk_area = areas.pk_area" isto à consulta estás a ligar as 2 tabelas, a tabela turmas e a tabela areas. Como não o estás a fazer a tua consulta devolve-te tudo o que tens nas 2 tabelas.
gadNY Posted May 6, 2009 at 03:29 PM Author Report #261873 Posted May 6, 2009 at 03:29 PM pois, mas eu so quero que na listbox apareca: nomedoaluno - letradaturma-anodaturma-areadaturma. e ele esta a apresentar tudo, o problema e que apresenta 1 nomedealuno,letradaturma, anodaturma para cada areadaturma existente na BD :x
amiloM1425 Posted May 6, 2009 at 03:44 PM Report #261876 Posted May 6, 2009 at 03:44 PM Sem ver a estrutura da tua BD é difícil ajudar-te a construir a consulta que te devolva o que queres. Mas pelo que vejo é realmente um problema de falta de uso de chaves estrangeiras para relacionares as tabelas.
gadNY Posted May 6, 2009 at 04:01 PM Author Report #261880 Posted May 6, 2009 at 04:01 PM http://img365.imageshack.us/img365/9978/semttuloauk.png esta ai o diagrama da bd
Mxix Posted May 7, 2009 at 03:14 AM Report #262026 Posted May 7, 2009 at 03:14 AM Boas, na query SQL tens que fazer o JOIN das tabelas, e indicar qual a chave de ligação, chave estrangeira, SELECT nometurma,anoturma,nomearea FROM turmas as t JOIN areas as a ON a.id_area = t.id_area WHERE nometurma = @letraturma se não indicares que é um JOIN e indicares a Chave estrangeira o SQL cria as n*m possibilidades entre as tabelas. em vez de 1 para 1 como é o caso. Espero ter ajudado.
gadNY Posted May 7, 2009 at 10:06 AM Author Report #262063 Posted May 7, 2009 at 10:06 AM e' mesmo isso, ja esta tudo certo : D so uma ultima pergunta, com os INSERT's DELETE's e UPDATE's vai se passar o mesmo ? e se tiver dois campos id de duas outras tabelas ? :/
gadNY Posted May 8, 2009 at 09:06 AM Author Report #262282 Posted May 8, 2009 at 09:06 AM SqlConnection conn = new SqlConnection(connectionString); SqlCommand cmd = new SqlCommand("INSERT INTO utilizadores VALUES (@nome,@username,@password)", conn); conn.Open(); cmd.Parameters.AddWithValue("@nome", txt_nome.Text); cmd.Parameters.AddWithValue("@username", txt_user.Text); cmd.Parameters.AddWithValue("@password",txt_pass.Text); cmd.ExecuteNonQuery(); eu tenho isto dentro de um try, que esta dentro de um if, se guardar os ficheiros ele vai mostrar uma messagebox, o problema e que ele faz tudo, mostra a messagebox mas nao e esta a inserir na base de dados, eu acho que o problema esta no insert, mas nao consigo encontrar o erro :X tambem ja fiz o insert assim: ("INSERT INTO utilizadores(nome,username,password) VALUES (@nome,@username,@password) a tabela utilizadores tem mais campos, mas todos os outros permitem NULL.
amiloM1425 Posted May 8, 2009 at 01:24 PM Report #262346 Posted May 8, 2009 at 01:24 PM Tens o insert dentro de uma transacção? Se sim, não te esqueceste de fazer commit?
Mxix Posted May 9, 2009 at 01:00 PM Report #262611 Posted May 9, 2009 at 01:00 PM A chave primária está a incrementar automaticamente? 😕 no Try Catch, cria uma label ou usa uma label que tenhas, so pra ver qual o erro do SQL. Try{//o teu codigo } Catch (Exception e) { Label1.Text = e.ToString(); } Finnally{ conn.Close(); }
the one Posted May 11, 2009 at 10:46 AM Report #262966 Posted May 11, 2009 at 10:46 AM Ele mandou agardecer 😕
gadNY Posted May 13, 2009 at 10:23 AM Author Report #263738 Posted May 13, 2009 at 10:23 AM pessoal, continuo com a mesma duvida :X ao fazer um select a uma tabela que tem campos de ligacao ele mostra os registo para cada campo da outra ex: tabela turmas(A, 🙂 tabela areas(inf, elec) ou seja, eu tenho uma turma A de elec por exemplo, mas ao fazer o select aparece A- elec e A- inf :x esta a ligar a turma a cada campo da outra tabela :x SELECT nometurma,anoturma,nomearea FROM turmas, areas WHERE anoturma= @anoturma AND turmas.fk_area = areas.pk_area ja tentei isto e nao resolveu :x alguem sabe como ligar as duas tabelas e associar direito ? :x
M6 Posted May 13, 2009 at 01:08 PM Report #263806 Posted May 13, 2009 at 01:08 PM Isto não tem nada a ver com C# mas sim com bases de dados. Mostra lá o modelo de dados, incluindo as chaves estrangeiras. 10 REM Generation 48K! 20 INPUT "URL:", A$ 30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50 40 PRINT "404 Not Found" 50 PRINT "./M6 @ Portugal a Programar."
gadNY Posted May 13, 2009 at 01:47 PM Author Report #263819 Posted May 13, 2009 at 01:47 PM esta aí a bd :X
M6 Posted May 13, 2009 at 01:51 PM Report #263825 Posted May 13, 2009 at 01:51 PM A query SELECT nometurma,anoturma,nomearea FROM turmas, areas WHERE anoturma= @anoturma AND turmas.fk_area = areas.pk_area devolve-te todas as relações entre turmas e áreas do ano indicado (@anoturma). Logo é normal que A- elec e A- inf apareçam dado que essas relações existem. Se necessitas de algo mais especifico vais ter de restringir mais a query, aplicando mais critérios no filtro. acontece que nos teus dados existe uma 10 REM Generation 48K! 20 INPUT "URL:", A$ 30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50 40 PRINT "404 Not Found" 50 PRINT "./M6 @ Portugal a Programar."
gadNY Posted May 13, 2009 at 01:54 PM Author Report #263827 Posted May 13, 2009 at 01:54 PM pois, mas nao exite um A elec, apenas existe um A inf . como posso restringir ? :x SELECT nometurma,anoturma,nomearea FROM turmas as t JOIN areas as a ON a.id_area = t.id_area WHERE nometurma = @letraturma usei isto e nao esta a funcionar na mesma :x
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now