AJUDAR EM CONSULTA SQL!
bom dia
Jonas ai vc precisa pegar no banco a data de vacina que estiver em branco, terá que colocar no where essa condição
dentro do where vc vai substituir a seleção do perÃodo da vacina e vai colocar isnull(dtvacina), dessa forma ele trará todos os cadastros que não tiverem com a data da vacina lançada
Obs:
Más para isso acontecer no cadastro do boi, a data de vacinação não pode ser obrigatória
Jonas ai vc precisa pegar no banco a data de vacina que estiver em branco, terá que colocar no where essa condição
dentro do where vc vai substituir a seleção do perÃodo da vacina e vai colocar isnull(dtvacina), dessa forma ele trará todos os cadastros que não tiverem com a data da vacina lançada
Obs:
Más para isso acontecer no cadastro do boi, a data de vacinação não pode ser obrigatória
Bom dia alvaro!
Então a data é obrigatória. Para se fazer as comparações ou de alguma outra forma!
Teria que fazer a comparação por ano e por mês também. Porque e vacinado 2x no ano Mês 5 e 11.
1º Comparação
brinco x243 vacino em 2015 em qualquer mês
brinco x243 vacino em 2016 no mês 5 MAS ele não vacino mês 6.
Eu preciso que ele faça essa comparação entre a data incial e final!
Como vou fazer isso?
Então a data é obrigatória. Para se fazer as comparações ou de alguma outra forma!
Teria que fazer a comparação por ano e por mês também. Porque e vacinado 2x no ano Mês 5 e 11.
1º Comparação
brinco x243 vacino em 2015 em qualquer mês
brinco x243 vacino em 2016 no mês 5 MAS ele não vacino mês 6.
Eu preciso que ele faça essa comparação entre a data incial e final!
Como vou fazer isso?
Olha essa resposta que passei para outro membro do forum, ajudando como que se faz uma consulta por dia e mês para buscar aniversário, da para vc adaptar para o que vc precisa, pois tenho todas as opções possÃveis
Desculpa estar de atrapalhando tanto Alvaro mas eu não consegui fazer nada pelo que vc me passo (Nem sei por onde começar).
Da uma olhada que a consulta que faço é por mês e dia e ano, tudo separado, é só substituir o que esta dentro do meu comando pela data que vc precisa
Não vou te passar o comando pronto, não por maldade, pois estou aqui te ajudando desde o começo, más vc precisa entender a lógica de como que funciona o comando, o que ele faz e assim vc vai poder ajustar não só para esse sistema seu, más para os próximos também
O que te passei no tópico já esta pronto, basta vc adaptar para as datas que vc precisa, más aconselho vc a dar uma olha Aqui , esse tópico mostra todas as possibilidades de trabalho com data dentro do vb6, más que os comandos cabem muito bem para o vba, e ai vc pode entender também o que fiz
Repara também que em cima de cada inicio de comando coloquei comentado o perÃodo que estou colocando no comando, vc terá que fazer isso também no que vc precisa
Tenta ai qqer coisa me da um toque
Não vou te passar o comando pronto, não por maldade, pois estou aqui te ajudando desde o começo, más vc precisa entender a lógica de como que funciona o comando, o que ele faz e assim vc vai poder ajustar não só para esse sistema seu, más para os próximos também
O que te passei no tópico já esta pronto, basta vc adaptar para as datas que vc precisa, más aconselho vc a dar uma olha Aqui , esse tópico mostra todas as possibilidades de trabalho com data dentro do vb6, más que os comandos cabem muito bem para o vba, e ai vc pode entender também o que fiz
Repara também que em cima de cada inicio de comando coloquei comentado o perÃodo que estou colocando no comando, vc terá que fazer isso também no que vc precisa
Tenta ai qqer coisa me da um toque
Você está certo alvaro!
Eu tenho que aprender para saber fazer e te agradeço muito por tudo que esta fazendo.
Vamos as perguntas!
1- pergunta
If Format(dtDE.Value, [Ô]mm[Ô]) = Format(dtATE.Value, [Ô]mm[Ô]) And Format(dtDE.Value, [Ô]yyyy[Ô]) = Format(dtATE.Value, [Ô]yyyy[Ô]) Then
Pelo entende (dtDE.Value, [Ô]mm[Ô]) = serial onde fica a data inicial que eu quero coloca? [Ô]mm[Ô] e mês?
(dtDE.Value, [Ô]yyyy[Ô]) = serial onde fica a data final que eu quero coloca? [Ô]yyyy[Ô] e ano?
2- pergunta
Condicao = ComandoSQL ?
3- pergunta
DataParaRelatorioAniversario) = orv.dtvacina
Eu tenho que aprender para saber fazer e te agradeço muito por tudo que esta fazendo.
Vamos as perguntas!
1- pergunta
If Format(dtDE.Value, [Ô]mm[Ô]) = Format(dtATE.Value, [Ô]mm[Ô]) And Format(dtDE.Value, [Ô]yyyy[Ô]) = Format(dtATE.Value, [Ô]yyyy[Ô]) Then
Pelo entende (dtDE.Value, [Ô]mm[Ô]) = serial onde fica a data inicial que eu quero coloca? [Ô]mm[Ô] e mês?
(dtDE.Value, [Ô]yyyy[Ô]) = serial onde fica a data final que eu quero coloca? [Ô]yyyy[Ô] e ano?
2- pergunta
Condicao = ComandoSQL ?
3- pergunta
DataParaRelatorioAniversario) = orv.dtvacina
Vamos as respostas
1- pergunta
If Format(dtDE.Value, [Ô]mm[Ô]) = Format(dtATE.Value, [Ô]mm[Ô]) And Format(dtDE.Value, [Ô]yyyy[Ô]) = Format(dtATE.Value, [Ô]yyyy[Ô]) Then
Pelo entende (dtDE.Value, [Ô]mm[Ô]) = serial onde fica a data inicial que eu quero coloca? [Ô]mm[Ô] e mês?
(dtDE.Value, [Ô]yyyy[Ô]) = serial onde fica a data final que eu quero coloca? [Ô]yyyy[Ô] e ano?
quase isso:
O dtDE = datainicial
o dtAte = datafinal
E sim mm é o mês e yyyy é o ano que vc quer colocar
2- pergunta
Condicao = ComandoSQL ?
Isso mesmo, más somente a parte do where
3- pergunta
DataParaRelatorioAniversario) = orv.dtvacina
Esta correto
Viu ai como vc consegue identificar as coisas, maravilha
1- pergunta
If Format(dtDE.Value, [Ô]mm[Ô]) = Format(dtATE.Value, [Ô]mm[Ô]) And Format(dtDE.Value, [Ô]yyyy[Ô]) = Format(dtATE.Value, [Ô]yyyy[Ô]) Then
Pelo entende (dtDE.Value, [Ô]mm[Ô]) = serial onde fica a data inicial que eu quero coloca? [Ô]mm[Ô] e mês?
(dtDE.Value, [Ô]yyyy[Ô]) = serial onde fica a data final que eu quero coloca? [Ô]yyyy[Ô] e ano?
quase isso:
O dtDE = datainicial
o dtAte = datafinal
E sim mm é o mês e yyyy é o ano que vc quer colocar
2- pergunta
Condicao = ComandoSQL ?
Isso mesmo, más somente a parte do where
3- pergunta
DataParaRelatorioAniversario) = orv.dtvacina
Esta correto
Viu ai como vc consegue identificar as coisas, maravilha
Alvaro obrigado por responder! (Estou muito feliz por vc me ajudar alvaro!)
Abaixo eu vou colocar o que eu acho que entende!
[ô]PerÃodo dentro do mesmo mês
Mês e ano for igual?
[ô]PerÃodo entre meses dentro do mesmo ano
Mês dentro do ano quando e diferente?
[ô]PerÃodo entre meses e entre e ano
Seria mês para vários anos?
Resumo do teste do código.
brinco x243 dtvacina 25/05/2016 vacino
brinco x243 dtvacina 25/06/2016 não vacino
-------------------------------------------------------
Resultado
Na listview trás todos menos o brinco x243 pq ele não vacino em 25/06/2016
Eu quero o contrario só traga o x243 por ele não ter vacinado em 25/06/2016 e os outros que não vacino este ano.
Esse e o código que montei pelo que entende.
If Me.optsemvacinar.Value = True Then
ComandoSQL = [Ô]SELECT or1.*, orv.dtvacina FROM Origem or1 LEFT JOIN Origemvacina orv on or1.Brinco = orv.Brinco [Ô]
[ô]PerÃodo dentro do mesmo mês
If Format(Me.txt_data_inicial, [Ô]mm[Ô]) = Format(Me.txt_data_final.Value, [Ô]mm[Ô]) And Format(Me.txt_data_inicial, [Ô]yyyy[Ô]) = Format(Me.txt_data_final.Value, [Ô]yyyy[Ô]) Then
Condicao = Condicao & [Ô] and ((day(orv.dtvacina) >=[ô][Ô] & Format(Me.txt_data_inicial, [Ô]d[Ô]) & [Ô][ô] And Month(orv.dtvacina) = [ô][Ô] & Format(Me.txt_data_inicial, [Ô]m[Ô]) & [Ô][ô])[Ô]
Condicao = Condicao & [Ô] and (day(orv.dtvacina) <=[ô][Ô] & Format(Me.txt_data_final.Value, [Ô]d[Ô]) & [Ô][ô] and month(orv.dtvacina) = [ô][Ô] & Format(Me.txt_data_final.Value, [Ô]m[Ô]) & [Ô][ô]))[Ô]
[ô]PerÃodo entre meses dentro do mesmo ano
ElseIf Format(Me.txt_data_inicial, [Ô]mm[Ô]) <> Format(Me.txt_data_final.Value, [Ô]mm[Ô]) And Format(Me.txt_data_inicial, [Ô]yyyy[Ô]) = Format(Me.txt_data_final.Value, [Ô]yyyy[Ô]) Then
Condicao = Condicao & [Ô] and ((day(orv.dtvacina) >=[ô][Ô] & Format(Me.txt_data_inicial, [Ô]d[Ô]) & [Ô][ô] And Month(orv.dtvacina) >= [ô][Ô] & Format(Me.txt_data_inicial, [Ô]m[Ô]) & [Ô][ô])[Ô]
Condicao = Condicao & [Ô] or (day(orv.dtvacina) <=[ô][Ô] & Format(Me.txt_data_final.Value, [Ô]d[Ô]) & [Ô][ô] and month(orv.dtvacina) = [ô][Ô] & Format(Me.txt_data_final.Value, [Ô]m[Ô]) & [Ô][ô]))[Ô]
[ô]PerÃodo entre meses e entre e ano
ElseIf Format(Me.txt_data_inicial, [Ô]mm[Ô]) <> Format(Me.txt_data_final.Value, [Ô]mm[Ô]) And Format(Me.txt_data_inicial, [Ô]yyyy[Ô]) <> Format(Me.txt_data_final.Value, [Ô]yyyy[Ô]) Then
Condicao = Condicao & [Ô] and ((day(orv.dtvacina) >=[ô][Ô] & Format(Me.txt_data_inicial, [Ô]d[Ô]) & [Ô][ô] And Month(orv.dtvacina) >= [ô][Ô] & Format(Me.txt_data_inicial, [Ô]m[Ô]) & [Ô][ô])[Ô]
Condicao = Condicao & [Ô] or (day(orv.dtvacina) <=[ô][Ô] & Format(Me.txt_data_final.Value, [Ô]d[Ô]) & [Ô][ô] and month(orv.dtvacina) <= [ô][Ô] & Format(Me.txt_data_final.Value, [Ô]m[Ô]) & [Ô][ô]))[Ô]
End If
ComandoSQL = ComandoSQL & [Ô]WHERE orv.dtvacina Between #[Ô] & Format(CDate(Me.txt_data_inicial), [Ô]mm/dd/yyyy[Ô]) & [Ô]# And #[Ô] & Format(CDate(Me.txt_data_final), [Ô]mm/dd/yyyy[Ô]) & [Ô]# [Ô]
End If
ElseIf Me.optsemvacinar.Value = True Then
If Codigo <> consulta(0) Then
Set List = lstLista.ListItems.Add(Text:=consulta(0)) [ô]id
[ô]Deixa em branco se a data estiver zerada
If consulta(1) = [Ô]0000[Ô] Then
List.SubItems(1) = [Ô][Ô]
Else
List.SubItems(1) = consulta(1)
End If [ô]Brinco
If consulta(2) = [Ô]0000[Ô] Then
List.SubItems(2) = [Ô][Ô]
Else
List.SubItems(2) = consulta(2)
End If [ô]Pbrinco
If consulta(3) = [Ô]0000[Ô] Then
List.SubItems(3) = [Ô][Ô]
Else
List.SubItems(3) = consulta(3)
End If [ô]Nantigo
If consulta(4) = [Ô]00:00:00[Ô] Then
List.SubItems(4) = [Ô][Ô]
Else: List.SubItems(4) = consulta(4)
End If [ô]DatadeNasc
List.SubItems(5) = consulta(5) [ô]raca
List.SubItems(6) = consulta(6) [ô]animal
List.SubItems(7) = consulta(7) [ô]Especificar
List.SubItems(8) = consulta(8) [ô]fazenda
List.SubItems(9) = consulta(9) [ô]Observacoes
List.SubItems(10) = consulta(10) [ô]IdadeAtualdasVacas
List.SubItems(11) = consulta(11) [ô]ativo
If consulta(12) = [Ô]00:00:00[Ô] Then
List.SubItems(12) = [Ô][Ô]
Else: List.SubItems(12) = consulta(12)
End If [ô]Vacinação
Codigo = consulta(0)
End If
Abaixo eu vou colocar o que eu acho que entende!
[ô]PerÃodo dentro do mesmo mês
Mês e ano for igual?
[ô]PerÃodo entre meses dentro do mesmo ano
Mês dentro do ano quando e diferente?
[ô]PerÃodo entre meses e entre e ano
Seria mês para vários anos?
Resumo do teste do código.
brinco x243 dtvacina 25/05/2016 vacino
brinco x243 dtvacina 25/06/2016 não vacino
-------------------------------------------------------
Resultado
Na listview trás todos menos o brinco x243 pq ele não vacino em 25/06/2016
Eu quero o contrario só traga o x243 por ele não ter vacinado em 25/06/2016 e os outros que não vacino este ano.
Esse e o código que montei pelo que entende.
If Me.optsemvacinar.Value = True Then
ComandoSQL = [Ô]SELECT or1.*, orv.dtvacina FROM Origem or1 LEFT JOIN Origemvacina orv on or1.Brinco = orv.Brinco [Ô]
[ô]PerÃodo dentro do mesmo mês
If Format(Me.txt_data_inicial, [Ô]mm[Ô]) = Format(Me.txt_data_final.Value, [Ô]mm[Ô]) And Format(Me.txt_data_inicial, [Ô]yyyy[Ô]) = Format(Me.txt_data_final.Value, [Ô]yyyy[Ô]) Then
Condicao = Condicao & [Ô] and ((day(orv.dtvacina) >=[ô][Ô] & Format(Me.txt_data_inicial, [Ô]d[Ô]) & [Ô][ô] And Month(orv.dtvacina) = [ô][Ô] & Format(Me.txt_data_inicial, [Ô]m[Ô]) & [Ô][ô])[Ô]
Condicao = Condicao & [Ô] and (day(orv.dtvacina) <=[ô][Ô] & Format(Me.txt_data_final.Value, [Ô]d[Ô]) & [Ô][ô] and month(orv.dtvacina) = [ô][Ô] & Format(Me.txt_data_final.Value, [Ô]m[Ô]) & [Ô][ô]))[Ô]
[ô]PerÃodo entre meses dentro do mesmo ano
ElseIf Format(Me.txt_data_inicial, [Ô]mm[Ô]) <> Format(Me.txt_data_final.Value, [Ô]mm[Ô]) And Format(Me.txt_data_inicial, [Ô]yyyy[Ô]) = Format(Me.txt_data_final.Value, [Ô]yyyy[Ô]) Then
Condicao = Condicao & [Ô] and ((day(orv.dtvacina) >=[ô][Ô] & Format(Me.txt_data_inicial, [Ô]d[Ô]) & [Ô][ô] And Month(orv.dtvacina) >= [ô][Ô] & Format(Me.txt_data_inicial, [Ô]m[Ô]) & [Ô][ô])[Ô]
Condicao = Condicao & [Ô] or (day(orv.dtvacina) <=[ô][Ô] & Format(Me.txt_data_final.Value, [Ô]d[Ô]) & [Ô][ô] and month(orv.dtvacina) = [ô][Ô] & Format(Me.txt_data_final.Value, [Ô]m[Ô]) & [Ô][ô]))[Ô]
[ô]PerÃodo entre meses e entre e ano
ElseIf Format(Me.txt_data_inicial, [Ô]mm[Ô]) <> Format(Me.txt_data_final.Value, [Ô]mm[Ô]) And Format(Me.txt_data_inicial, [Ô]yyyy[Ô]) <> Format(Me.txt_data_final.Value, [Ô]yyyy[Ô]) Then
Condicao = Condicao & [Ô] and ((day(orv.dtvacina) >=[ô][Ô] & Format(Me.txt_data_inicial, [Ô]d[Ô]) & [Ô][ô] And Month(orv.dtvacina) >= [ô][Ô] & Format(Me.txt_data_inicial, [Ô]m[Ô]) & [Ô][ô])[Ô]
Condicao = Condicao & [Ô] or (day(orv.dtvacina) <=[ô][Ô] & Format(Me.txt_data_final.Value, [Ô]d[Ô]) & [Ô][ô] and month(orv.dtvacina) <= [ô][Ô] & Format(Me.txt_data_final.Value, [Ô]m[Ô]) & [Ô][ô]))[Ô]
End If
ComandoSQL = ComandoSQL & [Ô]WHERE orv.dtvacina Between #[Ô] & Format(CDate(Me.txt_data_inicial), [Ô]mm/dd/yyyy[Ô]) & [Ô]# And #[Ô] & Format(CDate(Me.txt_data_final), [Ô]mm/dd/yyyy[Ô]) & [Ô]# [Ô]
End If
ElseIf Me.optsemvacinar.Value = True Then
If Codigo <> consulta(0) Then
Set List = lstLista.ListItems.Add(Text:=consulta(0)) [ô]id
[ô]Deixa em branco se a data estiver zerada
If consulta(1) = [Ô]0000[Ô] Then
List.SubItems(1) = [Ô][Ô]
Else
List.SubItems(1) = consulta(1)
End If [ô]Brinco
If consulta(2) = [Ô]0000[Ô] Then
List.SubItems(2) = [Ô][Ô]
Else
List.SubItems(2) = consulta(2)
End If [ô]Pbrinco
If consulta(3) = [Ô]0000[Ô] Then
List.SubItems(3) = [Ô][Ô]
Else
List.SubItems(3) = consulta(3)
End If [ô]Nantigo
If consulta(4) = [Ô]00:00:00[Ô] Then
List.SubItems(4) = [Ô][Ô]
Else: List.SubItems(4) = consulta(4)
End If [ô]DatadeNasc
List.SubItems(5) = consulta(5) [ô]raca
List.SubItems(6) = consulta(6) [ô]animal
List.SubItems(7) = consulta(7) [ô]Especificar
List.SubItems(8) = consulta(8) [ô]fazenda
List.SubItems(9) = consulta(9) [ô]Observacoes
List.SubItems(10) = consulta(10) [ô]IdadeAtualdasVacas
List.SubItems(11) = consulta(11) [ô]ativo
If consulta(12) = [Ô]00:00:00[Ô] Then
List.SubItems(12) = [Ô][Ô]
Else: List.SubItems(12) = consulta(12)
End If [ô]Vacinação
Codigo = consulta(0)
End If
hj estou meio atarefado aqui no serviço, por isso não estou com muito tempo para passar aqui direto, más talvez tenha algo com o dia que vc esta querendo consultar, ele deve estar entrando em alguma condição que vc não quer, vá debugando ele linha a linha que vc consegue verificar em qual linha que esta entrando errado
Caso não saiba o como é debugar o código, tem que dar um F9 na linha e mandar rodar o sistema, ele vai parar a execução exatamente onde vc quer.
Logo que iniciar o sistema ele ja vai parar , más não é esse o momento que vc debugar, então de um F5, apenas quando vc digitar as datas e der um pesquisar, ai sim, vai apertando o F8 que ele vai executando linha a linha, assim vc descobre onde ele esta entrando sem vc mandar
Assim que der vejo o seu código aqui
Caso não saiba o como é debugar o código, tem que dar um F9 na linha e mandar rodar o sistema, ele vai parar a execução exatamente onde vc quer.
Logo que iniciar o sistema ele ja vai parar , más não é esse o momento que vc debugar, então de um F5, apenas quando vc digitar as datas e der um pesquisar, ai sim, vai apertando o F8 que ele vai executando linha a linha, assim vc descobre onde ele esta entrando sem vc mandar
Assim que der vejo o seu código aqui
Estava dando uma olhada e vi que na segunda cláusula estava errada
[ô]PerÃodo entre meses dentro do mesmo ano
ElseIf Format(Me.txt_data_inicial, [Ô]mm[Ô]) <> Format(Me.txt_data_final.Value, [Ô]mm[Ô]) And Format(Me.txt_data_inicial, [Ô]yyyy[Ô]) = Format(Me.txt_data_final.Value, [Ô]yyyy[Ô]) Then
Condicao = Condicao & [Ô] and ((day(orv.dtvacina) >=[ô][Ô] & Format(Me.txt_data_inicial, [Ô]d[Ô]) & [Ô][ô] And Month(orv.dtvacina) >= [ô][Ô] & Format(Me.txt_data_inicial, [Ô]m[Ô]) & [Ô][ô])[Ô]
Condicao = Condicao & [Ô] or (day(orv.dtvacina) <=[ô][Ô] & Format(Me.txt_data_final.Value, [Ô]d[Ô]) & [Ô][ô] and month(orv.dtvacina) = [ô][Ô] & Format(Me.txt_data_final.Value, [Ô]m[Ô]) & [Ô][ô]))[Ô]
Corrigindo, incluindo Ultimo sinal de menor
Condicao = Condicao & [Ô] or (day(orv.dtvacina) <=[ô][Ô] & Format(Me.txt_data_final.Value, [Ô]d[Ô]) & [Ô][ô] and month(orv.dtvacina) <= [ô][Ô] & Format(Me.txt_data_final.Value, [Ô]m[Ô]) & [Ô][ô]))[Ô]
Da uma olhada se funciona, pois o resto esta aparentemente correto, a única coisa que vc não data fazendo que eu disse muitas vezes e inclusive coloquei no comando anterior, é usar o cdate dentro do format, para transformar o texto digitado em data, isso pode atrapalhar o comando caso seja interpretado errado
Caso não funcione, me passa o projeto atualizado que vejo o que posso fazer
[ô]PerÃodo entre meses dentro do mesmo ano
ElseIf Format(Me.txt_data_inicial, [Ô]mm[Ô]) <> Format(Me.txt_data_final.Value, [Ô]mm[Ô]) And Format(Me.txt_data_inicial, [Ô]yyyy[Ô]) = Format(Me.txt_data_final.Value, [Ô]yyyy[Ô]) Then
Condicao = Condicao & [Ô] and ((day(orv.dtvacina) >=[ô][Ô] & Format(Me.txt_data_inicial, [Ô]d[Ô]) & [Ô][ô] And Month(orv.dtvacina) >= [ô][Ô] & Format(Me.txt_data_inicial, [Ô]m[Ô]) & [Ô][ô])[Ô]
Condicao = Condicao & [Ô] or (day(orv.dtvacina) <=[ô][Ô] & Format(Me.txt_data_final.Value, [Ô]d[Ô]) & [Ô][ô] and month(orv.dtvacina) = [ô][Ô] & Format(Me.txt_data_final.Value, [Ô]m[Ô]) & [Ô][ô]))[Ô]
Corrigindo, incluindo Ultimo sinal de menor
Condicao = Condicao & [Ô] or (day(orv.dtvacina) <=[ô][Ô] & Format(Me.txt_data_final.Value, [Ô]d[Ô]) & [Ô][ô] and month(orv.dtvacina) <= [ô][Ô] & Format(Me.txt_data_final.Value, [Ô]m[Ô]) & [Ô][ô]))[Ô]
Da uma olhada se funciona, pois o resto esta aparentemente correto, a única coisa que vc não data fazendo que eu disse muitas vezes e inclusive coloquei no comando anterior, é usar o cdate dentro do format, para transformar o texto digitado em data, isso pode atrapalhar o comando caso seja interpretado errado
Caso não funcione, me passa o projeto atualizado que vejo o que posso fazer
Tópico encerrado , respostas não são mais permitidas