Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

rlabres

[Resolvido] Transformar colunas em linha

Recommended Posts

Olá,

 

Espero que vocês possam me ajudar.

 

Tenho um banco de dados em Access para controlar os pedidos de compra, e em uma consulta preciso mostrar o item apenas uma vez com as suas quantidades e respectivos fornecedores (o mesmo item pode ter mais de um fornecedor.

 

Exemplo:

 

Na tabela tenho os dados assim:

 

Item | Descrição | Fornecedor | Quantidade |

001 Parafuso Loja do Zé 100

001 Parafuso Loja do João 50

002 Rosca Loja do Zé 150

 

 

Preciso que a consulta retorne assim:

 

Item | Descrição | Resumo |

001 Parafuso Loja do Zé, 100 / Loja do João, 50

002 Rosca Loja do Zé,150

 

 

Espero ter sido conseguido expressar minha dúvida, e que vocês possam me ajudar.

 

Desde já obrigado.

 

Rodrigo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Daniel, obrigado pela dica, mas uma consulta de referência cruzada não atende os requisitos de concatenar os dados em linhas, como eu especifiquei na dúvida abaixo.

 

A única maneira que achei de fazer isso com Access foi utilizando VBA.

Na verdade não achei resposta a dúvida em nenhum site brasileiro, e apelei para sites gringos e consegui a resposta com uma função bem simples.

 

Segue abaixo a função para estudo e para que precisar dela na prática:

 

Public Function Conc(Fieldx, Identity, Value, Source) As Variant

Dim cnn As ADODB.Connection

Dim rs As ADODB.Recordset

Dim SQL As String

Dim vFld As Variant

 

Set cnn = CurrentProject.Connection

Set rs = New ADODB.Recordset

vFld = Null

 

SQL = "SELECT [" & Fieldx & "] as Fld" & _

" FROM [" & Source & "]" & _

" WHERE [" & Identity & "]=" & Value

 

' open recordset.

rs.Open SQL, cnn, adOpenForwardOnly, adLockReadOnly

 

' concatenate the field.

Do While Not rs.EOF

If Not IsNull(rs!Fld) Then

vFld = vFld & ", " & rs!Fld

End If

rs.MoveNext

Loop

' remove leading comma and space.

vFld = Mid(vFld, 3)

 

Set cnn = Nothing

Set rs = Nothing

 

' return concatenated string.

Conc = vFld

End Function

 

 

Você só precisa criar um módulo e chamar a função em uma consulta usando um comando como:

 

campo1: Conc("campo1";"cod";[cod];"tabela1")

 

note que você não precisa alterar nada na função e usa apenas a consulta para definir os campos que quer concatenar.

 

Segue o link do site original em inglês, com arquivos de exemplo. Se instalar o arquivo e funcionar, e quando fizer igual não funcionar, verifique se as referências de biblioteca estão ativadas (Dentro do móludo).

 

Grato.

 

Rodrigo.

 

Faz uma consulta de referência cruzada...

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.