Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

min@y™
I. min@y™
Баллы: 20
Вадим К
II. Вадим К
Баллы: 15
Ixer
III. Ixer
Баллы: 5

Подробнее »



Вопрос # 3 881

/ вопрос открыт /

Здравствуйте, подскажите пожалуйста, создаю приложение с автономной базой данных с ClientDataSet и файлом cds, но при выводе записей показывается только последняя из них, как это можно исправить. Спасибо!

Приложение:
  1. // Ввод
  2. cds.Edit;
  3. cds.FieldByName('f1').AsString:='Данные';
  4. cds.FieldByName('f2').AsString:='Данные';
  5.  
  6. cds.Post;
  7.  
  8. // Вывод
  9. cds.First;
  10. while not cds.Eof do begin
  11. with ListView1.Items.Add do
  12. begin
  13. Caption:=cds.fieldByName('f1').AsString;
  14. SubItems.Add(cds.fieldByName('f2').AsString);
  15.  
  16. end;
  17. cds.Next;
  18. end;
  19.  


tystnaden Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: tystnaden (статус: Посетитель)
Вопрос отправлен: 13 марта 2010, 11:07
Состояние вопроса: открыт, ответов: 1.

Расскажите знакомым об этой теме:

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, tystnaden!
Не надо искать в дебрях DBNavigator каких то тайных методов. там ничего нового не будет. Более того, приведенный выше пример делает именно то, что должен. А именно - он открывает текущую запись на редактирование, редактирует ее и сохраняет. Поэтому, запускайте хоть сто раз, запись будет одна.

А что бы добавить новую запись, надо заменить в коде вызов Edit на вызов insert - он создаст новую пустую запись, и дальнейший код удачно ее отредактирует и сохранит.

Читайте хелпы, там всё написано:)))

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 14 марта 2010, 08:47
Оценка за ответ: 5

Комментарий к оценке: Отличный ответ! :)

Мини-форум вопроса

Всего сообщений: 17; последнее сообщение — 15 марта 2010, 01:49; участников в обсуждении: 3.
Егор

Егор (статус: 10-ый класс), 13 марта 2010, 12:40 [#1]:

А в базе точно не одна запись, а несколько?
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
tystnaden

tystnaden (статус: Посетитель), 13 марта 2010, 13:35 [#2]:

Да в базе запись не одна, добавлял много, но выводит только последнюю и все.
tystnaden

tystnaden (статус: Посетитель), 13 марта 2010, 13:36 [#3]:

listview вывожу так:

cds.First;
while not cds.Eof do begin
with ListView1.Items.Add do
begin
Caption:=cds.fieldByName('f1').AsString;
SubItems.Add(cds.fieldByName('f2').AsString);
end;
cds.Next;
end;
tystnaden

tystnaden (статус: Посетитель), 13 марта 2010, 13:40 [#4]:

С XML дело обстоит так же, может в структуре файла что то не так
У меня так устроен XML:

<?xml version="1.0" standalone="yes"?> <DATAPACKET Version="2.0"><METADATA><FIELDS><FIELD attrname="f1" fieldtype="string" WIDTH="20"/><FIELD attrname="f2" fieldtype="string" WIDTH="15"/><FIELD attrname="f3" fieldtype="string" WIDTH="30"/><FIELD attrname="f4" fieldtype="string" WIDTH="40"/></FIELDS><PARAMS DEFAULT_ORDER=""/></METADATA><ROWDATA></ROWDATA></DATAPACKET>

После добавления записей еще появляется тэг LOG
tystnaden

tystnaden (статус: Посетитель), 13 марта 2010, 13:43 [#5]:

Извиняюсь, такой тэг
<PARAMS CHANGE_LOG="1 0 4" DEFAULT_ORDER=""/>
Егор

Егор (статус: 10-ый класс), 13 марта 2010, 13:51 [#6]:

а если попробовать вывод не в ListView? в memo, к примеру?
и вообще, отладчиком пробовали проходить этот код?
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
tystnaden

tystnaden (статус: Посетитель), 13 марта 2010, 14:10 [#7]:

В Memo тоже самое , хотя если у ClientDataset установить IndexName в ChangeIndex то выводит две записи, Отладчик цикл проходит только два раза
Егор

Егор (статус: 10-ый класс), 13 марта 2010, 14:31 [#8]:

Цитата (tystnaden):

Отладчик цикл проходит только два раза

ну судя по симптомам, имеются лишь две записи
а если cds подключить к DBGrid?
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
tystnaden

tystnaden (статус: Посетитель), 13 марта 2010, 14:36 [#9]:

Вот например эта тестовая база файла XML:
<ROWDATA><ROW RowState="5" f1="Edit1" f2="Edit2"/><ROW RowState="13" f1="Edit1" f2="Edit2"/>
<ROW RowState="13" f1="ere" f2="rgr"/>
<ROW RowState="13" f1="11111111111111" f2="wwwwwwwww"/>
<ROW RowState="13" f1="rrrrrrrrr" f2="7 uy y j"/>
<ROW RowState="12" f1="Edit1" f2="Edit2"/></ROWDATA>

DBGrid показывает вообще одну запись, вот эту:
<ROW RowState="13" f1="rrrrrrrrr" f2="7 uy y j"/>
tystnaden

tystnaden (статус: Посетитель), 13 марта 2010, 14:48 [#10]:

Сейчас исполбзовал DbGrid и DbNavigator, и все што с их использованием сохранил, отоброжаеться, а сохраненное мной по старому все равно показывает одну запись
Егор

Егор (статус: 10-ый класс), 13 марта 2010, 17:17 [#11]:

хм...
а в файле это как отображается? может вы тогда их сохраняете неправильно? где-то по-мелочи накосячили, не заметили?
посмотрите, в чём будет разница, если сохраните "ручками" и через DBGrid
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
tystnaden

tystnaden (статус: Посетитель), 14 марта 2010, 05:39 [#12]:

Вот как раз если DBGrid и DbNavigator использовать то сохраняется нормально, видимо што то не дописываю...
Егор

Егор (статус: 10-ый класс), 14 марта 2010, 05:59 [#13]:

хм...
и всё же, в чём разница-то?
лучше файлы сравнивать hex-редактором
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
tystnaden

tystnaden (статус: Посетитель), 14 марта 2010, 06:09 [#14]:

По всей видимости DbNavigator использует свои способы сохранения данных...попробую узнать их
tystnaden

tystnaden (статус: Посетитель), 14 марта 2010, 16:30 [#15]:

Спасибо, тепереь работает
Вадим К

Вадим К (статус: Академик), 14 марта 2010, 19:42 [#16]:

Можно и оценку поставить:))
Галочка "подтверждения прочтения" - вселенское зло.
Егор

Егор (статус: 10-ый класс), 15 марта 2010, 01:49 [#17]:

Цитата (Вадим К):

надо заменить в коде вызов Edit на вызов insert

кхм... мда...
до такого я бы не додумался...
как-то думал, что в базе уже есть несколько записей
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Время сайта: 6 февраля 2012, 17:51
Ваше время: 6 февраля 2012, 13:51
Выполнено за 1.1 сек.
Рейтинг@Mail.ru