REGISTOS NO FINAL DA TABELA - TA CONFUSO

USUARIO.EXCLUIDOS 02/01/2005 16:52:06
#58197
Viva pessoal!
Tou com uma dúvida meio confusa (pelo menos pra mim). Espero que tenham paciência para a lêr! [S36]
Tenho uma tabela num BD de access que, entre outros, tem os seguintes dados:

Caixa Nº | Bolas
1 1
2 1
3 5
1 8
2 1
3 1
1 6
3 1
Isto significa, por exemplo: caixa nº1 teve 1 bola, teve 8 bolas mas no fim ficou com 8.
Estes dados são lançados aleatóriamente e eu não os posso alterar.
A lista está cronologicamente ordenada. No final dá pra vêr que a caixa nº 2 não foi usada, facto que também não é previsivel.
De que forma, usando uma expressão SQL, posso seleccionar apenas os últimos registos de modo a exibir numas labels o conteudo final das caixas e caso 1 caixa não seja usada, também preciso de o indicar.

Desculpem, provavelmente haveria forma mais simples de expà'r o problema....mas é como eu digo......tou meio confuso! [S82]
LCSD 02/01/2005 16:59:29
#58198
Miguel

Eu realmente não estou entendendo nada.
[s55]

Por favo, aumente o Universo de Amostras, e por que é que as Caixas 1, 2 e 3 apresentam valores diferentes?

Este é o exemplo de Estatística que postei no teu Tópico anterior, não é? Se for, como são gerados estes números? (Importados de um TXT?)

