RecordStore

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

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).

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)

[quote=“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).[/quote]

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

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"); } }

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]);
}

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…???

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:

[quote=“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 ! :)[/quote]

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?

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

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

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”?

Enumeration !!!

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

Mas a idéia é esta mesmo !

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

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

É 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?

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.

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?

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?