• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

koelho_807

SQL Subconsultas

7 mensagens neste tópico

Boas

Agora com o final do ano e com projectos para apresentar tou devolta de um trbalho com base de dados.

O erro que me da é que as subconsultas so podem devolver no máximo um registo. E no meu caso é mais que um registo. Existe algum comando ou forma que possa dar a volta por cima?

Explicação do codigo: Este codigo vai a tabela disciplinas buscar o nome da disciplina de um determinado  professor, numa tabela professor_disciplinas.

Connect.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\Dados.mdb"
        Connect.Open()
        'Disciplina
        Sqltext = "Select Distinct(nome) From T_Disciplina " _
                    & "where cod_disciplina = (Select cod_disciplina From T_Professor_Disciplina " _
                                             & "where cod_professor = " & professor & ")"

        Adaptador = New OleDb.OleDbDataAdapter(Sqltext, Connect)
        Adaptador.Fill(Dados_Disciplina, "T_Disciplina, T_Professor_Disciplina")
        Connect.Close()
        max_disciplina = Dados_Disciplina.Tables("T_Disciplina").Rows.Count

        For i = 0 To max_disciplina - 1
            cbx_disciplina.Items.Add(Dados_Disciplina.Tables("T_Disciplina").Rows(i).Item(0))
        Next

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O teu dados disciplina é o q? uma datatable?

Se retornares mais do q uma tabela podes fazer o adapter.fill a um dataset, e ficam lá as tabelas todas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

sim dados disciplina é "New DataSet". Acho que é o que eu tenho daptador.Fill(Dados_Disciplina, "T_Disciplina").

ja agora eu posso utilizar esta expressão: daptador.Fill(Dados_Disciplina, "T_Disciplina, T_Professor_Disciplina") ?? é valida?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Acho q não, a tua query é q tem q devolver 2 tabelas.

Podes fazer uma stored procedure para isso, é melhor.

Fazes o select a uma e o select a outra na mesma stored procedure.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não percebi muito bem :S (sou novo na base de dados)

pelo que percebi é mais ou menos isto, so que penso que isto nao é possivel:

Sqltext = "Select cod_disciplina From T_Professor_Disciplina " _
                   & "where cod_professor = " & professor & ")"
Adaptador = New OleDb.OleDbDataAdapter(Sqltext, Connect)
        Adaptador.Fill(Dados_Disciplina, "T_Professor_Disciplina")
max_disciplina = Dados_Disciplina.Tables("T_Professor_Disciplina").Rows.Count

For i = 0 To max_disciplina - 1
            Sqltext = "Select Distinct(nome) From T_Disciplina " _
                    & "where cod_disciplina = " & Dados_Disciplina.Tables("T_Disciplina").Rows(i).Item(0)
    Adaptador = New OleDb.OleDbDataAdapter(Sqltext, Connect)
            Adaptador.Fill(Dados_Disciplina, "T_Professor_Disciplina")
        Next

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois mas ainda nao dei isso :S Resolvi da seguinte forma:

'Disciplina
        Connect.Open()
        Sqltext = "Select cod_disciplina From T_Professor_Disciplina " _
                & "where cod_professor = " & professor

        Adaptador = New OleDb.OleDbDataAdapter(Sqltext, Connect)
        Adaptador.Fill(Dados_Disciplina, "T_Professor_Disciplina")



        max_disciplina = Dados_Disciplina.Tables("T_Professor_Disciplina").Rows.Count

        For i = 0 To max_disciplina - 1
            Sqltext = "Select nome From T_Disciplina " _
                    & "where cod_disciplina = " & Dados_Disciplina.Tables("T_Professor_Disciplina").Rows(i).Item("cod_disciplina")

            Comando.CommandText = Sqltext
            Comando.Connection = Connect
            nome_disciplina = Comando.ExecuteScalar

            cbx_disciplina.Items.Add(nome_disciplina)
        Next

        

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora