Fazer uma subconsulta de uma View

Olá pessoal, fiz uma View no banco de dados e depois criei uma consulta no SC, executo e funciona tudo belezinha.
Após isso criei outra consulta do tipo Formato Livre, em seguida eu fiz uma Subconsulta chamando a View, e da o seguinte erro:

Fatal error: Cannot use object of type grid_view_boletim_apl as array in C:\Program Files…

O SC não faz subconsultas de VIEW’s ?

Pois testei com uma consulta criada de uma tabela normal, fiz uma subconsulta dela e funciona! Mas quando é uma consulta criada de uma View não funciona a subconsulta.

Alguém já passou por isso?

Obrigado a todos!

Faz um teste, você criou uma consulta em formato LIVRE, faz ela normal e chama a sub-consulta e veja se vai dar certo, pode ser algum erro no seu formato livre.

Abraço.

Descobri que o erro da por o tipo de tabela ser uma View, sendo assim criei uma tabela no banco do mesmo jeito da view e depois coloquei o código SQL no comando SQL da tabela no próprio SC. Funcionou! Agora apareceu outro porém!

Imagine esse comando JOIN:

Estou criando um select avançado em 5 tabelas diferente. só que eu tenho uma chave estrangeira em 3 tabelas e essa chave é igual! Sendo assim da ambiguidade.
Para se resolver a ambiguidade é só referenciar cada chave em suas respectivas tabelas
O problema que quando dou um GROUP BY esta retornando dados duplicados. Isso mesmo usando o SELECT DISTINCT.

Vou mostrar:

SELECT DISTINCT M.IDANOLETIVO, M.IDALUNO, P.IDDISCIPLINA, F.IDDISCIPLINA, N.IDDISCIPLINA, M.IDSERIE, M.IDTURMA, M.IDTURNO, P_1BIM, P_2BIM, P_3BIM, P_4BIM, F_1BIM, F_2BIM, F_3BIM, F_4BIM, N_1BIM, N_2BIM, N_3BIM, N_4BIM, MS1, MS2, MDS1, MDS2, REC12, REC34, MA, PF, MFA
FROM ALUNO A
INNER JOIN MATRICULA M ON A.IDALUNO = M.IDALUNO
INNER JOIN PRESENCA P ON A.IDALUNO = P.IDALUNO
INNER JOIN FALTAS F ON A.IDALUNO = F.IDALUNO
INNER JOIN NOTAS N ON A.IDALUNO = N.IDALUNO
WHERE A.IDALUNO = ‘6’
GROUP BY P.IDDISCIPLINA

Sendo assim os campos:

P.IDDISCIPLINA, F.IDDISCIPLINA, N.IDDISCIPLINA

       1                          5                      5
       2                          5                      5
       3                          5                      5
       4                          5                      5
       5                          5                      5
       6                          5                      5

Veja que ele só agrupa o P.IDDISCIPLINA, agora se eu fizer assim:
GROUP BY P.IDDISCIPLINA, F.IDDISCIPLINA, N.IDDISCIPLINA
Ele mostra todos os dados repetidos.

Pode me ajudar nisso?

Abração!

Freddy, faz assim:
SELECT M.IDANOLETIVO, M.IDALUNO, P.IDDISCIPLINA, F.IDDISCIPLINA, N.IDDISCIPLINA, M.IDSERIE, M.IDTURMA, M.IDTURNO, P_1BIM, P_2BIM, P_3BIM, P_4BIM, F_1BIM, F_2BIM, F_3BIM, F_4BIM, N_1BIM, N_2BIM, N_3BIM, N_4BIM, MS1, MS2, MDS1, MDS2, REC12, REC34, MA, PF, MFA
FROM ALUNO A
INNER JOIN MATRICULA M ON A.IDALUNO = M.IDALUNO
INNER JOIN PRESENCA P ON A.IDALUNO = P.IDALUNO
INNER JOIN FALTAS F ON A.IDALUNO = F.IDALUNO
INNER JOIN NOTAS N ON A.IDALUNO = N.IDALUNO
WHERE A.IDALUNO = ‘6’
GROUP BY M.IDANOLETIVO, P.IDDISCIPLINA

Tira o DISTINCT e coloca pra ele separar pra você no GROUP BY,

um caso semelhante ao seu:
http://forum.imasters.com.br/topic/377714-selecionar-registros-sem-duplicar/

Olá Jailton, eu já tinha visto esse link e não resolveu! Geralmente eu uso o DISTINCT justamente para não duplicar, e o GROUP BY para selecionar apenas os grupos existentes. Não entendo o porquê ele ordena apenas:
P.IDDISCIPLINA corretamente caso eu coloque apenas o GROUP BY com apenas o P.IDDISCIPLINA.
Se eu colocar o GROUP BY com os 3 campos (Ex: GROUP BY P.IDDISCIPLINA, F.IDDISCIPLINA, N.IDDISCIPLINA) ele duplica tudo.

