|
|
Регистрация | << Правила форума >> | 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; Цитата:
|