powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Отображение данных после сохранения записей
25 сообщений из 41, страница 1 из 2
Отображение данных после сохранения записей
    #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
Отображение данных после сохранения записей
    #39862128
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ularsoft,

как называется компонент TQuery, к которой привязан грид главной формы?
...
Рейтинг: 0 / 0
Отображение данных после сохранения записей
    #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
Отображение данных после сохранения записей
    #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
Отображение данных после сохранения записей
    #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
Отображение данных после сохранения записей
    #39862189
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ularsoftwadmanпропущено...

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

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

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

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

ularsoft, и вообще выполняй запрос через Connect.Execute() или как там у тебя. А потом Close-Open у qCash.
...
Рейтинг: 0 / 0
Отображение данных после сохранения записей
    #39862424
didgik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потом через Locate надо вернуть курсор на свое место если был апдейт. И еще, желательно, вернуть строчку в гриде на свое место, но это пока не знаю как.
...
Рейтинг: 0 / 0
Отображение данных после сохранения записей
    #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
Отображение данных после сохранения записей
    #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
Отображение данных после сохранения записей
    #39862570
ularsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ёёёёёДва красавца... А че? Работает же...
...
Рейтинг: 0 / 0
Отображение данных после сохранения записей
    #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
Отображение данных после сохранения записей
    #39862709
ularsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если клиент продает 100 долларов, покупает рубли, то остаток (доллары) 41000+100=41100, остаток (рубли) 150000-6383=143617, курс доллара к рублю по ЦБ РФ 63,83.
...
Рейтинг: 0 / 0
Отображение данных после сохранения записей
    #39862836
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не правильная постановка задачи.
Должно быть
1. Справочник валют
2. Начальное сальдо по валютам
3. Операции движения.

Конечное сальдо вычисляется как начальное+операции
...
Рейтинг: 0 / 0
Отображение данных после сохранения записей
    #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
Отображение данных после сохранения записей
    #39862856
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
didgik,

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

Два красавца...
Я то что не так сказал?Все хорошо. Не переживайте.
...
Рейтинг: 0 / 0
Отображение данных после сохранения записей
    #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
Отображение данных после сохранения записей
    #39862894
didgik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёёdidgik,

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

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


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