Como está confuso, [txt-color=#0000ff]explique o processo em si[/txt-color]!
[s92]

USUARIO.EXCLUIDOS 02/01/2005 17:21:17
#58199
Ok! Aqui vai! Mas acho que agora ainda mais complicado vai ficar.
As "caixas" e as "bolas" foi apenas para (tentar) simplificar, porque o que se passa na realidade é o seguinte:
- temos 1 motherboard com 8 sockets de memória RAM;
- nessa motherboard vão ser colocados de cada vez, 8 módulos de memória
- de seguida é iniciada uma aplicação que testa esses módulos e gera num ficheiro TXT, o numero do socket e, se passou coloca o nº "1" e se falhou coloca um nº entre 5 e 8 (tá relacionado com o tipo de falha eléctrica).
- os dados vão sendo adicionados nesse ficheiro que fica com o seguinte aspecto:
Socket Result
1 5
2 1...etc....
- um pormenor: como os sockets por vezes se danificam, pode acontecer que nesta lista, em vez de ficar socket 1,2,3,4,5,6,7,8 possa ficar 1,3,4,5,7,8 (sockets 2 e 6 danificados)
- como não temos uma aplicação que interprete estes dados, tou criando uma que o faça.
- para já, a aplicação transporta estes dados para uma tabela de access (apenas porque é mais fácil pra mim) e apresenta outros dados estatiscos que não vale a pena mencionar.
- mas agora o que eu pretendo, é apresentar num form, o ultimo resultado do teste: numero do socket; resultado e caso não tenha sido usado deve apresentar como resultado um "-".
A minha dúvida é então, qual a expressão SQL que me consegue dar estes resultados.

Abraço e obrigado pela paciência.
USUARIO.EXCLUIDOS 02/01/2005 22:20:30
#58221
Resposta escolhida
Nessa tabela crie um campo para ser a chave primaria autonumeric. Assim fica possivel fazer a consulta
Tabela
ID Socket Result
1 - 1 - 5
2 - 2 - 1
3 - 4 - 5
....
Assim para saber sobre o ultimo resultado do Socket 1 por exemplo
Select Max(id) From Tabela Where Socket=1

Da forma que esta o banco, para saber o ultimo registro fica mais complicado e não vejo como fazer via SQL, somente por programação que no caso do ADO tem um atributo que retorna a posição do registro.
LCSD 02/01/2005 22:47:24
#58223
Miguel

Deixa ver se entendi.

Vamos analisar o problema:

* 8 Sockets: de números 1 a 8
* 5 Tipos de informação:
- 1 - Se o teste passar
- 5, 6, 7 e 8 - para cada tipo de problema


Se for isto mesmo, poderia ter uma Estrutura como a abaixo:



LCSD 02/01/2005 22:56:55
#58224
Miguel

Insira um CommandButton, um MSFlexGrid e um Módulo

' ---------------------------------------------------------------------------------------------------'
No Form



Private Sub Command1_Click()
Dim bNum As Byte
ReDim Resumo(8) As Resultado

For bNum = 0 To 7
Resumo(bNum).Falha1 = 100 * Rnd(Timer)
Resumo(bNum).Falha2 = 0
Resumo(bNum).Falha3 = 0
Resumo(bNum).Falha4 = 0
Resumo(bNum).Falha5 = 100 * Rnd(Timer)
Resumo(bNum).Falha6 = 100 * Rnd(Timer)
Resumo(bNum).Falha7 = 100 * Rnd(Timer)
Resumo(bNum).Falha8 = 100 * Rnd(Timer)
Next

For bNum = 1 To 8
MSFlexGrid1.ColWidth(bNum) = 600
Next
' ------ Só para testas os valores --------
For bNum = 0 To 7
MSFlexGrid1.TextMatrix(bNum + 1, 1) = Resumo(bNum).Falha1
MSFlexGrid1.TextMatrix(bNum + 1, 2) = Resumo(bNum).Falha2
MSFlexGrid1.TextMatrix(bNum + 1, 3) = Resumo(bNum).Falha3
MSFlexGrid1.TextMatrix(bNum + 1, 4) = Resumo(bNum).Falha4
MSFlexGrid1.TextMatrix(bNum + 1, 5) = Resumo(bNum).Falha5
MSFlexGrid1.TextMatrix(bNum + 1, 6) = Resumo(bNum).Falha6
MSFlexGrid1.TextMatrix(bNum + 1, 7) = Resumo(bNum).Falha7
MSFlexGrid1.TextMatrix(bNum + 1, 8) = Resumo(bNum).Falha8
Next
End Sub


' ---------------------------------------------------------------------------------------------------'
No Módulo


Public Type Resultado
Falha1 As Long
Falha2 As Long
Falha3 As Long
Falha4 As Long
Falha5 As Long
Falha6 As Long
Falha7 As Long
Falha8 As Long
End Type

Public Resumo() As Resultado


Assim você terá 8 Winsocks, redimensionado no Form, para uma estrutura de até 8 tipos de Falhas.

Veja se é isto que necessita.
[s50]

USUARIO.EXCLUIDOS 02/01/2005 23:00:59
#58225
Obrigado Renato.
é esqueci de dizer...já tinha esse campo criado....
Da forma que você indica funciona bem, a não ser numa situação em que 1 socket tá danificado (tal como indiquei no post acima).
Por exemplo: Na última rodada todos os sockets estão activos à  excepção dos sockets 1,3,4 e 5. Assim, a tabela pode apresentar os valores:
ID Socket Result
60 2 5
61 6 1
62 7 1
63 8 8
Ou seja, eu não posso "pedir" o resultado do socket 1, pois este não foi utilizado, se o fizesse, iri retomar o resultado de uma rodada anterior.
LCSD 02/01/2005 23:10:31
#58226
Miguel

Você quer só os ÃÅ¡LTIMOS REGISTROS de cada Winsock?

Eu estou MUITO CONFUSO MESMO! Sinceramente não entendo o por que, nas estruturas que montei era para se Totalizar as falhas, mas só as últimas falhas?
[s50]

USUARIO.EXCLUIDOS 02/01/2005 23:26:30
#58227
Obrigado.....a ordem dos posts está trocada...!!!! Bem..adiante....obrigado mais uma vez KpellaJr, mas realmente tá a confundir...penso que no meu ultimo post está mais explicíto.
Citação:

Obrigado Renato.
é esqueci de dizer...já tinha esse campo criado....
Da forma que você indica funciona bem, a não ser numa situação em que 1 socket tá danificado (tal como indiquei no post acima).
Por exemplo: Na última rodada todos os sockets estão activos à  excepção dos sockets 1,3,4 e 5. Assim, a tabela pode apresentar os valores:
ID Socket Result
60 2 5
61 6 1
62 7 1
63 8 8
Ou seja, eu não posso "pedir" o resultado do socket 1, pois este não foi utilizado, se o fizesse, iria retomar o resultado de uma rodada anterior.

USUARIO.EXCLUIDOS 03/01/2005 19:02:29
#58360
Saudações Miguelm,

Bem assim vc deve incluir mais um campo na tabela.Que indicaria a rodada.
Mudando completamente o modo anterior. Pois antes estaria pegando os valores do ID maiores para identificar as ultimas rodadas. Agora não seria necessario.
  
ID Socket Result Rodada
60 2 5 1
61 6 1 1
62 7 1 1
63 8 8 1
64 1 5 2
65 3 1 2
66 4 1 2
67 7 8 2

Assim fazendo um Select pela Rodada, inclusive podendo agrupar vai retornar os socket que foram testados e o que faltar são os com erros.
Então Select Socket From Tabela Rodada 1
Retorna 2 6 7 e 8 logo 1 3 4 5 estão com problema.
Se vc criar uma outra tabela para armazenar somente so Socket e relacionar com a Tabela TESTE é possivel fazer uma Join trazendo todos os registros que participam do relacionamento ( que seriam os socket testados ) e também retornaria os que não participaram do relacionamento ( socket ruins) sendo que para os ruins teria que ver o que iria retornar no campo Result, acho que seria NULL, assim ficaria facil de verificar os que foram testados e os que não foram. A

Só testanto para ver.
A consulta use Left Join ou o Right Join
LCSD 03/01/2005 19:24:15
#58366
Renato

TAnto a Estrutura de uma TAbela quanto um Array dariam conta do recado, o que me deixa CONFUSO é se os erros devem ser Totalizados ou só os últimos resultados!
[s55]

Na minha ótica, um levantamente seria uma Totatilzação, ou seja, Winsock 1, Falha 7 = 55 , por exemplo
[s95]

Página 1 de 2 [20 registro(s)]
Tópico encerrado , respostas não são mais permitidas