Конференция "Базы" » TClientDataSet - перевод в режим редактирования.
 
  • Чайник © (29.03.10 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;
    - никакого толку.
    Что я делаю(или не делаю) неправильно???
  • Сергей М. © (29.03.10 15:44) [1]
    > Если файл отсутствует и создается пустой набор

    Что-то не видать в твоем коде создания пустого набора
  • Чайник © (29.03.10 15:52) [2]

    > Что-то не видать в твоем коде создания пустого набора


    А зачем, если грузится из файла?

    P.S. Попробовал вставить:

      if FileExists(FileName) then begin
         dSetMain.FileName := FileName;
         dSetMain.CreateDataSet;
         dSetMain.LoadFromFile(FileName)
      end else begin...



    - те же яйца, только в профиль.
  • sniknik © (29.03.10 16:08) [3]
    вот это в первом лишнее
    > dSetMain.FileName := FileName;

    а вот это странное
    > dSetMain.EmptyDataSet;
    получается сначала чистим а после сохраняем...

    > dSetMain.Open;
    тоже тогда не нужен.
  • Чайник © (29.03.10 16:33) [4]

    > вот это в первом лишнее> dSetMain.FileName := FileName;


    Это действительно лишнее.


    > а вот это странное> dSetMain.EmptyDataSet;получается сначала
    > чистим а после сохраняем...


    Просто надо застолбить файл хотя бы пустым набором.
  • sniknik © (29.03.10 16:47) [5]
    > Просто надо застолбить файл хотя бы пустым набором.
    зачем?
    если
    if FileExists(FileName) then
     dSetMain.LoadFromFile(FileName)
    else begin
     dSetMain.CreateDataSet;



    когда он будет использоваться, этот пустой набор?
  • Чайник © (29.03.10 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 ?
  • Сергей М. © (29.03.10 17:19) [7]

    > Чайник ©   (29.03.10 15:52) [2]
    > А зачем, если грузится из файла?


    Какой нафих файл, если его нет ?
    А если он есть, но тогда нафих CreateDataSet и тем более EmptyDataSet ?
  • Чайник © (29.03.10 17:37) [8]

    > Какой нафих файл, если его нет ?А если он есть, но тогда
    > нафих CreateDataSet и тем более EmptyDataSet ?


    ну нужен, нужен мне файл с нужным именем в нужном месте!!!

    Я не об этом спрашиваю!
  • Сергей М. © (29.03.10 17:41) [9]
    Ну если явное программное обращение работает, то разглядывай внимательно грид, навигатор, дейтасурс и пр. - что-то в них не так
  • Чайник © (29.03.10 18:03) [10]

    > Ну если явное программное обращение работает, то разглядывай
    > внимательно грид, навигатор, дейтасурс и пр. - что-то в
    > них не так


    С утра разглядываю, на мыло изошел, ничё понять не могу!
  • Сергей М. © (29.03.10 18:05) [11]
    Ну и что говорит дейтасет при попытке перевести его в режим редактирования при посредничестве, например, навигатора ?
  • Чайник © (29.03.10 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 © (29.03.10 20:06) [13]
    > И почему это не работает?
    с чего взял? у меня работает. вот сделай пример, все, что здесь говорил, в новом проекте. и ничего больше.
  • dik59 (29.03.10 21:03) [14]
    Извите, что вклиниваюсь, по дискуссии похоже, что навигатор с датасетом НЕ СВЯЗАН.
  • Чайник © (29.03.10 22:38) [15]

    > Извите, что вклиниваюсь, по дискуссии похоже, что навигатор
    > с датасетом НЕ СВЯЗАН.


    Связан, связан. Я же говорю - когда датасет не грузится из файла, а создается dSetMain.CreateDataSet - все работает.
  • Чайник © (29.03.10 23:19) [16]

    > sniknik ©   (29.03.10 20:06) [13].
    >  вот сделай пример, все, что здесь говорил, в новом проекте.
    >  и ничего больше.


    Спасибо за дельный совет!
    Действительно, в новом проекте все заработало.
    Кажется разобрался, точнее не разобрался, а нашел болевую точку - у меня на другой форме с этим датасетом связан DBTreeView (который Dynamic DBTreeView). Как его отключил - все глюки исчезли.
    Вот что значит использовать компоненты сторонних производителей...
 
Конференция "Базы" » TClientDataSet - перевод в режим редактирования.
Есть новые Нет новых   [134433   +22][b:0][p:0.002]