![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Здравствуйте.
Из одной таблицы удаление: Код:
if
(Table1.RecordCount>0) then
begin
u:=MessageDlg('Удалить проект?',mtCustom,[mbYes,mbNo],0);
if u=mrYes then
begin
Table1.Delete;
//Table2.Delete;
end;
Но в связанных с таблицей 1, таблицах записи не удаляются. Я понимаю , что есть каскадное удаление, но там при удалении ошибка появлялась. И второй вопрос. Что надо добавить в строке u:=MessageDlg('Удалить проект?',mtCustom,[mbYes,mbNo],0); чтобы в диалоговом окне удалить проект стояло ,то что введено в таблицу 1, т.е в combobox? Последний раз редактировалось Maks19, 17.07.2019 в 20:53. |
|
#2
|
|||
|
|||
|
на второй вопрос:
Код:
u:=MessageDlg('Удалить проект '+Table1.FieldByName('...').AsSTring + '?',mtCustom,[mbYes,mbNo],0);На первый вопрос. Если база - СУБД (MS SQL, Oracle, Interbase, etc), то действительно можно применять каскадное удаление.Тогда БД сама по ключам удалит нужные записи. Если БД локальная (типа Paradox, dBase), то придется удалять руками. Т.е. из главной таблицы запоминаешь уникальный id записи, удаляешь из подчиненных таблиц записи с соотв. значением, указывающем на главную запись и в конце удаляешь соотв. запись из главной таблицы. |
|
#3
|
|||
|
|||
|
Цитата:
На запись Код:
u:=MessageDlg('Удалить проект'+'Table1.FieldByname('Projname').AsString'+'?',mtCustom,[mbYes,mbNo],0); |
|
#4
|
|||
|
|||
|
Цитата:
|
|
#5
|
|||
|
|||
|
не просто не там, а по своей инициативе добавил лишних...
|
|
#6
|
|||
|
|||
|
Цитата:
|
|
#7
|
|||
|
|||
|
Цитата:
Ну есть же у тебя какое-то поле, по которому осуществляется связь таблиц. Вот оно и является id записи в главной таблице... |
|
#8
|
|||
|
|||
|
Код:
Table3.Delete |
|
#9
|
|||
|
|||
|
Ага, именно в цикле.
Тут интересный вопрос, что у тебя в таблице. Если она уже отфильтрована что бы показывать только те записи, которые тебе нужны, то просто надо удалить все записи. Если же там вообще все записи, то тогда надо делать проверку. Например, как-то так (код не проверял): Код:
Table3.first;
while not Table3.eof do
if Table3.FieldByName('...').AsInteger = ... // условие на поиск записи, которые надо удалять
Then Table3.Delete
Else Table3.Next; |
|
#10
|
|||
|
|||
|
Код:
var
DS : TDataSource;
procedure TForm1.DBGrid1Enter(Sender: TObject);
begin
DS := DataSource1;
end;
procedure TForm1.DBGrid2Enter(Sender: TObject);
begin
DS := DataSource2;
Table1.Refresh;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
if DS = DataSource1 then //Если активно DBGrid1
begin
if Table2.RecordCount <> 0 then
if MessageDlg('Удалить все записи из таблицы Table1 и Table2?',mtCustom,[mbYes,mbNo],0) = mrNo then exit
else
begin
Table2.First; // Установка позиции курсора на начало таблицы Table2
for i := 1 to Table2.RecordCount do Table2.Delete; //цикл удаления всех записей в дочерней Table2
end;
if Table1.RecordCount <> 0 then Table1.Delete; // Далее удаление записи в главной Table1
end
else //иначе удаляем выделенную запись из таблицы Table2
if DS = DataSource2 then //Если активно DBGrid2
begin
if Table2.RecordCount <> 0 then
if MessageDlg('Удалить выделенную запись из таблицы Table2?',mtCustom,[mbYes,mbNo],0) = mrNo then exit
else
Table2.Delete;
end;lmikle: Пользуемся тегами. Последний раз редактировалось lmikle, 29.07.2019 в 23:44. |
| Этот пользователь сказал Спасибо Zerg06969_ за это полезное сообщение: | ||
Maks19 (06.08.2019)
| ||
|
#11
|
|||
|
|||
|
Здравствуйте! Как сделать чтобы при удалении записи из таблицы удалилась строка в комбобоксе? Т. е изначально при вводе в комбокс текст попадает в таблицу.
По коду привед. ниже удаляется строка в комбобокс, но она не соответствует выбранной записи в таблице. Код:
for i:=0 to ComboBox1.Items.Count do ComboBox1.Items.Delete(i-1); |
|
#12
|
|||
|
|||
|
Этот код вообще должен с ошибкой выпадать...
Код:
var Idx : Integer; begin DeletedProjectName := '...'; ... Idx := ComboBox1.Items.IndexOf(DeletedProjectName); If Idx > -1 Then ComboBox1.Items.Delete(Idx); end; |
|
#13
|
|||
|
|||
|
А в deletedProjectName что ? Пустая строка?
Не удаляется |
|
#14
|
|||
|
|||
|
Это то, что ты удаляешь. Т.е. имя, я просто сделал переменную для простоты. Если ты удаляешь выбранный в ComboBox проект, то тогда код будет примерно таким:
Код:
var
Idx : Integer;
begin
DeletedProjectName := ComboBox1.Text;
...
Idx := ComboBox1.Items.IndexOf(DeletedProjectName);
If Idx > -1 Then
Begin
ComboBox1.Items.Delete(Idx);
ComboBox1.Text := '';
End;
end; |
|
#15
|
|||
|
|||
|
Цитата:
А разве связи не должно быть с записью из удаляемой таблицы? Т.е я сначала удаляю запись из таблицы проектов ,и в комбокс строка с именем проекта должна удалиться. |