powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Невозможно выполнить эту операцию для закрытого набора данных
9 сообщений из 9, страница 1 из 1
Невозможно выполнить эту операцию для закрытого набора данных
    #39879891
ularsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не могу понять... Что это значит?
Первая покупка прошла успешно. Вторая покупка не проходить. Не знаю, что происходить?

Шаг 1: Открываю форму - fmchange1
Код: sql
1.
2.
3.
4.
procedure TfmMain.BitBtn2Click(Sender: TObject);
begin
  fmchange1.showmodal;
end;


Шаг 2: Выполняю функцию - SelectCursChange1
Код: sql
1.
2.
3.
4.
5.
procedure TfmChange1.dxButtonEdit1ButtonClick(Sender: TObject;
  AbsoluteIndex: Integer);
begin
  uCursvl.SelectCursChange1;
end;


Шаг 3: Открываю fmCursvl
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
unction SelectCursChange1 : boolean;
begin
  d := Trunc(Now);
   with fmCursvl, dm do
   try
       fmCursvl := TfmCursvl.Create(Application);
       Caption := 'Курсы валют';

         qCursvl.Close;
         qCursvl.SQL.Clear;
         qCursvl.SQL.Add('select * from Cursvl where kv_Date between :d1 and :d2');
         qCursvl.ParamByName('d1').AsDateTime := d;
         qCursvl.ParamByName('d2').AsDateTime := d + 1;
         qCursvl.Open;

       repeat
          ShowModal;
          qCursVl.CheckBrowseMode;

//Для покупателя
          fmChange1.dxButtonEdit1.Text := dm.qCursVlkv_name.AsString; //Название 1 валюты
          fmChange1.dxButtonEdit2.Text := dm.qCursVlkv_name2.AsString; //Название 2 валюты

          if not dm.qSprVal.Locate('vOboz', fmChange1.dxButtonEdit1.Text, []) then
          begin
            fmChange1.Edit4.Text := dm.qSprValvBalance.AsString; {Наличность 1 валюты}
          end;

          if dm.qCursVlkv_name.AsString=fmChange1.dxButtonEdit1.Text then
          begin
          fmChange1.Edit4.Text := dm.qSprValvBalance.AsString; {Наличность 1 валюты}
          end;

          fmChange1.Edit1.Text := dm.qCursVlkv_curs_pok.AsString; {Курс валюты}

          if not dm.qSprVal.Locate('vOboz', fmChange1.dxButtonEdit2.Text, []) then
          begin
            fmChange1.Edit6.Text := dm.qSprValvBalance.AsString; {Наличность 2 валюты}
          end;

          if dm.qCursVlkv_name2.AsString='KGS' then
          begin
          fmChange1.Edit6.Text := dm.qSprValvBalance.AsString; //Наличность 2 валюты
          end;

       until ((ModalResult = mrOk))or(ModalResult = mrCancel);
       Result := ModalResult= mrOk;
   finally
     fmCursvl.Close;

   end;
end;


Шаг 4: Сохраняю результат
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
procedure TfmChange1.Button1Click(Sender: TObject);
begin
  Sum := 0;
  Bal := 0;
  d := Trunc(Now);
  if (Edit1.Text <> null) and (Edit2.Text <> null) then
  begin
    Sum := StrtoFloat(Edit2.text) * StrtoFloat(Edit1.Text);
//***
    BalKGS := StrtoFloat(Edit6.Text) - StrtoFloat(Edit2.Text) * StrtoFloat(Edit1.Text);
    if BalKGS<0 then
    begin
      ShowMessage('Нарущение остатка по национальной валюте!');
    end
    else
    begin
//***
    dm.qCash.close;
    dm.qCash.sql.Clear;
    dm.qCash.sql.Add('insert into CashDok (cDate,cKod,cName,cCurs,cSum,cOper,cDiscount,TotalSum) values (:p1,:p2,:p3,:p4,:p5,:p6,:p7,:p8)');
    dm.qCash.ParamByName('p1').Value:=DateTimeToStr(Now);
    dm.qCash.ParamByName('p2').Value:=0;
    dm.qCash.ParamByName('p3').Value:=dxButtonEdit1.Text;
    dm.qCash.ParamByName('p4').Value:=Edit1.Text;
    dm.qCash.ParamByName('p5').Value:=Edit2.Text;
    dm.qCash.ParamByName('p6').Value:='Покупка';
    dm.qCash.ParamByName('p7').Value:=Edit3.Text;
    dm.qCash.ParamByName('p8').Value:=Round(Sum*100)/100;
    dm.qCash.Prepare;
    dm.qCash.ExecSQL;
    beep;
    fmChange1.Close;
