PESQUISA EM REGISTO EM SQL

SMZTODOPODEROSO 11/01/2010 16:42:13
#331606
Boas
Estou com uma duvida, que não sei como fazer/organizar.

O objectivo passa por fazer uma pesquisa a base de dados aos últimos 10 registos, no qual são entradas e saídas de alunos. como faço para saber se são entradas ou saídas!!! Tinha pensado no comando MOD. qualquer coisa com
If registo Mod 2 = 0 Then
entrada
else
saida
end if


.... mas como se passa em varias datas não sei como vou fazer.

o código que já tenho feito é o seguinte:

Dim contador As Integer
contador = 0
stropen = [Ô]select * from moventradas where nrprocesso=[ô][Ô] + Str$(nrprocesso) + [Ô][ô] order by id desc[Ô]
rs.Open stropen, cnn
topo:
If rs.EOF Or rs.BOF Then
rs.Close
GoTo fim
Else
GoTo continua
End If

continua:
If contador = 9 Then
rs.Close
GoTo fim
End If
datinha = rs.fields([Ô]data[Ô])
horinha = rs.fields([Ô]horas[Ô])
temper = Format(horinha, [Ô]HH:MM:SS[Ô])
passagem = rs.fields([Ô]tipo[Ô])

contador = contador + 1

........

Label34.Caption = Label38.Caption
Label35.Caption = Label39.Caption
Label36.Caption = Label40.Caption
Label37.Caption = Label41.Caption

Label38.Caption = datinha
Label39.Caption = temper
Label40.Caption = nrprocesso

If passagem = 0 Then
resultado = [Ô]Passagem não autoriada[Ô]
End If
If passagem = 1 Then
resultado = [Ô]Passagem Normal[Ô]
End If
Label41.Caption = resultado
rs.MoveNext

GoTo topo
RCMRO 11/01/2010 16:48:09
#331607
stropen = [Ô]select TOP 10 * from moventradas where nrprocesso=[ô][Ô] + Str$(nrprocesso) + [Ô][ô] order by id desc[Ô]
SMZTODOPODEROSO 11/01/2010 16:57:08
#331609
Citação:

:

stropen = [Ô]select TOP 10 * from moventradas where nrprocesso=[ô][Ô] + Str$(nrprocesso) + [Ô][ô] order by id desc[Ô]



isso vai criar um array?

E como faço para obter o resultado na pesquisa?
RCMRO 12/01/2010 08:12:48
#331647
Cara, a sua dúvida não está clara pois nem sei do que está falando.
Talvez enviando uma versão da Base de Dados e detalhando a sua necessidade, eu possa alterar a sua rotina para funcionar como vc quer...

Aliás, a instrução acima não cria uma ARRAY, você usa ela para criar, loga abaixo no seu código mesmo, um RECORDSET com somente 10 registros ordenados inversamente pelo campo [Ô]id[Ô].

Se me permite algumas observações:
. Não usa a instrução GOTO pois ela existe somente para NÃO SER USADA.
. Falta um LOOP para varrer o Recordset senão, para que você precisa de 10 registros?

De qualquer forma, imagino o seu código assim:

stropen = [Ô]select TOP 10 * from moventradas where nrprocesso=[ô][Ô] + Str$(nrprocesso) + [Ô][ô] order by id desc[Ô]
rs.Open stropen, cnn

If not rs.EOF Then
Do While Not rs.EOF
datinha = rs.fields([Ô]data[Ô])
horinha = rs.fields([Ô]horas[Ô])
temper = Format(horinha, [Ô]HH:MM:SS[Ô])
passagem = rs.fields([Ô]tipo[Ô])
........
Label34.Caption = Label38.Caption
Label35.Caption = Label39.Caption
Label36.Caption = Label40.Caption
Label37.Caption = Label41.Caption

Label38.Caption = datinha
Label39.Caption = temper
Label40.Caption = nrprocesso

