Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Невозможно выполнить эту операцию для закрытого набора данных / 9 сообщений из 9, страница 1 из 1
22.10.2019, 13:36
    #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
22.10.2019, 13:41
    #39879896
ёёёёё
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Невозможно выполнить эту операцию для закрытого набора данных
ularsoft,

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

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

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

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

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

Именно об этом я и говорю: у тебя нет понимания как работает твоя программа. Поможет либо
консерватория либо многочасовая пошаговая отладка.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
22.10.2019, 14:20
    #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
22.10.2019, 14:29
    #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
22.10.2019, 14:41
    #39879947
ularsoft
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Невозможно выполнить эту операцию для закрытого набора данных
Все ребята, разобрался. Благодарю за помощь.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Невозможно выполнить эту операцию для закрытого набора данных / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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