![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Здравствуйте. Такой вопрос. Какое условие нужно, чтобы при закрытии приложения запись либо добавилась если таковой не было , либо изменилась старая без добавления новой строки.
|
|
#2
|
|||
|
|||
|
Какая запись? Куда запись?
Ты бы подробнее описал... |
|
#3
|
|||
|
|||
|
Цитата:
Затем нажимаю кнопку расчета и получаются результирующие данные. Далее при закрытии приложения исходные данные сохраняются в таблице исходн. данных, а результаты в таблице результатов. Вот так добавляются данные в таблицу : Код:
if not (ComboBox1.Text='') then
begin
if not Table1.Locate('Projname',ComboBox1.Text,[]) then
begin
Table1.Insert;
Table1.FieldByname('Projname').AsString:=ComboBox1.Text;
Form1.Caption:=Table1.FieldByname('Projname').AsString;
Table1.Post;- если проект не найден, то в табл 2 и табл 3 вводится новая запись. А -если найден , то записи в табл 2 и табл 3 редактируются. Каким условием задать будут ли записи в табл 2 и табл 3 добавляться или редактироваться старые? Вообще как сделать, что если не было никаких действий то просто без вызова соответствующего диалогового окна? Я сначала думал сравнивать количество строк в табл 1 в момент запуска приложения с колич. строк в табл 1 в момент закрытия, но тут может быть так, пользователь создал новый проект , но расчет не сделал и нажал кнопку выйти, а дальше сохранить. В результате в табл 3 записались нули. |
|
#4
|
|||
|
|||
|
нифига не понял...
В принципе, у тебя в коде почти все есть. Пусть будет так: Если пользователь ничего не сделал, то в ComboBox1 ничего не введено, соотв. делать ничего не надо. Если пользователь все-таки что-то делал, то в ComboBox1 есть текст и надо принять решение о том надо ли добавлять запись или редактировать существующую. Т.О. получаем примерно такой код (на закрытие приложения?): Код:
if not (ComboBox1.Text='') then
begin
if not Table1.Locate('Projname',ComboBox1.Text,[])
then
begin
Table1.Insert;
Table2.Insert;
Table3.Insert;
end
else
begin
Table1.Edit;
Table2.Edit;
Table3.Edit;
end;
Table1.FieldByname('Projname').AsString:=ComboBox1.Text;
Form1.Caption:=Table1.FieldByname('Projname').AsString;
Table2.FieldByName('...').AsString := ...
Table3.FieldByName('...').AsInteger := StrToInt(...);
Table1.Post;
Table2.Post;
Table3.Post;
end; |
|
#5
|
|||
|
|||
|
Что не понятно?
|
|
#6
|
|||
|
|||
|
Цитата:
У меня 1 обработчик добавляет запись в таб 1. Второй когда закрывается приложение. |
|
#7
|
|||
|
|||
|
ну, я так понимаю, что это для обработчика на закрытие приложения.
|
|
#8
|
|||
|
|||
|
Может быть так ,что сначала добавляется проект в табл 1, и приложение закрывается. Далее при открытии приложения и выбрав нужный проект нажав на кнопку расчета и закрыв приложение ,тот как поставить условие на добавление новой записи?
И ещё , например открыв приложение и выбрав уже существующий проект, то как поставить условие на редактирование уже существующей записи ? |
|
#9
|
|||
|
|||
|
Может быть так ,что сначала добавляется проект в табл 1, и приложение закрывается без добавления записей в табл 2 и табл 3. Далее при открытии приложения и выбрав нужный проект нажав на кнопку расчета и закрыв приложение ,тот как поставить условие на добавление новой записи?
И ещё , например открыв приложение и выбрав уже существующий проект, то как поставить условие на редактирование уже существующей записи ? |
|
#10
|
|||
|
|||
|
Да проще всегда создавать записи в доп таблицах. Записи с пустыми полями много не потребляют.
Ну а условие на добавление записей, если уж очень хочется, надо делать примерно так: Код:
Если расчет произведен (например, заполнены соотв. поля на форме) то
(
Если запись с нужным ключем есть
(
то редактировать запись
инаяе создать запись
)
заполнить поля записи
сохранить запись
) |
|
#11
|
|||
|
|||
|
Код:
if not (ComboBox1.Text='') then
begin
if not Table1.Locate('Projname',ComboBox1.Text,[]) then
begin
Table2.Insert;
Table3.Insert;
end
else
begin
Table2.Edit;
if Edit1.Text<>'' then Table2.FieldByName('Dmin').AsString:=Edit1.Text;
.....................
Table2.Post;
Table3.Edit;
for i:=0 to n do
begin
Table3.Insert;
Table3.FieldByName('Cy1').AsString:=floattostr(Cy1[i]);
................................
Table3.Post;
end;
end;Последний раз редактировалось Maks19, 22.07.2019 в 22:36. |
|
#12
|
|||
|
|||
|
Скобки (в смысле begin..end) надо правильно расставлять.
|
|
#13
|
|||
|
|||
|
Не понимаю ,что не так.
|
|
#14
|
|||
|
|||
|
А не, не только в скобках дело.
В блоке else для Table3 что ты делаешь? См. строку 17. Правильно - делаешь вставку. Вот тебе и добавляется доп. записи. Там надо находить нужную и для нее делать Table3.Edit. Table3.Edit включает режим редактирования ЗАПИСИ, а НЕ таблицы. Просто у тебя нет понимания как же это все работает. |
|
#15
|
|||
|
|||
|
Цитата:
Код:
Table3.Insert; Цитата:
|