//Операции за текущий день
    dm.qCash.Close;
    dm.qCash.SQL.Clear;
    dm.qCash.SQL.Add('select * from CashDok where cDate between :d1 and :d2');
    dm.qCash.ParamByName('d1').AsDateTime := d;
    dm.qCash.ParamByName('d2').AsDateTime := d + 1;
    dm.qCash.Open;
//Увеличение купленной валюты
    Bal := StrtoFloat(Edit4.Text) + StrtoFloat(Edit2.Text);
    Edit5.Text := FloatToStr(Round(Bal*100)/100);
    dm.qSprVal.close;
    dm.qSprVal.sql.Clear;
    dm.qSprVal.sql.Add('update SprVal set vBalance = '''+ Edit5.Text +''' where vOboz = '''+ dxButtonEdit1.Text+'''');
    dm.qSprVal.Prepare;
    dm.qSprVal.ExecSQL;

//Уменьшение проданной валюты
    BalKGS := StrtoFloat(Edit6.Text) - StrtoFloat(Edit2.Text) * StrtoFloat(Edit1.Text);
      Edit6.Text := FloatToStr(Round(BalKGS*100)/100);
      dm.qSprVal.close;
      dm.qSprVal.sql.Clear;
      dm.qSprVal.sql.Add('update SprVal set vBalance = '''+ Edit6.Text +''' where vOboz = '''+dxButtonEdit2.Text+'''');
      dm.qSprVal.Prepare;
      dm.qSprVal.ExecSQL;

//***
    end
//***
  end
    else
    ShowMessage('Не все поля заполнены');
end;



Делаю вторую покупку и сразу после выбора валюты с курсами, получаю ошибку: "qSprVal: Cannot perform this operation on a closed dataset", т.е. "qSprVal: Невозможно выполнить эту операцию для закрытого набора данных".

Не могу понять... Где моя ошбика? Помогите разобраться...
...
Рейтинг: 0 / 0
Невозможно выполнить эту операцию для закрытого набора данных
    #39879896
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ularsoft,

ну какой строчке - то ошибка?
...
Рейтинг: 0 / 0
Невозможно выполнить эту операцию для закрытого набора данных
    #39879902
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ularsoftГде моя ошбика?

Если брать ситуацию в целом - твоя ошибка в отсутствии контроля над execution flow.
Поэтому ты получаешь неожиданную последовательность операций и не можешь гарантировать
нужное состояние набора данных в нужный момент.

Либо правь консерваторию, либо используй пошаговую отладку чтобы найти момент когда
qSprVal неожиданно закрывается или не открывается.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Невозможно выполнить эту операцию для закрытого набора данных
    #39879911
ularsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

Первая покупка проходить успешно, а вот вторая не проходить. Но я же не закрываю таблицу qSprVal :)
...
Рейтинг: 0 / 0
Невозможно выполнить эту операцию для закрытого набора данных
    #39879923
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ularsoft,

Из приведенного, однако, не видно и где ты его открываешь.
...
Рейтинг: 0 / 0
Невозможно выполнить эту операцию для закрытого набора данных
    #39879924
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ularsoftНо я же не закрываю таблицу qSprVal :)

Именно об этом я и говорю: у тебя нет понимания как работает твоя программа. Поможет либо
консерватория либо многочасовая пошаговая отладка.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Невозможно выполнить эту операцию для закрытого набора данных
    #39879928
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ularsoft. Но я же не закрываю таблицу qSprVal :)Это не ваш код?
ularsoft
Код: pascal
1.
2.
3.
4.
5.
    Edit5.Text := FloatToStr(Round(Bal*100)/100);
    dm.qSprVal.close;
    dm.qSprVal.sql.Clear;
    dm.qSprVal.sql.Add('update SprVal set vBalance = '''+ Edit5.Text +''' where vOboz = '''+ dxButtonEdit1.Text+'''');
    dm.qSprVal.Prepare;
...
Рейтинг: 0 / 0
Невозможно выполнить эту операцию для закрытого набора данных
    #39879936
ularsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_ularsoft. Но я же не закрываю таблицу qSprVal :)Это не ваш код?
ularsoft
Код: pascal
1.
2.
3.
4.
5.
    Edit5.Text := FloatToStr(Round(Bal*100)/100);
    dm.qSprVal.close;
    dm.qSprVal.sql.Clear;
    dm.qSprVal.sql.Add('update SprVal set vBalance = '''+ Edit5.Text +''' where vOboz = '''+ dxButtonEdit1.Text+'''');
    dm.qSprVal.Prepare;

Да, это мой код... И где мне открыть заново доступ к таблице qSprVal ?
...
Рейтинг: 0 / 0
Невозможно выполнить эту операцию для закрытого набора данных
    #39879947
ularsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все ребята, разобрался. Благодарю за помощь.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Невозможно выполнить эту операцию для закрытого набора данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]