SUBCONSULTA PROBLEMATICA

IRENKO 06/03/2013 16:46:26
#420042
Nessa subconsulta esta dando a msg de erro para o item em negrito abaixo.

(O item não pode ser encontrado na coleção correspondente ao nome ou ao ordinal solicitado)

onde estou errando?????

mSql = [Ô] SELECT Entrada.*, (SELECT Comissao.Controle FROM Comissao WHERE val(Entrada.Id) = val(Comissao.Controle)) [Ô] + _
[Ô] FROM Entrada [Ô] + _
[Ô] ORDER BY Entrada.Status;[Ô]


With RdsGeral
.CursorLocation = adUseClient
.Open mSql, ConexaoContrato, adOpenDynamic, adLockOptimistic

Do While Not .EOF
Items !Contrato, Format(!Valor, [Ô]#,##0.00[Ô]), !CLIENTE, !PComissao, !Status, !ID, ![txt-color=#e80000]Controle[/txt-color]

.MoveNext
If Err.Number <> 0 Then Exit Do
Loop
.Close
Set RdsGeral = Nothing
End With
LLAIA 06/03/2013 17:14:33
#420048
Resposta escolhida
Tente isto:

mSql = [Ô] SELECT Entrada.*, (SELECT Comissao.Controle  FROM Comissao WHERE val(Entrada.Id) = val(Comissao.Controle)) as Controle  [Ô] + _
[Ô] FROM Entrada [Ô] + _
[Ô] ORDER BY Entrada.Status;[Ô]
IRENKO 07/03/2013 07:23:31
#420070
LLAIA, com a sua sugestão deu esse erro:


(no maximo um registro pode ser retornado por esta subconsulta)

Que coisa!!!!
IRENKO 07/03/2013 09:09:01
#420084
O prblema é o seguinte:

eu quero carregar todos os campos da tabela Entrada e tambem carregar o campo Controle da tabela comissao, independente se existe na tabela Entrada.

LLAIA 07/03/2013 10:20:39
#420091
Tente isto:

mSql = [Ô] SELECT Entrada.*, Comissao.Controle [Ô] + _
[Ô] FROM Entrada right join Comissao ON Entrada.Id = Comissao.Controle [Ô] + _
[Ô] ORDER BY Entrada.Status;[Ô]
IRENKO 07/03/2013 10:32:09
#420092
quase deu certo!! Carregou normalmente, porem na tabela Entrada existe um ID que não tem na tabela Comissao, esse tambaem deveria ter carregado independente da inexistencia. Mudei a sql conforme abaixo:

mSql = [Ô] SELECT Entrada.Contrato,Entrada.Id,Entrada.Valor,Entrada.PComissao,Entrada.Cliente,Entrada.Status, Comissao.Controle [Ô] + _
[Ô] FROM Entrada RIGHT JOIN Comissao ON Entrada.Id = val(Comissao.Controle) [Ô] + _
[Ô] GROUP BY Entrada.Contrato,Entrada.Id,Entrada.Valor,Entrada.PComissao,Entrada.Cliente,Entrada.Status,Comissao.Controle ORDER BY Entrada.Contrato;[Ô]

o que pode ser feito?
LLAIA 07/03/2013 13:47:47
#420114
Tente o FULL OUTER JOIN:

mSql = [Ô] SELECT Entrada.Contrato,Entrada.Id,Entrada.Valor,Entrada.PComissao,Entrada.Cliente,Entrada.Status, Comissao.Controle [Ô] + _
[Ô] FROM Entrada FULL OUTER JOIN Comissao ON Entrada.Id = val(Comissao.Controle) [Ô] + _
[Ô] GROUP BY Entrada.Contrato,Entrada.Id,Entrada.Valor,Entrada.PComissao,Entrada.Cliente,Entrada.Status,Comissao.Controle ORDER BY Entrada.Contrato;[Ô]


Dá uma lida nisso cara: http://office.microsoft.com/en-us/access-help/creating-an-outer-join-query-in-access-HA001034555.aspx

Do jeito que esse banco tá, de repente vc vai precisar saber mais.
IRENKO 07/03/2013 14:41:49
#420117
Resolvido assim:

mSql = [Ô] SELECT Entrada.Contrato,Entrada.Id,Entrada.Valor,Entrada.PComissao,Entrada.Cliente,Entrada.Status, Comissao.Controle [Ô] + _
[Ô] FROM Entrada LEFT JOIN Comissao ON Entrada.Id = val(Comissao.Controle) [Ô] + _
[Ô] WHERE Entrada.Status = [ô]Aberto[ô] GROUP BY Entrada.Contrato,Entrada.Id,Entrada.Valor,Entrada.PComissao,Entrada.Cliente,Entrada.Status,Comissao.Controle ORDER BY Entrada.Contrato;[Ô]

Valeu LLAIA!!!!!
Tópico encerrado , respostas não são mais permitidas