Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Dataset not in edit or insert mode  [new]
registered
Member

Откуда:
Сообщений: 64
Dataset not in edit or insert mode

mysqltable7.Open;
mysqltable7.IndexName:='param';
MySQLTable7.Edit;
if MySQLTable7.findkey(['pass']) then
  begin

  end;


Почему? Программа была рабочая.
D7, mySQLDAC (работало даже без строчки с Edit).
9 авг 19, 06:07    [21945256]     Ответить | Цитировать Сообщить модератору
 Re: Dataset not in edit or insert mode  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 25729
Методу findkey не нужен режим редактирования... Это весь код?
9 авг 19, 07:54    [21945265]     Ответить | Цитировать Сообщить модератору
 Re: Dataset not in edit or insert mode  [new]
registered
Member

Откуда:
Сообщений: 64
связанный с MySQLTable7 - весь. до ошибки.
9 авг 19, 08:05    [21945268]     Ответить | Цитировать Сообщить модератору
 Re: Dataset not in edit or insert mode  [new]
zinpub
Member

Откуда:
Сообщений: 377
registered,

Возможно какие-то события висят на датасете? AfterScroll итп...
9 авг 19, 08:19    [21945275]     Ответить | Цитировать Сообщить модератору
 Re: Dataset not in edit or insert mode  [new]
Vlad F
Member

Откуда:
Сообщений: 865
registered,

Очевидно, FindKey выводит датасет из режима редактирования.
А ты, вероятно, пытаешься менять значения внутри IF.
9 авг 19, 08:31    [21945285]     Ответить | Цитировать Сообщить модератору
 Re: Dataset not in edit or insert mode  [new]
registered
Member

Откуда:
Сообщений: 64
Вероятно, старая версия компонент, и не поддерживает "новый" (5.5) MySQL. Писалось, когда ещё было 4.какой-то.
9 авг 19, 09:06    [21945305]     Ответить | Цитировать Сообщить модератору
 Re: Dataset not in edit or insert mode  [new]
Vlad F
Member

Откуда:
Сообщений: 865
registered,

Если после .Edit поставить Exit, ошибка не пропадет?
9 авг 19, 09:29    [21945316]     Ответить | Цитировать Сообщить модератору
 Re: Dataset not in edit or insert mode  [new]
Vlad F
Member

Откуда:
Сообщений: 865
registered,

Предыдущий вопрос отзываю.)) А если отладчиком по исходникам?
Ведь это же, очевидно, ошибка из VCL, а не стороны сервера.
9 авг 19, 09:50    [21945335]     Ответить | Цитировать Сообщить модератору
 Re: Dataset not in edit or insert mode  [new]
registered
Member

Откуда:
Сообщений: 64
Кинуло куда-то сюда:

constructor TmySQLBlobStream.Create(Field: TBlobField; Mode: TBlobStreamMode);
var
  OpenMode: DbiOpenMode;
begin
  FMode := Mode;
  FField := Field;
  FDataSet := FField.DataSet as TmySQLDataSet;
  FFieldNo := FField.FieldNo;
  if not FDataSet.GetActiveRecBuf(FBuffer) then Exit;
  if FDataSet.State = dsFilter then
    DatabaseErrorFmt(SNoFieldAccess, [FField.DisplayName], FDataSet);
  if not FField.Modified then
  begin
    if Mode = bmRead then
    begin
      FCached := FDataSet.FCacheBlobs and (FBuffer = FDataSet.ActiveBuffer) and
        (FField.IsNull or (FDataSet.GetBlobData(FField, FBuffer) <> ''));
      OpenMode := dbiReadOnly;
    end else
    begin
      FDataSet.SetBlobData(FField, FBuffer, '');
      if FField.ReadOnly then DatabaseErrorFmt(SFieldReadOnly,
        [FField.DisplayName], FDataSet);
      if not (FDataSet.State in [dsEdit, dsInsert]) then // dsSetKey
        DatabaseError(SNotEditing, FDataSet);
      OpenMode := dbiReadWrite;
    end;
    if not FCached then
    begin
      if FDataSet.State = dsBrowse then
        FDataSet.GetCurrentRecord(FDataSet.ActiveBuffer);
      Check(Engine, Engine.OpenBlob(FDataSet.Handle, FBuffer, FFieldNo, OpenMode));
    end;
  end;
  FOpened := True;
  if Mode = bmWrite then Truncate;
end;
9 авг 19, 11:51    [21945464]     Ответить | Цитировать Сообщить модератору
 Re: Dataset not in edit or insert mode  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 25729
registered
if Mode = bmRead then

В блоб пишешь всё таки.
9 авг 19, 11:56    [21945466]     Ответить | Цитировать Сообщить модератору
 Re: Dataset not in edit or insert mode  [new]
Vlad F
Member

Откуда:
Сообщений: 865
registered,

Ты весь стек вызовов на этой точке предъяви. Неужели FindKey его вызывало?
9 авг 19, 12:51    [21945538]     Ответить | Цитировать Сообщить модератору
 Re: Dataset not in edit or insert mode  [new]
registered
Member

Откуда:
Сообщений: 64
TmySQLBlobStream.Create(???,bmWrite)
TmySQLDataSet.CreateBlobStream(???,???)
TmySQLDataSet.SetKeyFields(???,(...))
TmySQLTable.FindKey(???)
TForm1.FormCreate(???)
9 авг 19, 13:09    [21945559]     Ответить | Цитировать Сообщить модератору
 Re: Dataset not in edit or insert mode  [new]
Vlad F
Member

Откуда:
Сообщений: 865
registered,

В этом самом датасет есть блоб-поля?
Попробуй добавить во множество в выделенной строке кода элемент dsSetKey или как там его.
9 авг 19, 13:14    [21945565]     Ответить | Цитировать Сообщить модератору
 Re: Dataset not in edit or insert mode  [new]
registered
Member

Откуда:
Сообщений: 64
Блобов нет.

Добавил dsSetKey в [dsEdit, dsInsert] - работает, только кодировки, видимо, не поддерживаются.
БД и таблицы были в utf-8, а в компоненте - не поддерживаются.
У mySQLDatabase пробовал задавать Charset в params.strings - не помогает.
Перевёл всю таблицу в cp1251, и отправляю команду "set names 'cp1251' collate 'cp1251_general_ci'", тогда - работает (если отправлять 'utf8' при БД и таблицах в utf8, тогда - нет).
Не знаю, насколько это правильно.
9 авг 19, 14:37    [21945650]     Ответить | Цитировать Сообщить модератору
 Re: Dataset not in edit or insert mode  [new]
Vlad F
Member

Откуда:
Сообщений: 865
registered,

А что авторы тех компонентов - скрылись?
9 авг 19, 14:51    [21945679]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить