SELECT DADOS
alguem pode me ajudar ? estou fazendo uma consulta entre 4 tabelas e com um filtro dados, abaixo segue a minha consulta:
CRITERIO= "SELECT C.*, T.*, I.*, P.* " & _
" FROM ((Contrato C " & _
" INNER JOIN Trabalhador T On C.IDTrabalhador = T.IDTrabalhador)" & _
" INNER JOIN Imovel I On C.IDImovel = I.IDImovel)" & _
" INNER JOIN Proprietario P ON I.IDProp = P.IDProp " & _
" WHERE C.Situacao='ATIVO' or C.Situacao='AGUARDANDO' and " & _
" CDate(C.VENCIMENTO) < " & CDate(Date)
ou seja preciso selecionar os dados 'ATIVO' e 'AGUARDANDO' onde a data do vencimento deverá ser menor que a data atual, alguem pode me ajudar...[S61]
CRITERIO= "SELECT C.*, T.*, I.*, P.* " & _
" FROM ((Contrato C " & _
" INNER JOIN Trabalhador T On C.IDTrabalhador = T.IDTrabalhador)" & _
" INNER JOIN Imovel I On C.IDImovel = I.IDImovel)" & _
" INNER JOIN Proprietario P ON I.IDProp = P.IDProp " & _
" WHERE C.Situacao='ATIVO' or C.Situacao='AGUARDANDO' and " & _
" CDate(C.VENCIMENTO) < " & CDate(Date)
ou seja preciso selecionar os dados 'ATIVO' e 'AGUARDANDO' onde a data do vencimento deverá ser menor que a data atual, alguem pode me ajudar...[S61]
Só está faltando um parenteses amigo!
Tente desta forma
CRITERIO= "SELECT C.*, T.*, I.*, P.* " & _
" FROM ((Contrato C " & _
" INNER JOIN Trabalhador T On C.IDTrabalhador = T.IDTrabalhador)" & _
" INNER JOIN Imovel I On C.IDImovel = I.IDImovel)" & _
" INNER JOIN Proprietario P ON I.IDProp = P.IDProp " & _
" WHERE (C.Situacao='ATIVO' or C.Situacao='AGUARDANDO') and " & _
" CDate(C.VENCIMENTO) < " & CDate(Date)
Tente desta forma
Olha só, com os () "(C.Situacao='ATIVO' or C.Situacao='AGUARDANDO')"
a seleção ATIVO e AGUARDANDO não é feita compreta, ja sem os parenteses a seleção é feita, mas o detalhe é que a seleção da data não fica correta, ou seja alguns registros a data não corretamente, quando pesso uma data acima ele me retorna alguns com data inferior e vice e versa, ja tentei colocar as seguintes linha:
[txt-color=#ff0000]" And C.Vencimento < #" & CDate(Date) & "#"
" And CDate(C.Vencimento) - " & CDate(Date) & " < 0"
" And C.Vencimento < #" & Format$(Date,"dd/mm/yyyy") & "#"[/txt-color]
ja inverti as condições mas não funciona a questão só esta na data, o campo da Tabela é do tipo DATA/HORA e o formato que uso e 'dd/mm/yyyy'
a seleção ATIVO e AGUARDANDO não é feita compreta, ja sem os parenteses a seleção é feita, mas o detalhe é que a seleção da data não fica correta, ou seja alguns registros a data não corretamente, quando pesso uma data acima ele me retorna alguns com data inferior e vice e versa, ja tentei colocar as seguintes linha:
[txt-color=#ff0000]" And C.Vencimento < #" & CDate(Date) & "#"
" And CDate(C.Vencimento) - " & CDate(Date) & " < 0"
" And C.Vencimento < #" & Format$(Date,"dd/mm/yyyy") & "#"[/txt-color]
ja inverti as condições mas não funciona a questão só esta na data, o campo da Tabela é do tipo DATA/HORA e o formato que uso e 'dd/mm/yyyy'
Tenta assim:
CRITERIO= "SELECT C.*, T.*, I.*, P.* " & _
" FROM ((Contrato C " & _
" INNER JOIN Trabalhador T On C.IDTrabalhador = T.IDTrabalhador)" & _
" INNER JOIN Imovel I On C.IDImovel = I.IDImovel)" & _
" INNER JOIN Proprietario P ON I.IDProp = P.IDProp " & _
" WHERE (C.Situacao='ATIVO' and CDate(C.VENCIMENTO) < " & CDate(Date) & ")" & _
" OR (CDate(C.VENCIMENTO) < " & CDate(Date) & " and C.Situacao='AGUARDANDO')"
CRITERIO= "SELECT C.*, T.*, I.*, P.* " & _
" FROM ((Contrato C " & _
" INNER JOIN Trabalhador T On C.IDTrabalhador = T.IDTrabalhador)" & _
" INNER JOIN Imovel I On C.IDImovel = I.IDImovel)" & _
" INNER JOIN Proprietario P ON I.IDProp = P.IDProp " & _
" WHERE (C.Situacao='ATIVO' and CDate(C.VENCIMENTO) < " & CDate(Date) & ")" & _
" OR (CDate(C.VENCIMENTO) < " & CDate(Date) & " and C.Situacao='AGUARDANDO')"
Ainda não funcionou...
Bom testei somento o filtro data, e onde notei que realmente o problema e só na data, então fiz o seguinte:
[txt-color=#ff0000]" WHERE C.01/01/2006 < #" & CDate(04/12/2006) &"#"[/txt-color]
Olha só, percedi algo estranho, no formato da data por exemplo.
O filtro era pra retornar de 04/12/2006 para traz, mas o mesmo retorna de 12/05/2006 para traz, aterei a data do sistema para um dia a mais, e me retornou 12/06/2006 para traz, ou seja aumentei um dia no sistema e retornou com um mês de diferença para mais....
O que pode ser isso, sera um BUG do [txt-color=#3333ff]CData[/txt-color].
Em uma outra rotina ele funciona como para um preenchimento de um MSFlexGrid.
While Not TBContrato.EOF
DTV = TBContrato("Vencimento")
If Not DTV = "" Then ' se o campo não estiver vazio
If TBContrato("Situacao") = "ATIVO" And CDate(TBContrato("Vencimento")) < CDate(Date) Then
NCont = NCont + 1 ' Aqui ele faz a contage dos registros
coloco aqui as instruçao para o preenchimento do MSFlexGrid
End If
End I
TBContrato.MoveNext
Wend
apesar que assim funciona eu terei que ter mais um conponente em meu projeto e mais intruções, é por isso que estou pedindo SOS...
Bom testei somento o filtro data, e onde notei que realmente o problema e só na data, então fiz o seguinte:
[txt-color=#ff0000]" WHERE C.01/01/2006 < #" & CDate(04/12/2006) &"#"[/txt-color]
Olha só, percedi algo estranho, no formato da data por exemplo.
O filtro era pra retornar de 04/12/2006 para traz, mas o mesmo retorna de 12/05/2006 para traz, aterei a data do sistema para um dia a mais, e me retornou 12/06/2006 para traz, ou seja aumentei um dia no sistema e retornou com um mês de diferença para mais....
O que pode ser isso, sera um BUG do [txt-color=#3333ff]CData[/txt-color].
Em uma outra rotina ele funciona como para um preenchimento de um MSFlexGrid.
While Not TBContrato.EOF
DTV = TBContrato("Vencimento")
If Not DTV = "" Then ' se o campo não estiver vazio
If TBContrato("Situacao") = "ATIVO" And CDate(TBContrato("Vencimento")) < CDate(Date) Then
NCont = NCont + 1 ' Aqui ele faz a contage dos registros
coloco aqui as instruçao para o preenchimento do MSFlexGrid
End If
End I
TBContrato.MoveNext
Wend
apesar que assim funciona eu terei que ter mais um conponente em meu projeto e mais intruções, é por isso que estou pedindo SOS...
Há, ja verifiquei as configurações regionais, mas estão normais formato dd/mm/yyyy, todas as minha aplicações eu costumo trabalhar com esse formato.
Access??
se o o banco for access passe a data no formato mm/dd/yyyy!
Tenta assim:
" WHERE C.01/01/2006 < #" & CDate(Format(Date,"mm/dd/yyyy")) & "#"
ou assim, sem o CDate.
" WHERE C.01/01/2006 < #" & Format(Date,"mm/dd/yyyy") & "#"
se o o banco for access passe a data no formato mm/dd/yyyy!
Tenta assim:
" WHERE C.01/01/2006 < #" & CDate(Format(Date,"mm/dd/yyyy")) & "#"
ou assim, sem o CDate.
" WHERE C.01/01/2006 < #" & Format(Date,"mm/dd/yyyy") & "#"
Olha só na quele mesmo dia eu verifiquei que alterando o dia da data do sistema verifiquei que a cada dia que aumentava ele me retornava com com um mes a mais então resolvi inverter o formato e deu certo, como voce mesmo escreveu neste topico, valeu..., na quele mesmo dia tentei responder esse topico mas a pagina saiu do ar, mas mesmo assim valeu, valeu mesmo...
HáÂÂÂ'antes de fechar este topico, porque isso acontece ?,é só com MDB nas consultas SQL ?, e onde posso encontrar uma lista completa dos comandos SQL, tipo SELECT, DELETE, WHERE etc...
HáÂÂÂ'antes de fechar este topico, porque isso acontece ?,é só com MDB nas consultas SQL ?, e onde posso encontrar uma lista completa dos comandos SQL, tipo SELECT, DELETE, WHERE etc...
Tópico encerrado , respostas não são mais permitidas