Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.032 c
14-1091634622
SPE-Line
2004-08-04 19:50
2004.08.22
Иконки для программ


14-1091816077
Денисыч
2004-08-06 22:14
2004.08.22
Вопрос про легальность Delphi


14-1091598934
User_OKA
2004-08-04 09:55
2004.08.22
Сотовый телефон


14-1091781372
Иксик
2004-08-06 12:36
2004.08.22
Ой мама моя родная, его когда-нибудь переизберут?


9-1083916238
Маг Гыр
2004-05-07 11:50
2004.08.22
Видеопамять





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский