Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Отображение данных после сохранения записей / 25 сообщений из 41, страница 1 из 2
16.09.2019, 05:56
    #39862108
ularsoft
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение данных после сохранения записей
Здравствуйте, уважаемые форумчане!
Помогите решить проблему с отображением данных в гриде.
На главной форме (fmMain) программы использую DBGrid, TQuery, TDataSource. База данных MDB. В свойстве TQuery, SQL (select * from CashDok). Создал другую форму (fmChange1) для ввода новых записей в таблице CashDok.
Код: 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.
procedure TfmChange1.Button1Click(Sender: TObject);
begin
  Sum := 0;
  Bal := 0;
  if (Edit1.Text <> null) and (Edit2.Text <> null) then
  begin
    Sum := StrtoFloat(Edit2.text) * StrtoFloat(Edit1.Text);

    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:=Sum; // Сумма после обмена, т.е. Сумма * Курс
    dm.qCash.Prepare;
    dm.qCash.ExecSQL;
    fmChange1.Close;

    Bal := StrtoFloat(Edit4.Text) - StrtoFloat(Edit2.Text);
    Edit5.Text := FloatToStr(Round(Bal*100)/100); //FloatToStr(Bal);
    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;

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



После нажатия кнопки "Сохранить", новая запись сохраняется в таблице CashDok, но на главной форме в гриде таблица закрывается, соответственно не отображаются записи.
Использую следующее, но ни как не помогает.
Код: sql
1.
2.
3.
4.
5.
    dm.qCash.Refresh;
или
    fmMain.DBGridEh1.Refresh;
или
    dm.qCash.Active:=True;


Что я делаю не правильно. Помогите. Заранее благодарен.
...
Рейтинг: 0 / 0
16.09.2019, 08:14
    #39862128
ёёёёё
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение данных после сохранения записей
ularsoft,

как называется компонент TQuery, к которой привязан грид главной формы?
...
Рейтинг: 0 / 0
16.09.2019, 08:14
    #39862129
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение данных после сохранения записей
ularsoft
Код: sql
1.
2.
3.
    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)');


ularsoft
Код: sql
1.
2.
3.
4.
5.
    dm.qCash.Refresh;
или
    fmMain.DBGridEh1.Refresh;
или
    dm.qCash.Active:=True;


Один и тот же запрос для грида и вставки?
...
Рейтинг: 0 / 0
16.09.2019, 08:20
    #39862130
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение данных после сохранения записей
В модуле редактирования создайте функцию, которая будет создавать форму редактирования, заполнять предварительными значениями, показывать её, и возвращать результат. Сам Query-редактирования путь будет в форме, а не в DataModule, когда таких форм будет много, ваша DataModule отсанется не захламлённым
Код: pascal
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.
function fmChange1Show(TheInsert: boolean; Другие параметры): integer;
begin
  Result := -1;
  with TfmChange1.Create(Application) do begin
    // занести данные в контролы
    if TheInsert then begin
      Edit1.Text := 'какое то значение';
    end;
    if ShowModal = 1 then begin
      // произвести изменения в базе
      if TheInsert
        then Query.SQL.Text := 'insert into CashDok (cDate,cKod,cName,cCurs,cSum,cOper,cDiscount,TotalSum) values (:p1,:p2,:p3,:p4,:p5,:p6,:p7,:p8) return @@identity' 
        else Query.SQL.Text := 'update CashDok set cDate = :p1 where Id = :Id';
      Query.Prepare;
      Query.ParamByName('p1').Value := DateTimeToStr(Now); //Дата и время
       ...
      Query.ExecSQL;
      if TheInsert 
        then Result := Query.ParamByName('@RETURN_VALUE').Value // возвращаем Id новой строки
        else Result := Id;
      Free;
    end;
  end;
end; 



// в форме с гридом
procedure TMainFrm.ButtonUpdateClick(Sender: TObject);
var Id: integer;
begin
  Id := fmChange1Show(Sender=ButtonUpdate,.....); // вызываем форму редактирования
  if Id >= 0 then begin// данные успешно вставлены/изменены
    ShowAction.Execute; // перечитываем данные грида
    DatasetShow.Locate('Id',Id,[]); // позиционируем курсор на новой/изменённой записи
  end;
end;
...
Рейтинг: 0 / 0
16.09.2019, 10:34
    #39862169
ularsoft
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение данных после сохранения записей
wadmanularsoft
Код: sql
1.
2.
3.
    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)');


