|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
28.04.2009, 07:20 | #1 |
Регистрация: 29.06.2007
Сообщений: 4
|
изменить запись в наборе DataSet не внося изменение в БД
Озадачился вопросом касательно DataSet в Delphi.
Можно ли в наборе DataSet'a (например ADODataSet) изменять запись (модифицировать, например, добавление чего-то к строке), так что-бы DataSet не вносил изменения в саму БД. А то модификация записи в наборе DataSet сразу вносится в БД. Может быть есть такая возможность, как например у датасета в .Net, есть такая возможность, как dataset.addnew(), а вот в delphi не нашел... Или надо копать в сторону кэширования? |
28.04.2009, 08:07 | #2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Ну вообще-то ты в набор можеш вносить все что угодно и в БД это не попадет, пока ты не выполниш методы слива инфы в нее типа Post или Flush.
I'm learning to live...
|
28.04.2009, 13:06 | #3 | |
Регистрация: 29.06.2007
Сообщений: 4
|
Цитата:
Работаю с формированием отчета используя компоненты из Fast Report. Работает, но не так как надо. Плюс добавляется как в отчет, так и заноситься в БД. procedure TForm1.frxDBDataset1Next (Sender: TObject); begin if vartostr(frxDBDataset1.DataSet.Fiel dValues['PLUS'])='1' then begin frxDBDataset1.DataSet.Edit; frxDBDataset1.DataSet.FieldValues['answer']:='+'+frxDBDataset1.DataSet.FieldVa lues['answer']; end; end. Данный код висит на событии OnNext. Т.к. по сути этот датасет (frxDatabase1) и призван передавать в отчет набор данных, никоим образом не затрагивая записи в БД. Или я ошибаюсь? frxDBDataset1 связан с таблицей Answers в БД (создал в аксесе для примера) через компонент ADOTable1. Что-то я делаю неправильно, но вот что? Разбираюсь. Или может лучше тогда обработку каждой записи повесить на ADOTable? |
|
28.04.2009, 13:34 | #4 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Ой... А зачем тебев БД + кидать?
Если он важен только в отображении, то и добавляй его в соответствующем событии от FRеport в текст компонента отображения. Вот например в Qreport есть событие OnPrint. Там и прописывается для отображения дополнения. Типа такого Код:
I'm learning to live...
Последний раз редактировалось Stilet; 28.04.2009 в 13:37. |
28.04.2009, 15:43 | #5 |
Форумчанин
Регистрация: 06.03.2009
Сообщений: 583
|
Может через транзакции попробовать?
Код:
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
|
31.08.2009, 13:15 | #6 | |
Пользователь
Регистрация: 03.07.2008
Сообщений: 11
|
Цитата:
Dataset methods that change the dataset state, such as Edit, Insert, or Append, or that move from one record to another, such as First, Last, Next, and Prior automatically call Post. Как бы так извратиться, чтоб автоматический пост не вызывался? У меня есть DBGrid и я хочу вносить изменения в базу после редактирования только после нажатия кнопки "save to DB", а по умолчанию все сохраняется автоматом |
|
31.08.2009, 13:24 | #7 |
SQL-коддинг
Участник клуба
Регистрация: 16.01.2009
Сообщений: 1,192
|
тогда нужно заводить дублирующий датасет или мемори_дата или мемори_тейбл и с ними работать при отображении/редактировании в дбгриде
т.е. все изменения будут висеть в памяти (заведешь доп.поле, в котором будет висеть флаг изменения) и по кнопке "Сохранить" будешь пробегать по датасету и в зависимости от состояния флага в доп.поле вставлять/обновлять/удалять данные из основной таблицы |
31.08.2009, 13:40 | #8 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
I'm learning to live...
|
|
31.08.2009, 14:30 | #9 |
Пользователь
Регистрация: 03.07.2008
Сообщений: 11
|
soleil@mmc , уж больно закрученый способ, наверняка есть какой нибудь человечный вариант.
Stilet Видимо разработчики компонент подкрутили (юзаю Delphi 2009) |
31.08.2009, 14:51 | #10 |
SQL-коддинг
Участник клуба
Регистрация: 16.01.2009
Сообщений: 1,192
|
человечный вариант это делать отдельную форму редактирования записи
в каждый конкретный момент редактируется одна запись еще стоит учесть, что 90% данных, которые нужно редактировать в нормальной проге представляют из себя смесь данных из нескольких таблиц |
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Зависание при наборе определенных слов | mus-chek | Microsoft Office Word | 12 | 01.11.2008 08:20 |
dataset | sergei64_89 | Общие вопросы .NET | 1 | 19.09.2008 20:14 |
DataSet | nimf | БД в Delphi | 3 | 28.01.2008 23:03 |
при ручном наборе некоторые процедуры неработают? | zAlexandrz | Общие вопросы Delphi | 8 | 10.11.2007 18:43 |