Авторизироваться
  • Страница 1 из 1
  • 1
Модератор форума: ADMIN, Nextik  
Сохранение и чтение данных
31.01.2012 в 18:43 Сообщение #1
Nextik
Программист
Проверенные
Сообщений: 273
Награды: 0
Репутация: 42
Offline
У меня возник вопрос, так как я никак не могу реализовать то что хочу: чтение из хранилища после перезапуска мидлета.
Вот собственно модифицированный код из справочника:
Code
Program Save_experiment;
{ --------------- Переменные --------------- }
var
rs:recordStore;
index:integer;
name:string;
{ --------------- Процедуры --------------- }
Procedure save; forward;
Procedure load; forward;
{ --------------- Менюшка --------------- }
Procedure drawing;
begin
// Выводим на экран
SetColor(0,0,0);
FillRect(0,0,240,320);
SetColor(255,255,255);
end;
Procedure menu;
var
exit:boolean;
s4et4ik:integer;
key_clicked:integer;
begin
exit:=false;
s4et4ik:=1;
repeat
key_clicked:=GetKeyClicked;
SetColor(0,0,0);
FillRect(0,0,GetWidth,GetHeight);
SetColor(255,255,255);
DrawText('Сохранить',0,0);
DrawText('Загрузить',0,12);
DrawText('Выйти',0,24);
////////////////////////
if (key_clicked=KE_KEY2) then begin s4et4ik:=s4et4ik-1 end;
if (key_clicked=KE_KEY8) then begin s4et4ik:=s4et4ik+1 end;
//
if (key_clicked=KE_KEY5) and (s4et4ik=1) then begin exit:=true; save; end;
if (key_clicked=KE_KEY5) and (s4et4ik=2) then begin exit:=true; load; end;
if (key_clicked=KE_KEY5) and (s4et4ik=3) then begin halt; end;
/////////////////////////
if (s4et4ik=1) then begin DrawText('<--',GetStringWidth('Сохранить'),0); end;
if (s4et4ik=2) then begin DrawText('<--',GetStringWidth('Загрузить'),12); end;
if (s4et4ik=3) then begin DrawText('<--',GetStringWidth('Выход'),24); end;
////////////////////////////////
repaint;
delay(1);
until exit=true;
end;
{ --------------- Загрузка/сохранение --------------- }
Procedure save;
begin
// Записываем некие данные в хранилище
deleterecordstore('names');
rs:=openRecordStore('names');
index:=addRecordStoreEntry(rs,'John Smith');
closeRecordStore(rs);
//
SetColor(0,0,0);
FillRect(0,0,GetWidth,GetHeight);
SetColor(255,255,255);
DrawText('Данные сохранены успешно!',0,0);
repaint;
delay(3000);
halt;
end;
Procedure load;
begin
// Считываем данные
rs:=openRecordStore('names');
name:=readRecordStoreEntry(rs,index);
closeRecordStore(rs);
//
SetColor(0,0,0);
FillRect(0,0,GetWidth,GetHeight);
SetColor(255,255,255);
DrawText('Данные загружены',0,0);
repaint;
delay(2000);
// Отображаем данные
SetColor(140,0,0);
FillRect(0,0,GetWidth,GetHeight);
SetColor(255,255,255);
DrawText(''+(name),0,0);
repaint;
delay(999999);
end;
{ --------------- Делаем тут всё --------------- }
begin
menu;
repeat
repaint;
delay(1);
until false;
end.  

Возможно я что-то делаю не так, тогда мне нужно научиться как работать с этим правильно. На процедуру drawing не обращайте внимания smile
31.01.2012 в 20:31 Сообщение #2
12121
Программист
Проверенные
Сообщений: 357
Награды: 4
Репутация: 290
Offline
Привет неугомонный Nextik, biggrin
Не буду разбирать твой код, но на подобный вопрос я отвечал тут, посмотри в 10 сообщении.
У тебя скорее всего из за переменной index проблемы. Напечатай ее значения после сохранения - скорее всего будет index=1. А читать ты пытаешься из index=0. Так как после объявления она нигде не меняется.
Удачи! wink
01.02.2012 в 11:07 Сообщение #3
Nextik
Программист
Проверенные
Сообщений: 273
Награды: 0
Репутация: 42
Offline
Quote (12121)
У тебя скорее всего из за переменной index проблемы. Напечатай ее значения после сохранения - скорее всего будет index=1. А читать ты пытаешься из index=0. Так как после объявления она нигде не меняется.

Хм... И правда... Вот теперь я понял. Спасибо smile
10.02.2012 в 22:54 Сообщение #4
Moderator_
Удаленные
Доброго времени сток, господа.
Не копался долго на форуме, но сразу не нашел проблему сохранения в RecordStore русского текста.
Уже перепробовал много решений, но они либо не выгодные, либо мне не подходят.
Может кто поделится своим опытом?
Заранее спасибо! happy
11.02.2012 в 12:24 Сообщение #5
Nextik
Программист
Проверенные
Сообщений: 273
Награды: 0
Репутация: 42
Offline
Я думаю все способы решения такой проблемы для тебе не подойдут...
21.02.2012 в 11:18 Сообщение #6
PassCall
Знающий
Проверенные
Сообщений: 88
Награды: 0
Репутация: 4
Offline
Если текст небольшой, можно записать не сам текст, а коды символов.

То есть вместо, скажем, "Абв" записать 343,457,253 (цифры произвольные)
  • Страница 1 из 1
  • 1
Поиск: