Форум: "Базы";
Текущий архив: 2012.01.15;
Скачать: [xml.tar.bz2];
ВнизTClientDataSet - перевод в режим редактирования. Найти похожие ветки
← →
Чайник © (2010-03-29 14:01) [0]На форме DBGrid и DBNavigator.
dSetMain : TClientDataSet.
Данные в dSetMain грузятся из файла:
if FileExists(FileName) then begin
dSetMain.FileName := FileName;
dSetMain.LoadFromFile(FileName)
end else begin
dSetMain.EmptyDataSet;
dSetMain.SaveToFile(FileName, dfBinary);
end;
dSetMain.Open;
Если файл отсутствует и создается пустой набор - все работает, навигатором могу добавлять записи, править и т.д.
Если же данные читаются из файла, dSetMain переходит в режим dsBrouse и никакими силами в режим правки не перевести.
Пробовал принудительно в разных сочетаниях:
TexPassData.dSetMain.Append;
TexPassData.dSetMain.Insert;
TexPassData.dSetMain.Edit;
- никакого толку.
Что я делаю(или не делаю) неправильно???
← →
Сергей М. © (2010-03-29 15:44) [1]> Если файл отсутствует и создается пустой набор
Что-то не видать в твоем коде создания пустого набора
← →
Чайник © (2010-03-29 15:52) [2]
> Что-то не видать в твоем коде создания пустого набора
А зачем, если грузится из файла?
P.S. Попробовал вставить:if FileExists(FileName) then begin
dSetMain.FileName := FileName;
dSetMain.CreateDataSet;
dSetMain.LoadFromFile(FileName)
end else begin...
- те же яйца, только в профиль.
← →
sniknik © (2010-03-29 16:08) [3]вот это в первом лишнее
> dSetMain.FileName := FileName;
а вот это странное
> dSetMain.EmptyDataSet;
получается сначала чистим а после сохраняем...
> dSetMain.Open;
тоже тогда не нужен.
← →
Чайник © (2010-03-29 16:33) [4]
> вот это в первом лишнее> dSetMain.FileName := FileName;
Это действительно лишнее.
> а вот это странное> dSetMain.EmptyDataSet;получается сначала
> чистим а после сохраняем...
Просто надо застолбить файл хотя бы пустым набором.
← →
sniknik © (2010-03-29 16:47) [5]> Просто надо застолбить файл хотя бы пустым набором.
зачем?
еслиif FileExists(FileName) then
dSetMain.LoadFromFile(FileName)
else begin
dSetMain.CreateDataSet;
когда он будет использоваться, этот пустой набор?
← →
Чайник © (2010-03-29 17:04) [6]
> когда он будет использоваться, этот пустой набор?
В другом месте по существованию файла проверяются настройки.
Кстати, программным образом доступ к телу работает:TexPassData.dSetMain.Append;
TexPassData.dSetMain.FieldByName("idParent").AsInteger := 1;
TexPassData.dSetMain.FieldByName("KindPassport").AsInteger := 1;
TexPassData.dSetMain.FieldByName("Title").AsString := "Title";
TexPassData.dSetMain.Post;
И удаление записей тоже работает...
Может все дело в DBGrid или DBNavigator ?
← →
Сергей М. © (2010-03-29 17:19) [7]
> Чайник © (29.03.10 15:52) [2]
> А зачем, если грузится из файла?
Какой нафих файл, если его нет ?
А если он есть, но тогда нафих CreateDataSet и тем более EmptyDataSet ?
← →
Чайник © (2010-03-29 17:37) [8]
> Какой нафих файл, если его нет ?А если он есть, но тогда
> нафих CreateDataSet и тем более EmptyDataSet ?
ну нужен, нужен мне файл с нужным именем в нужном месте!!!
Я не об этом спрашиваю!
← →
Сергей М. © (2010-03-29 17:41) [9]Ну если явное программное обращение работает, то разглядывай внимательно грид, навигатор, дейтасурс и пр. - что-то в них не так
← →
Чайник © (2010-03-29 18:03) [10]
> Ну если явное программное обращение работает, то разглядывай
> внимательно грид, навигатор, дейтасурс и пр. - что-то в
> них не так
С утра разглядываю, на мыло изошел, ничё понять не могу!
← →
Сергей М. © (2010-03-29 18:05) [11]Ну и что говорит дейтасет при попытке перевести его в режим редактирования при посредничестве, например, навигатора ?
← →
Чайник © (2010-03-29 19:56) [12]
> Ну и что говорит дейтасет при попытке перевести его в режим
> редактирования при посредничестве, например, навигатора
> ?
Прошу прощения, сразу не ответил - пришлось отвлечься.
дата сет ничего не говорит - просто не переходит.
Смотрю исходники DBNavigator - нажатие кнопок вызывает те же методы датасета Insert, Edit и т.п. :procedure TDBNavigator.BtnClick(Index: TNavigateBtn);
begin
if (DataSource <> nil) and (DataSource.State <> dsInactive) then
begin
if not (csDesigning in ComponentState) and Assigned(FBeforeAction) then
FBeforeAction(Self, Index);
with DataSource.DataSet do
begin
case Index of
nbPrior: Prior;
nbNext: Next;
nbFirst: First;
nbLast: Last;
nbInsert: Insert;
nbEdit: Edit;
nbCancel: Cancel;
nbPost: Post;
nbRefresh: Refresh;
nbDelete:
if not FConfirmDelete or
(MessageDlg(SDeleteRecordQuestion, mtConfirmation,
mbOKCancel, 0) <> idCancel) then Delete;
end;
end;
end;
if not (csDesigning in ComponentState) and Assigned(FOnNavClick) then
FOnNavClick(Self, Index);
end;
И почему это не работает?
← →
sniknik © (2010-03-29 20:06) [13]> И почему это не работает?
с чего взял? у меня работает. вот сделай пример, все, что здесь говорил, в новом проекте. и ничего больше.
← →
dik59 (2010-03-29 21:03) [14]Извите, что вклиниваюсь, по дискуссии похоже, что навигатор с датасетом НЕ СВЯЗАН.
← →
Чайник © (2010-03-29 22:38) [15]
> Извите, что вклиниваюсь, по дискуссии похоже, что навигатор
> с датасетом НЕ СВЯЗАН.
Связан, связан. Я же говорю - когда датасет не грузится из файла, а создается dSetMain.CreateDataSet - все работает.
← →
Чайник © (2010-03-29 23:19) [16]
> sniknik © (29.03.10 20:06) [13].
> вот сделай пример, все, что здесь говорил, в новом проекте.
> и ничего больше.
Спасибо за дельный совет!
Действительно, в новом проекте все заработало.
Кажется разобрался, точнее не разобрался, а нашел болевую точку - у меня на другой форме с этим датасетом связан DBTreeView (который Dynamic DBTreeView). Как его отключил - все глюки исчезли.
Вот что значит использовать компоненты сторонних производителей...
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2012.01.15;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.003 c