Jump to content

Recommended Posts

Posted
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

Posted

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!

Posted

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

Posted

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

Posted

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.

Posted

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

Posted

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.

Posted

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.

Posted

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 ? :/

Posted
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.

Posted

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();
}
Posted

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

Posted

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."

 

Posted

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."

 

Posted

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.