Форум: "Базы";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];
ВнизУдаление Найти похожие ветки
← →
Вовчик (2004-07-26 12:43) [0]Хочу чтобы при удалении записи из таблицы Cartypes удалялись соответствующие записи в таблице Marks. Пишу вот такой код:
procedure TfDM.CartypesMySqlQueryBeforeDelete(DataSet: TDataSet);
var Count: integer;
begin
if Application.MessageBox(PChar("Удалить все марки автомобилей, имеющих тип ""+CartypesMySqlQuery.FieldByName("Название").AsString+""?"),"Вопрос",
MB_YESNO+MB_DEFBUTTON2+MB_ICONQUESTION+MB_SYSTEMMODAL)=IDYES then begin
Count:=0;
while MarksMySqlQuery.Locate("Тип",CartypesMySqlQuery.FieldByName("Название").AsString,[]) do begin
inc(Count);
MarksMySqlQuery.Delete;
end;
Application.MessageBox(PChar("Удалено "+IntToStr(Count)+" записей"),"Информация",
MB_ICONINFORMATION+MB_SYSTEMMODAL);
end;
end;
Но удаляются все записи в таблице Marks. Помогите! Что я делаю не так?
← →
Соловьев © (2004-07-26 12:50) [1]
> MarksMySqlQuery.Delete;
а что там за запрос?
а не проще сделать запрос вида:
delete from Marks
where Marks.Type = :param_Cartypes
← →
bushmen © (2004-07-26 13:28) [2]> Хочу чтобы при удалении записи из таблицы Cartypes удалялись
> соответствующие записи в таблице Marks.
Вообще-то MySQL для таких целе мало подходит.
← →
Соловьев © (2004-07-26 13:30) [3]
>
> Вообще-то MySQL для таких целе мало подходит.
почему? вещде это можно сделать: или руцями или автоматом - триггеры, внешние ключи(кстати, есть уже в Мускуле)
← →
bushmen © (2004-07-26 13:36) [4]> (кстати, есть уже в Мускуле)
В том-то и дело, что УЖЕ. Кстати, если мне не изменяет память, то все эти нововведения пошли с версии 4.1. Но многие еще сидят на 4.0... и более ранних. Я только с этой точки зрения. А потом, надо будет еще потестировать этот "навороченный" MySQL по скорости в сравнении с другими СУБД - может уже не будет таким "легким"
← →
Вовчик (2004-07-26 14:09) [5]
> Соловьев © (26.07.04 12:50) [1]
>
> > MarksMySqlQuery.Delete;
>
> а что там за запрос?
> а не проще сделать запрос вида:
> delete from Marks
> where Marks.Type = :param_Cartypes
Запрос обычный типа SELECT * FROM marks
А удалить запросом нельзя, потому что удаление Cartype ведет за собой удаление записей Marks, а удаление Marks ведет удаление записей третьей таблицы (Cars), а если удалять Marks SQL-запросом, то записи в Cars останутся нетронутыми...
Почему-тоMarksMySqlQuery.Locate("Тип",CartypesMySqlQuery.FieldByName("Название").AsString,[])
постоянно возращает ИСТИНу?
Неужели нет выхода?
← →
Вовчик (2004-07-26 14:12) [6]
> триггеры, внешние ключи(кстати, есть уже в Мускуле)
где почитать можно?
> Вообще-то MySQL для таких целе мало подходит.
Ну так люди захотели...
А если перейти на IB? Где можно взять полнофункциональный сервер IB? И сложно ли будет перейти на IB, если я использую компоненты Zeos?
← →
Соловьев © (2004-07-26 14:14) [7]
> Где можно взять полнофункциональный сервер IB?
уже давно существует бесплатный(лучший) клон - Firebird
htt://firebird.sourceforge.net
> И сложно ли будет перейти на IB, если я использую компоненты
> Zeos?
нет, они тоже с ним работают
> де почитать можно?
http://www.mysql.ru
← →
Соловьев © (2004-07-26 14:15) [8]
> нет, они тоже с ним работают
:) надо под нет- понимать да
← →
Вовчик (2004-07-26 15:44) [9]
> Соловьев © (26.07.04 14:15) [8]
>
> > нет, они тоже с ним работают
>
> :) надо под нет- понимать да
Конкретизируйте, будут ли сложности перехода? То "да", то "нет"... Ничего не понял :)
А про Firebird где можно найти инфу? Как таблицы создавать, индексы, установка и настройка сервера... Все с самого начала. Спасибо
← →
Вовчик (2004-07-26 15:47) [10]И все таки какая ошибка в коде?
← →
Соловьев © (2004-07-26 15:48) [11]
> А про Firebird где можно найти инфу? Как таблицы создавать,
> индексы, установка и настройка сервера... Все с самого начала.
> Спасибо
http://ibase.ru/develop.htm
> Конкретизируйте, будут ли сложности перехода? То "да", то
> "нет"... Ничего не понял :)
я не перходил, но зеос поддерживает Интербез и Файрборд
← →
Вовчик (2004-07-26 15:54) [12]Сервер весит 800 кБ? Не мало ли?
← →
Соловьев © (2004-07-26 15:58) [13]та вообще-то 4 метра
← →
Соловьев © (2004-07-26 15:59) [14]
> И все таки какая ошибка в коде?
может баг АДО - ппатч вроде есть на сайте борланда под 7 делфю
← →
Вовчик (2004-07-26 17:04) [15]Уф, справился! Часик отдохнул и все решил... :)
Сделал так:procedure TfDM.CartypesMySqlQueryBeforeDelete(DataSet: TDataSet);
var k,Count: integer; S: string;
begin
if Application.MessageBox(PChar("Удалить все марки автомобилей, имеющих тип ""+CartypesMySqlQuery.FieldByName("Название").AsString+""?"),"Вопрос",
MB_YESNO+MB_DEFBUTTON2+MB_ICONQUESTION+MB_SYSTEMMODAL)=IDYES then begin
k:=CartypesMySqlQuery.RecNo;
S:=CartypesMySqlQuery.FieldByName("Название").AsString;
Count:=0;
while MarksMySqlQuery.Locate("Тип",S,[]) do begin
inc(Count);
MarksMySqlQuery.Delete;
end;
CartypesMySqlQuery.RecNo:=k;
Application.MessageBox(PChar("Удалено "+IntToStr(Count)+" записей"),"Информация",
MB_ICONINFORMATION+MB_SYSTEMMODAL);
end;
end;
Дело в том, что производя поиск в таблице Marks, курсор перемещается, а т.к. таблицы связаны через DBLookupComboBox, то перемещаемся и по Cartypes. Приходится запоминать текущее значение поля в строке S, чтобы искать всегда одно и то же, и запоминать позицию в Cartypes в переменной k, чтобы удалить потом именно это поле ;) Молодец я? ;)
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.038 c