Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.22;
Скачать: CL | DM;

Вниз

Удаление   Найти похожие ветки 

 
Вовчик   (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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.055 c
6-1086379883
Николай
2004-06-05 00:11
2004.08.22
Хочу попробывать написать фаервол.


14-1091797724
X9
2004-08-06 17:08
2004.08.22
Создание шрифтов в Corel DRAW


3-1090482264
nik7777
2004-07-22 11:44
2004.08.22
Вопрос по ODBC для Lotus-Notes6


14-1091345889
Protoss
2004-08-01 11:38
2004.08.22
Просто интересно


14-1090927388
dr Tr0jan
2004-07-27 15:23
2004.08.22
Софтина для закусочной