If passagem = 0 Then
resultado = [Ô]Passagem não autoriada[Ô]
Else
resultado = [Ô]Passagem Normal[Ô]
exit do
End If
Label41.Caption = resultado
rs.MoveNext
loop
End If
rs.Close
MARCELO.TREZE 12/01/2010 08:48:30
#331648
Eu acho que entendo mais ou menos que se passa e sua i[ô]deia a principio é lógica, mas precisamos saber o seguinte.

como esta a estrutura da base de dados? Quais os campos?

se eu ão estiver enganado vc está salvando da seguinte maneira

em sequencia

data Hora
01/01/2010 07:00 <---entradada
01/01/2010 12:00 <---Saida
01/01/2010 14:00 <----entrada
01/01/2010 18:00 <----Saida

acima é uma suposição de como esteja gravando os dados
apenas confirme se é isto, se não for explique como está armazenando os dados, e quais os nomes dos campos.

SMZTODOPODEROSO 12/01/2010 12:26:41
#331664
Detalhe da base de dados:
A base de dados chama-se escola e tem os seguintes campos
------ id
------ data
------ hora
------ tipo
------ nrprocesso

O que eu pretendo fazer é ir a base de dados filtrar os últimos 10 registos de maneira a organiza-los do mais recente para o mais antigo. Só que quero que aparece (numa instrução) se for ímpar é entrada se for par é saída. Vamos supor que sé encontrou 6 registos
55 - 2010-01-02 - 11:00:01 - 1 - 123456 .......Entrada (só existe 1 registo é impar)
55 - 2010-01-03 - 11:00:01 - 1 - 123456 .......Entrada (existem 5 registo nesta data, como este é o 5 ímpar é entrada)
55 - 2010-01-03 - 12:00:01 - 1 - 123456 .......Saída (existem 5 registo nesta data, como este é o 4 par é saída)
55 - 2010-01-03 - 13:00:01 - 1 - 123456 .......Entrada (existem 5 registo nesta data, como este é o 3 ímpar é entrada)
55 - 2010-01-03 - 14:00:01 - 1 - 123456 .......Saída (existem 5 registo nesta data, como este é o 2 par é saída)
55 - 2010-01-03 - 15:00:01 - 1 - 123456 .......Entrada (existem 5 registo nesta data, como este é o 1 ímpar é entrada)



RCMRO 12/01/2010 13:00:22
#331670
Resposta escolhida
Veja se é assim:

Dim Contador as Double
stropen = [Ô]select * from moventradas where nrprocesso=[ô][Ô] & Str$(nrprocesso) & [Ô][ô] AND [Data] = #[ô] & Format(txtDataConsulta.Text, [Ô]yyyy-mm-dd[Ô]) & [Ô]# order by id desc[Ô]
rs.Open stropen, cnn

If not rs.EOF Then
Contador = 0
Do While Not rs.EOF
Contador = Contador + 1
datinha = rs.fields([Ô]data[Ô])
horinha = rs.fields([Ô]horas[Ô])
temper = Format(horinha, [Ô]HH:MM:SS[Ô])
........
Label34.Caption = Label38.Caption
Label35.Caption = Label39.Caption
Label36.Caption = Label40.Caption
Label37.Caption = Label41.Caption

Label38.Caption = datinha
Label39.Caption = temper
Label40.Caption = nrprocesso

Label41.Caption = Iif(Contador / 2 = Int(Contador / 2), [Ô]Saída[Ô], [Ô]Entrada[Ô])

rs.MoveNext
loop
End If
rs.Close
SMZTODOPODEROSO 12/01/2010 13:43:55
#331682
AND [Data] = #[ô] & Format(txtDataConsulta.Text, [Ô]yyyy-mm-dd[Ô]) & [Ô]# order by id desc[Ô] ------- esta parte não percebi muito bem.
não sei se me expliquei bem mas temos quer analisar perante a data

o objectivo passa em ir a base de dados e trazer os últimos 10 registos