O que quero é que apareça assim:

P.IDDISCIPLINA, F.IDDISCIPLINA, N.IDDISCIPLINA

       1                          1                      1
       2                          2                      2
       3                          3                      3
       4                          4                      4
       5                          5                      5
       6                          6                      6

E NÃO assim:

P.IDDISCIPLINA, F.IDDISCIPLINA, N.IDDISCIPLINA

       1                          5                      5       <--- repetindo
       2                          5                      5
       3                          5                      5
       4                          5                      5
       5                          5                      5
       6                          5                      5

Fred,

SELECT M.IDANOLETIVO, M.IDALUNO, P.IDDISCIPLINA, F.IDDISCIPLINA, N.IDDISCIPLINA, M.IDSERIE, M.IDTURMA, M.IDTURNO, P_1BIM, P_2BIM, P_3BIM, P_4BIM, F_1BIM, F_2BIM, F_3BIM, F_4BIM, N_1BIM, N_2BIM, N_3BIM, N_4BIM, MS1, MS2, MDS1, MDS2, REC12, REC34, MA, PF, MFA
FROM ALUNO A
INNER JOIN MATRICULA M ON M.IDALUNO = A.IDALUNO
INNER JOIN PRESENCA P ON  P.IDALUNO = A.IDALUNO
INNER JOIN FALTAS F ON F.IDALUNO = A.IDALUNO
INNER JOIN NOTAS N ON N.IDALUNO = A.IDALUNO 
WHERE A.IDALUNO = '6'
GROUP BY M.IDANOLETIVO, P.IDDISCIPLINA

Leandro

Obrigado pela cooperação Leandro, não entendo porque no GROUP BY tenho que colocar M.IDANOLETIVO. Mesmo assim eu fiz como esta ai e deu os mesmos resultados!

Estou fazendo “GROUP BY P.IDDISCIPLINA, F.IDDISCIPLINA, N.IDDISCIPLINA” porém duplica todos os registros =/ …

Mais alguma sugestão ?

Fred,

Tem como você disponibilizar as tabelas?

Leandro

Pessoal, consegui resolver, olha só o detalhe:

SELECT DISTINCT M.IDANOLETIVO, M.IDALUNO, P.IDDISCIPLINA, F.IDDISCIPLINA, N.IDDISCIPLINA, M.IDSERIE, M.IDTURMA, M.IDTURNO, P_1BIM, P_2BIM, P_3BIM, P_4BIM, F_1BIM, F_2BIM, F_3BIM, F_4BIM, N_1BIM, N_2BIM, N_3BIM, N_4BIM, MS1, MS2, MDS1, MDS2, REC12, REC34, MA, PF, MFA
FROM ALUNO A
INNER JOIN MATRICULA M ON A.IDALUNO = M.IDALUNO
INNER JOIN PRESENCA P ON A.IDALUNO = P.IDALUNO
INNER JOIN FALTAS F ON A.IDALUNO = F.IDALUNO
INNER JOIN NOTAS N ON A.IDALUNO = N.IDALUNO
WHERE A.IDALUNO = ‘6’ AND (P.IDDISCIPLINA = F.IDDISCIPLINA) AND (P.IDDISCIPLINA = N.IDDISCIPLINA)
GROUP BY P.IDDISCIPLINA

Apenas isso resolve esse caso: (P.IDDISCIPLINA = F.IDDISCIPLINA) AND (P.IDDISCIPLINA = N.IDDISCIPLINA).

Apenas um pouco de lógica, pois já que não poderia resolver pelo GROUP BY então eu no WHERE resolvi informar que o F.IDDISCIPLINA e o N.IDDISCIPLINA fosse igual ao GROUP BY P.IDDISCIPINA. Matou a questão… Agora eu tenho 3 chaves estrangeiras em três tabelas diferentes e sem abiguidade alguma e todas sendo corretamente agrupadas.

Resultado:

P.IDDISCIPLINA, F.IDDISCIPLINA, N.IDDISCIPLINA

       1                          1                      1
       2                          2                      2
       3                          3                      3
       4                          4                      4
       5                          5                      5
       6                          6                      6

Obrigado ao Leandro e ao Jailton pela força. Sei que muita gente vai precisar dessas informações ainda.
Abração.

Eu ia sugerir exatamente isso mas como não tinha o BD pra testar, tive medo de passar vergonha, heeheh

O Que me deixa mais arretado com o Scriptcase é que tem coisas que no SQL Builder da certinho mas na aplicação não! É Bug Net Maker?

Né BUG não é MACETE kkkkkkkkkkk

é que vale esta frase “Se emperrar, force. Se quebrar, precisava trocar mesmo…”

Então pessoal,

Se uma query funciona adequadamente no SQL builder e não funciona numa aplicação, o ideal é criar uma View para aquela query. Ao mesmo tempo que você verifica com o suporte o motivo daquela query não funcionar diretamente.

att,
Bernhard Bernsmann