AJUDAR EM CONSULTA SQL!

ALVAROVB2009 18/06/2016 12:20:06
#463772
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
JONASJTG 20/06/2016 09:59:26
#463795
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?


ALVAROVB2009 20/06/2016 10:24:08
#463797
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
JONASJTG 20/06/2016 10:41:34
#463798
Desculpa estar de atrapalhando tanto Alvaro mas eu não consegui fazer nada pelo que vc me passo (Nem sei por onde começar).



ALVAROVB2009 20/06/2016 10:56:33
#463799
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
JONASJTG 20/06/2016 11:45:07
#463800
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

ALVAROVB2009 20/06/2016 12:16:16
#463801
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
JONASJTG 20/06/2016 13:58:49
#463803
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
ALVAROVB2009 20/06/2016 17:12:51
#463810
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
ALVAROVB2009 20/06/2016 19:42:22
#463817
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
Página 4 de 7 [65 registro(s)]
Tópico encerrado , respostas não são mais permitidas