Jump to content

Grid / Inner Join


magda
 Share

Recommended Posts

Boas,

bem peço desculpa desde já pois não sei se já foi aberto algum tópico a esclarecer a duvida que vou colocar, mas eu não estou a encontrar nada para resolver o meu problema.

então é o seguinte: eu tenho uma Grid que está a ser carregada com o seguinte código:

Public Sub ActualizarGridFraccoes()
        form_fraccoes.DataGridView1.DataSource = Nothing
        da = New SqlDataAdapter
        dt = New DataTable
        ds = New DataSet
        Try
            da = New SqlDataAdapter("SELECT tab_fraccoes.frac_codigo, tab_fraccoes.frac_andar, tab_fraccoes.frac_lado, tab_terceiros.ter_nome, tab_fraccoes.frac_permilagem, tab_fraccoes.frac_quota, tab_periocidade.per_prazo, frac_tipofraccao FROM tab_fraccoes INNER JOIN tab_terceiros ON tab_fraccoes.frac_proprietario = tab_terceiros.ter_numfiscal INNER JOIN tab_periocidade ON tab_fraccoes.frac_periocidade = tab_periocidade.per_codigo WHERE frac_condominio='" & condominio & "'", DB)
            da.Fill(ds, "tab_fraccoes")
            dt = ds.Tables(0)
            form_fraccoes.DataGridView1.Columns.Clear()
            form_fraccoes.DataGridView1.Rows.Clear()
            form_fraccoes.DataGridView1.DataSource = dt
            form_fraccoes.DataGridView1.Columns(0).HeaderText = "Código"
            form_fraccoes.DataGridView1.Columns(1).HeaderText = "Andar"
            form_fraccoes.DataGridView1.Columns(2).HeaderText = "Lado"
            form_fraccoes.DataGridView1.Columns(5).HeaderText = "Permilagem"
            form_fraccoes.DataGridView1.Columns(4).HeaderText = "Quota"
            form_fraccoes.DataGridView1.Columns(3).HeaderText = "Proprietario"
            form_fraccoes.DataGridView1.Columns(7).HeaderText = "Tipo Fracção"
            form_fraccoes.DataGridView1.Columns(6).HeaderText = "Periocidade"
        Catch ex As Exception
            MsgBox("ERROR: " & ex.Message, MsgBoxStyle.OkOnly, "WARNING!")
        End Try
    End Sub

O código está a funcionar 5** o meu problema é que na coluna 7, campo frac_tipofraccao, aparece-me um código. Pois eu na base de dados fiz um Check constraints, e então o campo só aceita os valores 1 ou 2. O que eu quero é que na grid, apareça quando o código é 1 'Habitação' e quando o código é 2 'Comércio'.

A minha base de dados é em sql.

Fico à espera da vossa ajuda.

Cumps,

Link to comment
Share on other sites

mas isso é simples, olha um exemplo...

While dr.Read()
            Dim consultar = "Não"
            Dim administrar = "Não"
            Dim ad = "Não"
            If dr.Item("consultar") = "TRUE" Then consultar = "Sim"
            If dr.Item("administrar") = "TRUE" Then administrar = "Sim"
            If dr.Item("ad") = "TRUE" Then ad = "Sim"
            Me.DataGridView1.Rows.Add(dr.Item("nickname"), dr.Item("numero"), dr.Item("nome"), consultar, administrar, ad)
        End While

mas la esta, eu não preencho a grid como tu....adapta... 😄

"use windows, você merece!"

Link to comment
Share on other sites

Acrescenta um join com a tabela das referências, faz o ON nesse campo e no id das referências e traz a descrição.

Se puderes meter por aqui o modelo de dados era mais fácil de te ajudar.

Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Link to comment
Share on other sites

Obrigada pela a ajuda mas não estou mesmo a perceber o que fazer  😄

bem... a minha tabela tem a seguinte estrutura:

Tab_fraccoes

frac_codigo

frac_andar

frac_lado

frac_permilagem

frac_quota

frac_proprietario

frac_observacoes

frac_condominio

frac_tipofraccao varchar(1) check (frac_tipofraccao='2' or frac_tipofraccao='1')

frac_periocidade

o campo frac_tipofraccao é o que eu quero que apareca na grid com o valor 1 = 'habitaçao' e o valor 2 = 'comercio'

Link to comment
Share on other sites

Ah, espera.

Não tens nenhuma tabela para relacionar.

Sendo assim, podes adoptar o exemplo do duduml que serve o propósito perfeitamente.

Só tens de adaptar um pouco a forma como preenches a datatable para alimentar a datagridview.

Posso também sugerir outra coisa.

Se a base de dados for MSSQL 200x era muito mais fácil preparares a saída com toda a lógica inerente, numa Stored Procedure, onde já é possível utilizar T-SQL e reduz o teu problema a um simples IF.

Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Link to comment
Share on other sites

ok, alem de eu não estar a perceber o código do dumduml vou tentar faze-lo adaptando-o à minha situação. Quando ao SQL, eu estou a trabalhar no SQL Server 2005.

Por isso penso que não consigo resolver isto só com um "IF".

Link to comment
Share on other sites