ularsoft
Код: sql
1.
2.
3.
4.
5.
    dm.qCash.Refresh;
или
    fmMain.DBGridEh1.Refresh;
или
    dm.qCash.Active:=True;


Один и тот же запрос для грида и вставки?Да, один и тот же.
...
Рейтинг: 0 / 0
16.09.2019, 11:30
    #39862189
ёёёёё
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение данных после сохранения записей
ularsoftwadmanпропущено...

пропущено...

Один и тот же запрос для грида и вставки?Да, один и тот же.
Надо книжку почитать.
...
Рейтинг: 0 / 0
16.09.2019, 13:49
    #39862276
goldmi45
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение данных после сохранения записей
ularsoftДа, один и тот же.
Если вы используете один компонент для просмотра (select * from CashDok) и вставки (insert into CashDok), то изменив SQL с просмотра на вставку и выполнив его, необходимо SQL опять заменить на просмотр (select* from CashDok).
А лучше использовать разные компоненты для просмотра и вставки.
...
Рейтинг: 0 / 0
16.09.2019, 14:22
    #39862313
ularsoft
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение данных после сохранения записей
goldmi45А лучше использовать разные компоненты для просмотра и вставки. Н-р, какие?
...
Рейтинг: 0 / 0
16.09.2019, 14:30
    #39862321
goldmi45
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение данных после сохранения записей
ularsoftgoldmi45А лучше использовать разные компоненты для просмотра и вставки. Н-р, какие?
Имеется в виду, разные TQuery на вставку и на отображение.
...
Рейтинг: 0 / 0
16.09.2019, 14:53
    #39862342
ularsoft
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение данных после сохранения записей
goldmi45ularsoftпропущено...
Н-р, какие?
Имеется в виду, разные TQuery на вставку и на отображение.Так и сделал dm.qCashMain для просмотра и dm.qCash для вставки. Все равно грид не обновляется в гл меню.
...
Рейтинг: 0 / 0
16.09.2019, 15:36
    #39862366
goldmi45
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение данных после сохранения записей
ularsoftgoldmi45пропущено...

Имеется в виду, разные TQuery на вставку и на отображение.Так и сделал dm.qCashMain для просмотра и dm.qCash для вставки. Все равно грид не обновляется в гл меню.
После вставки записи, набор данных должен быть перечитан. Т.е. выполнена операция Close-Open. Refresh обновляет существующие (ранее считанные) данные.
...
Рейтинг: 0 / 0
16.09.2019, 16:23
    #39862406
ёёёёё
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение данных после сохранения записей
goldmi45ularsoftпропущено...
Так и сделал dm.qCashMain для просмотра и dm.qCash для вставки. Все равно грид не обновляется в гл меню.
После вставки записи, набор данных должен быть перечитан. Т.е. выполнена операция Close-Open. Refresh обновляет существующие (ранее считанные) данные.
Это с чего такое нездоровое мнение?
...
Рейтинг: 0 / 0
16.09.2019, 16:38
    #39862421
didgik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение данных после сохранения записей
ёёёёёgoldmi45пропущено...

После вставки записи, набор данных должен быть перечитан. Т.е. выполнена операция Close-Open. Refresh обновляет существующие (ранее считанные) данные.
Это с чего такое нездоровое мнение?
Это здоровое мнение. Вариантов кроме Close-Open я тоже не знаю.

ularsoft, и вообще выполняй запрос через Connect.Execute() или как там у тебя. А потом Close-Open у qCash.
...
Рейтинг: 0 / 0
16.09.2019, 16:41
    #39862424
didgik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение данных после сохранения записей
Потом через Locate надо вернуть курсор на свое место если был апдейт. И еще, желательно, вернуть строчку в гриде на свое место, но это пока не знаю как.
...
Рейтинг: 0 / 0
17.09.2019, 07:04
    #39862550
ularsoft
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение данных после сохранения записей
didgikularsoft, и вообще выполняй запрос через Connect.Execute() или как там у тебя. А потом Close-Open у qCash.Сделал как вы сказали Close-Open и все хорошо,т.е.
Код: sql
1.
2.
3.
4.
    dm.qCash.Close;
    dm.qCash.SQL.Clear;
    dm.qCash.SQL.Add('select * from CashDok');
    dm.qCash.Open;
...
Рейтинг: 0 / 0
17.09.2019, 07:27
    #39862553
