COMO FACO ESSA SQL USANDO DAO 3,51

WEBIER 04/12/2009 17:32:07
#329183
Com a ajuda do amigo(RCMRO) do VBMania consegui chegar até essa SQL:

SQL = [Ô]SELECT prd.DESCRICAO AS var_Desc, prd.CODIGO AS var_codEnt, prd.QUANT_ESTOQUE AS var_Quant, peiult.CUSTO AS var_Custo, peiult.FRETE AS var_Frete, peiult.IMPOSTO_VALOR_COMPRA AS var_ImpCompra, peiult.CUSTO_COMPRA AS var_VlrCompra, peiult.VENDA AS var_VENDA FROM (Produtos AS prd INNER JOIN Produtos_Entrada_Itens AS peiult ON prd.CODIGO = peiult.CODIGO_PRODUTO) INNER JOIN (SELECT pei1.CODIGO_PRODUTO, MAX(pei1.DATA_ENTRADA) AS DATA_ENTRADA, Max(pei1.CODIGO) AS Codigo FROM Produtos_Entrada_Itens AS pei1 WHERE pei1.DATA_ENTRADA between #[Ô] & Format(Mask1, [Ô]mm/dd/yy[Ô]) & [Ô]# and #[Ô] & Format(Mask2, [Ô]mm/dd/yy[Ô]) & [Ô]# GROUP BY pei1.CODIGO_PRODUTO) AS pei ON (peiult.CODIGO_PRODUTO = PEI.CODIGO_PRODUTO) AND (peiult.DATA_ENTRADA = PEI.DATA_ENTRADA) AND (peiult.CODIGO = PEI.Codigo) ORDER BY prd.descricao[Ô]


só que uso DAO3.51 (Access 97) em um projeto de de uns 45 forms... ai se eu mudar para DAO 3.6 esse sql funciona blz, mas começa a dar pau nos meus outros SQL dos outros 45 forms(Erro: bando de dados não reconhecido)...

Como eu faria para fazer essas sub-consultas usando o DAO 3.51 ?
MARCOSLING 04/12/2009 18:54:52
#329189
Resposta escolhida
Que erro ocorre?
WEBIER 04/12/2009 19:55:35
#329192
só que uso DAO3.51 (Access 97) em um projeto de de uns 45 forms... ai se eu mudar para DAO 3.6 esse sql funciona blz, mas começa a dar pau nos meus outros SQL dos outros 45 forms(Erro: bando de dados não reconhecido)...
EDERMIR 04/12/2009 21:13:46
#329194
O erro descrito como BANCO DE DADOS NÃO RECONHECIDO é para o dao 3.5 ou 3.6?

Qual o erro do 3.5?
MARCOSLING 04/12/2009 22:08:43
#329195
Citação:

WEBIER escreveu:
só que uso DAO3.51 (Access 97) em um projeto de de uns 45 forms... ai se eu mudar para DAO 3.6 esse sql funciona blz, mas começa a dar pau nos meus outros SQL dos outros 45 forms(Erro: bando de dados não reconhecido)...



Esse erro ocorre quando a versão do DAO é incompatível com a versão do banco de dados.

Qual é a versão do seu Access?
WEBIER 04/12/2009 22:33:27
#329198
uso DAO 3.51 e Access 97

mas a SQL de cima só funciona se converter meu BD pra Access 2000 e usar DAO 3.60
MARCOSLING 05/12/2009 14:28:57
#329216
Citação:

WEBIER escreveu:
uso DAO 3.51 e Access 97

mas a SQL de cima só funciona se converter meu BD pra Access 2000 e usar DAO 3.60



Isso não faz muito sentido...

Como que essa sql não funciona no access97!
Que erro ocorre quando vc utiliza essa sql no access97?
WEBIER 05/12/2009 14:52:22
#329218
código completo:
Private Sub cmdCONintervalo_Click()
Dim SQL As String
Dim Rs As Recordset

Call ABRIR_BD_SEM_DATA1
SQL = [Ô]SELECT prd.DESCRICAO AS var_Desc, prd.CODIGO AS var_codEnt, prd.QUANT_ESTOQUE AS var_Quant, peiult.CUSTO AS var_Custo, peiult.FRETE AS var_Frete, peiult.IMPOSTO_VALOR_COMPRA AS var_ImpCompra, peiult.CUSTO_COMPRA AS var_VlrCompra, peiult.VENDA AS var_VENDA FROM (Produtos AS prd INNER JOIN Produtos_Entrada_Itens AS peiult ON prd.CODIGO = peiult.CODIGO_PRODUTO) INNER JOIN (SELECT pei1.CODIGO_PRODUTO, MAX(pei1.DATA_ENTRADA) AS DATA_ENTRADA, Max(pei1.CODIGO) AS Codigo FROM Produtos_Entrada_Itens AS pei1 WHERE pei1.DATA_ENTRADA between #[Ô] & Format(Mask1, [Ô]mm/dd/yy[Ô]) & [Ô]# and #[Ô] & Format(Mask2, [Ô]mm/dd/yy[Ô]) & [Ô]# GROUP BY pei1.CODIGO_PRODUTO) AS pei ON (peiult.CODIGO_PRODUTO = PEI.CODIGO_PRODUTO) AND (peiult.DATA_ENTRADA = PEI.DATA_ENTRADA) AND (peiult.CODIGO = PEI.Codigo) ORDER BY prd.descricao[Ô]
Set Rs = BD.OpenRecordset(SQL)
End Sub


usando DAO 3.51 e Access 97 dar o seguinte erro:

Run-time erro [ô]3131[ô]
Erro na sintaxe na clausula FROM


ai quando debugo ele seleciona:
Set Rs = BD.OpenRecordset(SQL)



WEBIER 05/12/2009 15:03:19
#329219
para facilitar mais ainda a compreensão, libeirei o download com as duas versões do BD (97 e 2000)

link:
Clique Aqui
MARCOSLING 05/12/2009 17:26:15
#329225
Citação:


WEBIER escreveu:
para facilitar mais ainda a compreensão, libeirei o download com as duas versões do BD (97 e 2000)

link:
Clique Aqui



O que ocorre, é que o access 2000 faz a [Ô]correção[Ô] na sintaxe, por isso não dá o erro, e tbm é mais compatível com o sql padrão.

No access97, quando vc utiliza uma subquery vc tem que especificar a subquery dentro de colchetes e finalizado com ponto.

veja o trecho que será corrigido:

   
... INNER JOIN [SELECT pei1.CODIGO_PRODUTO, MAX(pei1.DATA_ENTRADA) AS DATA_ENTRADA, Max(pei1.CODIGO) AS Codigo FROM Produtos_Entrada_Itens AS pei1 WHERE pei1.DATA_ENTRADA between #[Ô] & Format(Mask1, [Ô]mm/dd/yy[Ô]) & [Ô]# and #[Ô] & Format(Mask2, [Ô]mm/dd/yy[Ô]) & [Ô]# GROUP BY pei1.CODIGO_PRODUTO]. AS pei ON...


Se vc copiar a sintaxe e colar numa consulta do access 2000, executar a consulta e depois pegar a sintaxe que o access 2000 [Ô]corrigiu[Ô] e executar no access97, vai funcionar.

Só uma observação, o access não segue um sql padrão. se vc migrar para um outro banco de dados pode não funcionar.
WEBIER 05/12/2009 18:03:18
#329227
coloquei os cochetes e deu esse erro:

run-time erro [ô]3078[ô]

O motor de banco de dados Microsoft Jet não encontrou a tabela ou consulta [SELECT pei1.CODIGO_PRODUTO, MAX(pei1.DATA_ENTRADA) AS DATA_ENTRADA, Max(pei1.CODIGO) AS Codigo FROM Produtos_Entrada_Itens AS pei1 WHERE pei1.DATA_ENTRADA between #[Ô] & Format(Mask1, [Ô]mm/dd/yy[Ô]) & [Ô]# and #[Ô] & Format(Mask2, [Ô]mm/dd/yy[Ô]) & [Ô]# GROUP BY pei1.CODIGO_PRODUTO]. Certifique-se de sua existencia e de que seu nome esteja digitado corretamente.
Página 1 de 3 [25 registro(s)]
Tópico encerrado , respostas não são mais permitidas