ID Data Hora tipo Nrprocesso resultado que eu queria obter
1 - 2010-01-02 - 11:00:01 - 1 - 123456 .......Entrada (só existe 1 registo é impar)
2 - 2010-01-03 - 11:00:01 - 1 - 123456 .......Entrada (existem 5 registo nesta data, como este é o 5 ímpar é entrada)
3 - 2010-01-03 - 12:00:01 - 1 - 123456 .......Saída (existem 5 registo nesta data, como este é o 4 par é saída)
4 - 2010-01-03 - 13:00:01 - 1 - 123456 .......Entrada (existem 5 registo nesta data, como este é o 3 ímpar é entrada)
5 - 2010-01-03 - 14:00:01 - 1 - 123456 .......Saída (existem 5 registo nesta data, como este é o 2 par é saída)
6 - 2010-01-04 - 15:00:01 - 1 - 123456 .......Entrada (existem 1 registo nesta data, como este é o 1 ímpar é entrada)
7 - 2010-01-05 - 15:00:01 - 1 - 123456 .......Entrada (existem 1 registo nesta data, como este é o 1 ímpar é entrada)
8 - 2010-01-06 - 15:00:01 - 1 - 123456 .......Entrada (existem 1 registo nesta data, como este é o 1 ímpar é entrada)
9 - 2010-01-07 - 15:00:01 - 1 - 123456 .......Entrada (existem 1 registo nesta data, como este é o 1 ímpar é entrada)
10 - 2010-01-08 - 15:00:01 - 1 - 123456 .......Entrada (existem 1 registo nesta data, como este é o 1 ímpar é entrada)

O dia 2010-01-02 sõ tem um registo por isso é entrada

O dia 2010-01-03 tem 5 passagens ai é que se tem que ver qual é ímpar e par para a entrada ou saída

os restos dos dias 2010-01-04 e 2010-01-05 e 2010-01-06 e 2010-01-07 e 2010-01-08 só tem um registo só existiu uma passagem é tudo entradas, mas tem que se verificar pela data porque se no dia 2010-01-08 o registo 11 que não aparece for mais uma passagem ja seria saída.
MARCELO.TREZE 12/01/2010 15:08:55
#331696
bom vamos lá a idéia a principio é a certa utlizar o MOD para saber qual é par e qual é impar

poré para funcionar vc deve coloca-la em um laço DO LOOP

exemplo

Dim cont As Integer
Dim Dta As String
Dim Hra As String
Dim Pas As Integer
Dim ES as String
cont = 0
stropen = [Ô]select top 10 * from moventradas where nrprocesso=[ô][Ô] + Str$(nrprocesso) + [Ô][ô] Group By [Data] order by [Data],[Horas] desc[Ô]
rs.Open stropen, cnn
Do While Not rs.EOF
Cont = Cont + 1
Dta = rs.fields([Ô]data[Ô])
Hra = Format(rs.fields([Ô]horas[Ô]),[Ô]hh:nn:ss[Ô])
Pas = rs.fields([Ô]tipo[Ô])
If (Contador Mod 2) = 0 Then
[ô] par
ES = [Ô]Saida[Ô]
Else
[ô]Impar
ES = [Ô]Entrada[Ô]
End if
rs.MoveNext
List1.AddItem Dta & [Ô] - [Ô] & Hra & [Ô] - [Ô] & Pas & [Ô] - [Ô] & ES
Loop


Bom acima fiz um exemplo para exibir os dados em um listbox, tente adapta-lo, não tenho certeza mas usando o Group By e order By conforme acima conseguiiremos o resultado
MARCELO.TREZE 12/01/2010 15:15:47
#331697
analizando melhor perceb que pode até exbibir os dados corretamente, porem a função entrada e saida não irá funcionar

me diga como pretente exibir estes dados, se for usar o flexgrid, da pra fazer uma boa adaptação
SMZTODOPODEROSO 12/01/2010 20:48:29
#331722
Coloquei num ficheiro zip o form mais a tabela da base de dados

Não estava a pensar em usar flexgrid, mas se for mais fácil por tudo bem
Página 1 de 2 [12 registro(s)]
Tópico encerrado , respostas não são mais permitidas