ёёёёё
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение данных после сохранения записей
ularsoftdidgikularsoft, и вообще выполняй запрос через Connect.Execute() или как там у тебя. А потом Close-Open у qCash.Сделал как вы сказали Close-Open и все хорошо,т.е.
Код: sql
1.
2.
3.
4.
    dm.qCash.Close;
    dm.qCash.SQL.Clear;
    dm.qCash.SQL.Add('select * from CashDok');
    dm.qCash.Open;


Два красавца...
...
Рейтинг: 0 / 0
17.09.2019, 08:33
    #39862570
ularsoft
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение данных после сохранения записей
ёёёёёДва красавца... А че? Работает же...
...
Рейтинг: 0 / 0
17.09.2019, 11:28
    #39862691
ularsoft
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение данных после сохранения записей
Ребята, теперь возникла другая проблема :(
Имеется справочник валют (таблица - SprVal) с остатками: v_kod vOboz vName vBalance840USDДоллары США41000978EURЕвро60000643RUBРоссийские рубли150000При обмене одной валюты на другую, н-р, доллары США на Российские рубли, остаток (доллары США) увеличивается, остаток (Российские рубли) уменьшается.
Увеличение по первой валюте делаю следующим образом:
Код: sql
1.
2.
3.
4.
5.
6.
7.
    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;

Где Edit4.Text - Остаток, Edit2.Text - Сумма. Как сделать уменьшение по второй валюте? Подскажите пожалуйста.
...
Рейтинг: 0 / 0
17.09.2019, 11:44
    #39862709
ularsoft
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение данных после сохранения записей
Если клиент продает 100 долларов, покупает рубли, то остаток (доллары) 41000+100=41100, остаток (рубли) 150000-6383=143617, курс доллара к рублю по ЦБ РФ 63,83.
...
Рейтинг: 0 / 0
17.09.2019, 13:41
    #39862836
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение данных после сохранения записей
Не правильная постановка задачи.
Должно быть
1. Справочник валют
2. Начальное сальдо по валютам
3. Операции движения.

Конечное сальдо вычисляется как начальное+операции
...
Рейтинг: 0 / 0
17.09.2019, 13:44
    #39862838
didgik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение данных после сохранения записей
ёёёёёularsoftпропущено...
Сделал как вы сказали Close-Open и все хорошо,т.е.
Код: sql
1.
2.
3.
4.
    dm.qCash.Close;
    dm.qCash.SQL.Clear;
    dm.qCash.SQL.Add('select * from CashDok');
    dm.qCash.Open;


Два красавца...
Я то что не так сказал?
...
Рейтинг: 0 / 0
17.09.2019, 14:07
    #39862856
ёёёёё
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение данных после сохранения записей
didgik,

код рабочий, все отлично!
...
Рейтинг: 0 / 0
17.09.2019, 14:24
    #39862876
ularsoft
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение данных после сохранения записей
didgikёёёёёпропущено...

Два красавца...
Я то что не так сказал?Все хорошо. Не переживайте.
...
Рейтинг: 0 / 0
17.09.2019, 14:38
    #39862885
ularsoft
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение данных после сохранения записей
DimaBrНе правильная постановка задачи.
Должно быть
1. Справочник валют
2. Начальное сальдо по валютам
3. Операции движения.

Конечное сальдо вычисляется как начальное+операцииВсе это у меня есть.
Справочник валют (таблица - SprVal) с остатками: v_kod vOboz vName vBalance840USDДоллары США41000978EURЕвро60000643RUBРоссийские рубли150000Начальное сальдо по валютам: iDate iKod iOboz iName iSum iKom17.09.2019 08:58:56840USDДоллары США41000Приход17.09.2019 09:55:24840EURЕвро60000Приход17.09.2019 11:39:36643RUBРоссийские рубли150000ПриходОперации движения: cDate cKod cName cCurs cSum cOper cDiscount TotalSum17.09.2019 12:05:09840Доллары США63.83500Покупка03191517.09.2019 14:25:17840Доллары США63.83500Покупка03191517.09.2019 16:10:58978Евро70.75400Покупка028300Может я не правильно делаю? Помогите пожалуйста.
...
Рейтинг: 0 / 0
17.09.2019, 14:45
    #39862894
didgik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отображение данных после сохранения записей
ёёёёёdidgik,

код рабочий, все отлично!
Нет! А чо я сделал то?

Скажи уж, как надо то, не томи.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Отображение данных после сохранения записей / 25 сообщений из 41, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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