Dataset not in edit or insert mode

registered
Дата: 09.08.2019 06:07:21
Dataset not in edit or insert mode

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

  end;


Почему? Программа была рабочая.
D7, mySQLDAC (работало даже без строчки с Edit).
wadman
Дата: 09.08.2019 07:54:14
Методу findkey не нужен режим редактирования... Это весь код?
registered
Дата: 09.08.2019 08:05:24
связанный с MySQLTable7 - весь. до ошибки.
zinpub
Дата: 09.08.2019 08:19:22
registered,

Возможно какие-то события висят на датасете? AfterScroll итп...
Vlad F
Дата: 09.08.2019 08:31:27
registered,

Очевидно, FindKey выводит датасет из режима редактирования.
А ты, вероятно, пытаешься менять значения внутри IF.
registered
Дата: 09.08.2019 09:06:40
Вероятно, старая версия компонент, и не поддерживает "новый" (5.5) MySQL. Писалось, когда ещё было 4.какой-то.
Vlad F
Дата: 09.08.2019 09:29:17
registered,

Если после .Edit поставить Exit, ошибка не пропадет?
Vlad F
Дата: 09.08.2019 09:50:18
registered,

Предыдущий вопрос отзываю.)) А если отладчиком по исходникам?
Ведь это же, очевидно, ошибка из VCL, а не стороны сервера.
registered
Дата: 09.08.2019 11:51:14
Кинуло куда-то сюда:

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;
wadman
Дата: 09.08.2019 11:56:34
registered
if Mode = bmRead then

В блоб пишешь всё таки.