-
На форме 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; - никакого толку. Что я делаю(или не делаю) неправильно???
-
> Если файл отсутствует и создается пустой набор
Что-то не видать в твоем коде создания пустого набора
-
> Что-то не видать в твоем коде создания пустого набора
А зачем, если грузится из файла? P.S. Попробовал вставить: if FileExists(FileName) then begin
dSetMain.FileName := FileName;
dSetMain.CreateDataSet;
dSetMain.LoadFromFile(FileName)
end else begin...
- те же яйца, только в профиль.
-
вот это в первом лишнее > dSetMain.FileName := FileName;
а вот это странное > dSetMain.EmptyDataSet; получается сначала чистим а после сохраняем...
> dSetMain.Open; тоже тогда не нужен.
-
> вот это в первом лишнее> dSetMain.FileName := FileName;
Это действительно лишнее.
> а вот это странное> dSetMain.EmptyDataSet;получается сначала > чистим а после сохраняем...
Просто надо застолбить файл хотя бы пустым набором.
-
> Просто надо застолбить файл хотя бы пустым набором. зачем? если if FileExists(FileName) then
dSetMain.LoadFromFile(FileName)
else begin
dSetMain.CreateDataSet; когда он будет использоваться, этот пустой набор?
-
> когда он будет использоваться, этот пустой набор?
В другом месте по существованию файла проверяются настройки. Кстати, программным образом доступ к телу работает: 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 ?
-
> Чайник © (29.03.10 15:52) [2] > А зачем, если грузится из файла?
Какой нафих файл, если его нет ? А если он есть, но тогда нафих CreateDataSet и тем более EmptyDataSet ?
-
> Какой нафих файл, если его нет ?А если он есть, но тогда > нафих CreateDataSet и тем более EmptyDataSet ?
ну нужен, нужен мне файл с нужным именем в нужном месте!!!
Я не об этом спрашиваю!
-
Ну если явное программное обращение работает, то разглядывай внимательно грид, навигатор, дейтасурс и пр. - что-то в них не так
-
> Ну если явное программное обращение работает, то разглядывай > внимательно грид, навигатор, дейтасурс и пр. - что-то в > них не так
С утра разглядываю, на мыло изошел, ничё понять не могу!
-
Ну и что говорит дейтасет при попытке перевести его в режим редактирования при посредничестве, например, навигатора ?
-
> Ну и что говорит дейтасет при попытке перевести его в режим > редактирования при посредничестве, например, навигатора > ?
Прошу прощения, сразу не ответил - пришлось отвлечься. дата сет ничего не говорит - просто не переходит. Смотрю исходники 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;
И почему это не работает?
-
> И почему это не работает? с чего взял? у меня работает. вот сделай пример, все, что здесь говорил, в новом проекте. и ничего больше.
-
Извите, что вклиниваюсь, по дискуссии похоже, что навигатор с датасетом НЕ СВЯЗАН.
-
> Извите, что вклиниваюсь, по дискуссии похоже, что навигатор > с датасетом НЕ СВЯЗАН.
Связан, связан. Я же говорю - когда датасет не грузится из файла, а создается dSetMain.CreateDataSet - все работает.
-
> sniknik © (29.03.10 20:06) [13]. > вот сделай пример, все, что здесь говорил, в новом проекте. > и ничего больше.
Спасибо за дельный совет! Действительно, в новом проекте все заработало. Кажется разобрался, точнее не разобрался, а нашел болевую точку - у меня на другой форме с этим датасетом связан DBTreeView (который Dynamic DBTreeView). Как его отключил - все глюки исчезли. Вот что значит использовать компоненты сторонних производителей...
|