Jump to content

Ошибка "c.insert is not a function" при использовании TDataModule


x11

Recommended Posts

Для воспроизведения ошибки нажмите кнопку Append.

Я не могу понять, как правильно пользоваться дополнительными TDataModule.

Цель такова. Проект гибридный. Поэтому схема такая: две формы (мобильная и десктопная), но модуль данных TDataModule хочу, чтобы был один, в нем так же будут и какие-то общие одинаковые функцции и процедуры, например, функции удаления/добавления данных. Ведь таблицы, поля, SQL-запросы совершенно одинаковы что для мобильной части, что для декстопной. Нет смысла плодить наборы данных (TDataSet).

Если от сетки uniDBGrid отвязать набор данных FDQuery, то ошибки нет.

тестовый проект https://files.dp.ua/ru/U9CB

Screenshot_61.jpg

Link to comment
Share on other sites

Еще вариант -  это использовать DisableControls/EnableControls с последующим переоткрытием набора данных

 

    qGroups.DisableControls;
    qGroups.Append;
    qGroupsNAME.Value := AText;
    qGroups.Post;

    if qGroups.UpdateTransaction.Active then
      qGroups.UpdateTransaction.Commit;
    
    qGroups.EnableControls;
    qGroups.Close;
    qGroups.Open;

 

Link to comment
Share on other sites

При включенном свойстве BufferedStore еще одна проблема - при удалении записей.

Сетка как бы теряет связь то ли с источником данных (TDataSource), то ли з набором данных (TDataSet). И сетки (uniDBGrid) нет визуального эффекта, что запись выбрана, т.е. щелкаешь по сетке и ничего не происходит - запись не выбирается.

Т.е. после удаления я щелкаю по сетке, но в наборе данных позиция DB-курсора не меняется. Я даже добавил событие, чтобы убедиться:

procedure TfrdRefUsersRights.dbgGroupSelectionChange(Sender: TObject);
begin
  StatusBar.Panels[0].Text := dmRefUsersRights.qGroupsNAME.Value;
end;

но после удаления записи в панели статуса StatusBar всё время один и тот же текст, который был до удаления.

При этом переоткрытие набора данных (close/open) не помогает.

 

процедура удаления:

procedure TfrdRefUsersRights.ACallBackGroupDel(Sender: TComponent; AResult: Integer);
begin
  if AResult = mrNo then exit;

  dmRefUsersRights.qGroups.Delete;// DELETE FROM GROUPS WHERE ID = :Old_ID

  if dmRefUsersRights.qGroups.UpdateTransaction.Active then
    dmRefUsersRights.qGroups.UpdateTransaction.Commit;

  dmRefUsersRights.qGroups.Close;
  dmRefUsersRights.qGroups.Open;
end;

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...