RecordStore

21 respostas
P

Olá, eu fiz uma aplicação que armazena o nome de cidades, eu fiz o prósimo, o anterior, o inserir, só que eu não consigo fazer o delete, nos métodos do RecordStore só consta o método deleteRecord(int recordId), só que como que eu vou saber qual recordId passar pro método, se alguém puder me ajudar ficarei grato

21 Respostas

P

A dica anterior que te dei sobre usar um RecordEnumeration ainda tá valendo para esta dúvida.

Percorrendo seus registros através da enumeração, você terá o record ID.

Outra forma de obter um record ID é adicionar um registro, mas não é o caso.

Fora isto, desconheço uma maneira de obter um record ID de um registro.

Você pode confirmar tudo o que eu disse, olhando a documentação HTML da API para o RMS (Record Management System).

aborges

Depende de COMO vc pretende apagar o registro…

Fiz uma aplicação uma vez q listava os registros na tela pro carinha…

Pra apagar, bastava selecionar o item desejado e mandar excluir… Qd o carinha selecionava o item, minha logica carregava o ID daquele record para q o usuario pudesse manipular seus dados ( atualizar , excluir ou mostrar seus detalhes)

P

“boone”:
A dica anterior que te dei sobre usar um RecordEnumeration ainda tá valendo para esta dúvida.

Percorrendo seus registros através da enumeração, você terá o record ID.

Outra forma de obter um record ID é adicionar um registro, mas não é o caso.

Fora isto, desconheço uma maneira de obter um record ID de um registro.

Você pode confirmar tudo o que eu disse, olhando a documentação HTML da API para o RMS (Record Management System).

Agora eu consegui, o problema estava no seguinte, quando eu dava um re.nextRecord() ele pulava um “indice”, quando eu dava um re.nextRecordId() ele pulava outro indice, e aí eu tava fazendo uma bagunça aki, mas agora funcionou legal, brigadão

P

Agora me diz uma coisa, rodando o Wireless Toolkit o meu programinha tá funcionando beleza, agora se eu testo ele no Palm OS Emulator, a função delete não funciona, olha o código da função

else if (c == cmDeletar) { try { /* if (re.hasPreviousElement()) { re.previousRecordId(); System.out.println(re.nextRecordId()); } else { re.nextRecordId(); System.out.println(re.previousRecordId()); }*/ boolean atrasou = true; if (re.hasPreviousElement()) { re.previousRecordId(); rs.deleteRecord(re.nextRecordId()); } else { re.nextRecordId(); rs.deleteRecord(re.previousRecordId()); atrasou = false; } re = rs.enumerateRecords(null, null, true); if (re.hasNextElement()) siNome.setText(new String(re.nextRecord())); else siNome.setText("Não há nenhuma cidade cadastrada"); } catch (Exception e) { System.out.println("Não foi possível fazer a deleção"); } }

P

Que erro que dá ?

Este código de debug (System.out) que você está usando está afetando a lógica da sua midlet devido a ela chamar nextRecord. Tem certeza de estar ciente disto ?

Eu recomendaria você armazenar todos os IDs num array e conforme a seleção da tela, vc teria o índice do elemento a ser alterado via List.getSelectedIndex e acessaria o item do array que teria o ID do registro a ser deletado.

Acho mais fácil de fazer assim. O código é mais ou menos isto:

// Populando o array
int[] recordIDs = int[enum.numRecords()];

int contador = 0;
while (enum.hasNextElement){
      recordIDs[contador++] = enum.nextRecordID();
}

.
.
.
.

if (c == cmdDeletar) {
      int indice = cidades.getSelectedIndex();

      rs.deleteRecord(recordIDs[indice]);
}
P

Porque estaria afetando o código se nas outras funções eu faço da mesma forma o tratamento de erros, ou seja, com um System.out…???

P

Porquê System.out está fazendo uma chamada a nextRecord que está avançando na sua enumeração.

Quer fazer tratamento de erros, não use try…catch…com generalizando o tramento com um simples Exception (seja mais detalhista, por ex RecordStoreException), use System.out, com valores armazenados em váriaveis que neste caso, não afetarão o posicionamento dentro de uma enumeração.

Bem, tudo isto é apenas dicas.
Seu código pode funcionar muito bem sem elas, vai depender da qualidade que vc quer para ele ! :slight_smile:

P

“boone”:
Porquê System.out está fazendo uma chamada a nextRecord que está avançando na sua enumeração.

Quer fazer tratamento de erros, não use try…catch…com generalizando o tramento com um simples Exception (seja mais detalhista, por ex RecordStoreException), use System.out, com valores armazenados em váriaveis que neste caso, não afetarão o posicionamento dentro de uma enumeração.

Bem, tudo isto é apenas dicas.
Seu código pode funcionar muito bem sem elas, vai depender da qualidade que vc quer para ele ! :)

Eu concordo que pode ser isso, mas você não teria alguma explicação sobre porque que no emulador pra celular funciona e no emulador pra Palm não?

P

Se você disser qual a mensagem de erro que dá ao rodar a mesma aplicação no Palm, talvez possamos ajudar.

P

Simplesmente não traz mensagem de erro, simplesmente não faz nada

P

Emendando o assunto, como que eu vou fazer para saber qual o id de um registro quando eu tenho somente ele na minha “área de armazenamento”?

P

Enumeration !!!

P

eu estou usando o enumeration, mas ele so pega o recordId se eu der um nextRecordId() ou um previousRecordId(), mas se eu tenho só um elemento, eu não vejo jeito de pegar o id

P

Mas a idéia é esta mesmo !

Se der o nextRecordID é para ele pegar o ID do primeiro registro !

P

Mas como tem só um registro, ele vai dar pau quando der um nextRecordId(), porque ele vai tentar ir para um índice inesistente

P

É que eu não estou entendendo um negócio, se ele tem só um registro e está apontando para aquele registro, se ele der um nextRecord(), ele vai acessar um registro inexistente, ou não?

P

Que eu saiba, quando você acaba de criar um RecordEnumeration, você só avança pro 1o registro, a partir do momento que usa o nextRecord ou nextRecordID.

Até então você não recebeu nenhum item da enumeração, portanto, não “está em cima” de nenhum registro.

P

Tá, mas então como eu resolvo isso, eu tenho somente um registro no meu RecordStore, quando o usuário starta a aplicação eu dou um nextRecord() para mostrar para ele aquele único cliente cadastrado, e daí ele escolhe para deletar aquele único carinha, como que eu faço para deletá-lo?

P

E agora eu entrei em outro problema, o da edição, segue a lógica do outro, eu tenho somente um registro no RecordStore, daí eu dou um nextRecord para que o usuário visualize aquele cliente, quando ele escolher editar como eu vou pegar a String daquele RecordStore?

P

Pelo que me parece você não fez o download da documentação da API MIDP. Recomendo que o faça para esclarecer estas e outras dúvidas básicas que tem apresentado. :? Se não me engano ela já vem com o WTK.

Vamos lá…
De posso do record ID, leia o registro chamando getRecord.
Pegue o array retornado (que é o seu registro) e crie a String. Segue exemplo supondo que o nome do cliente começa na posição 5 e tem 10 bytes em extensão:

byte[] registro = rs.getRecord (recordID);

String nome = new String(registro,4,10);
P

mas como que eu vou saber o recordId, eu estou com toda documentação em minhas mãos

Criado 17 de junho de 2004
Ultima resposta 22 de jun. de 2004
Respostas 21
Participantes 3