o que não estas a perceber magda??

eu simpleste crio uma variavel, depois consoante o valor que chega da consulta, atribui um valor a variavel, e depois, coloco o valor da var no datagrid

dim variavel as string
if frac_tipofraccao = "1" then
   variavel = "o que corresponde"
else
  varivael = " o outro" 

form_fraccoes.DataGridView1.Columns(7).HeaderText = variavel

"use windows, você merece!"

Link to comment
Share on other sites

Quando ao SQL, eu estou a trabalhar no SQL Server 2005.

Por isso penso que não consigo resolver isto só com um "IF".

MSSQL 200x significa:

Microsoft SQL Server 2005 / Microsoft SQL Server 2008

Ambos possuem T-SQL, e ambos se resolvem com um "IF" 😄

Comecemos por o início... sabes o que é uma Stored Procedure ?

Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Link to comment
Share on other sites

DumDuml : Mmm okok.. o meu problema era mesmo em adaptar o código que mostras-te.. mas penso que já consegui, além de estar a dar um erro de Connection String e a dizer que a ligação não foi fechada, mas acho que consigo ultrapassar isso, obrigado pela ajuda.

______________

ribeiro55: Não  ?

EDIT:

Até tu me teres perguntado isso e eu fui fazer uma pesquisa pela internet.. e já estou um bocadinho mais dentro do assunto.

Link to comment
Share on other sites

Desculpem lá estar a chatear outra vez, mas continuo sem conseguir resolver o meu problema. Tentei adaptar o código do Dumdum, fazendo o seguinte código:

Public Sub ActualizarGridFraccoes()
        form_fraccoes.DataGridView1.DataSource = Nothing
        da = New SqlDataAdapter
        dt = New DataTable
        ds = New DataSet
        Try
            da = New SqlDataAdapter("SELECT tab_fraccoes.frac_codigo, tab_fraccoes.frac_andar, tab_fraccoes.frac_lado, tab_terceiros.ter_nome, tab_fraccoes.frac_permilagem, tab_fraccoes.frac_quota, tab_periocidade.per_prazo FROM tab_fraccoes INNER JOIN tab_terceiros ON tab_fraccoes.frac_proprietario = tab_terceiros.ter_numfiscal INNER JOIN tab_periocidade ON tab_fraccoes.frac_periocidade = tab_periocidade.per_codigo WHERE frac_condominio='" & condominio & "'", DB)
            da.Fill(ds, "tab_fraccoes")
            dt = ds.Tables(0)
            form_fraccoes.DataGridView1.Columns.Clear()
            form_fraccoes.DataGridView1.Rows.Clear()
            form_fraccoes.DataGridView1.DataSource = dt
            form_fraccoes.DataGridView1.Columns(0).HeaderText = "Código"
            form_fraccoes.DataGridView1.Columns(1).HeaderText = "Andar"
            form_fraccoes.DataGridView1.Columns(2).HeaderText = "Lado"
            form_fraccoes.DataGridView1.Columns(5).HeaderText = "Permilagem"
            form_fraccoes.DataGridView1.Columns(4).HeaderText = "Quota"
            form_fraccoes.DataGridView1.Columns(3).HeaderText = "Proprietario"
            'form_fraccoes.DataGridView1.Columns(7).HeaderText = "Tipo Fracção"
            form_fraccoes.DataGridView1.Columns(6).HeaderText = "Periocidade"
            Try
                DB.Open()
                Command.Connection = DB
                Command.CommandText = "SELECT frac_tipofraccao FROM tab_fraccoes where frac_condominio='" & condominio & "'"
                Dim dr As SqlDataReader = Command.ExecuteReader
                Dim str As String = dr.ToString
                While (dr.Read())
                    If dr.Read = 1 Then
                        form_fraccoes.DataGridView1.Columns(7).HeaderText = "Habitação"
                    Else
                        form_fraccoes.DataGridView1.Columns(7).HeaderText = "Comércio"
                    End If
                    DB.Close()
                End While
            Catch ex As Exception
                DB.Dispose()
            End Try
        Catch ex As Exception
            MsgBox("ERROR: " & ex.Message, MsgBoxStyle.OkOnly, "WARNING!")
        End Try
End Sub

O código parece-me estar correcto, mas quando vou a correr o programa aparece uma mensagem a dizer que que a connection string.

Este código está no modulo e depois é chamado no form_load.

Link to comment
Share on other sites

bem... parece que nunca mais me vejo livre deste codigo..

alguem sabe qual e a propriedade que utilizo para escrever o que quero na linha da grid da coluna (7)???

form_fraccoes.DataGridView1.Columns(7).HeaderText = "Habitação"

Com o codigo acima, fica no Header da coluna, eu queria que ficasse mesmo na grid  😄

Link to comment
Share on other sites

Me.DataGridView1.Rows.Add(valordacoluna0, valordacoluna1, etc)

eu para por titulos as colunas, definir larguras etc, não faço nada como tu....e no meu ver, é mais simples como eu faço... mas pode ser por ser à minha maneira... 😄

"use windows, você merece!"

Link to comment
Share on other sites

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
 Share

×
×
  • 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.