Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.01.2010, 08:39   #1
Илья Сергеевич
Пользователь
 
Регистрация: 20.01.2009
Сообщений: 16
Вопрос Как найти запись по известному внешнему ключу?

Сутки добрые! Делаю в delphi базу данных через ado.
У меня есть две таблицы.
Необходимо удалить запись из первой таблицы с известным idATS записи.
И во второй таблице найти запись с тем же idTC и тоже удалить

Проблему для меня составляет найти запись во второй таблице.


Код:
{Asking user, you sure that you want delete note?}
If MessageDlg('Вы уверены, что хотите удалить запись',mtConfirmation,[mbYes,mbNo],0)=mrYes Then
   Begin
    DM.ADOQuery_AdresTC.Close;
    DM.ADOQuery_ATS.Close;
    DM.ADOStoredProc_d_ATS.Parameters.ParamByName('@idATS').Value:=DM.ADOQuery_ATSidATS.Value;
    DM.ADOStoredProc_d_AdressTC.Parameters.ParamByName('@idTC').Value:=DM.ADOQuery_ATSidATS.Value;

    Try
     DM.ADOConnection_DM.BeginTrans;
     e:=0;
     DM.ADOStoredProc_d_ATS.ExecProc;
     e:=1;
     DM.ADOStoredProc_d_AdressTC.ExecProc;
    Except
     If e=0 Then MessageDlg('Удаление не прошло!'+#13+'Запись заблокирована, либо уже удалена! Попробуйте позже либо перезапустите приложение!'+#13+'{Служебная информация:е=0}',mtError,[mbOK],0);
     If e=1 Then MessageDlg('Удаление не прошло!'+#13+'Запись заблокирована, либо уже удалена! Попробуйте позже либо перезапустите приложение!'+#13+'{Служебная информация:е=1}',mtError,[mbOK],0);
     DM.ADOConnection_DM.RollbackTrans;
    
    End;
   End;
  DM.ADOQuery_AdresTC.Open;
  DM.ADOQuery_ATS.Open;
 End;
Илья Сергеевич вне форума Ответить с цитированием
Старый 04.01.2010, 10:29   #2
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

метод Locate
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Старый 04.01.2010, 13:42   #3
Илья Сергеевич
Пользователь
 
Регистрация: 20.01.2009
Сообщений: 16
По умолчанию

Подскажи как работает?
Илья Сергеевич вне форума Ответить с цитированием
Старый 04.01.2010, 13:50   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
DM.ADOQuery_ATS.Close;
DM.ADOStoredProc_d_ATS.Parameters.P aramByName('@idATS').Value:=DM.ADOQ uery_ATSidATS.Value;
"Шикарная" связка...
И что вы намереваетесь получить в DM.ADOQuery_ATSidATS.Value при закрытом DM.ADOQuery_ATS ???
Не желаете ли запомнить эту величину перед закрытием DM.ADOQuery_ATS в какой-нибудь темповой переменной?
mihali4 вне форума Ответить с цитированием
Старый 04.01.2010, 14:19   #5
Илья Сергеевич
Пользователь
 
Регистрация: 20.01.2009
Сообщений: 16
По умолчанию

Спасибо я старался...
может подскажите где можно почитать про все компоненты .... желательно в русском варианте!?
А про тупость, порой хрен поймешь как процедура работает, интуитивно тыкаю.
А второй вариант мне нарвится ... был близок к нему.
А вот с Locate проблемы не пойму принцип работы. Первый параметр хранит название поля, а вот что означает что второй параметр хранит исходное значение не понятно, да и третий параметр -фильтр не понять для чего и как работает?

Подскажите для faq найти.... надоело по примеру делать! знаний хочу ... сессия пришла
Илья Сергеевич вне форума Ответить с цитированием
Старый 04.01.2010, 14:47   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Первый параметр передает имя поля, второй - значение, которое нужно найти в этом поле, третий - искать по частичному совпадению, с учетом регистра...
Возвращает True при успехе.
mihali4 вне форума Ответить с цитированием
Старый 04.01.2010, 15:12   #7
Илья Сергеевич
Пользователь
 
Регистрация: 20.01.2009
Сообщений: 16
По умолчанию

Спасибо!...
А что насчет фака?
Илья Сергеевич вне форума Ответить с цитированием
Старый 04.01.2010, 15:19   #8
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

http://programmersclub.ru/files/book1_100comp.rar
У этого автора был цикл книжечек - поищите в инете по ФИО.
Например, по работе с БД
http://letitbit.net/download/0644.06..._bazi.zip.html

Последний раз редактировалось mihali4; 04.01.2010 в 15:47.
mihali4 вне форума Ответить с цитированием
Старый 04.01.2010, 15:30   #9
Илья Сергеевич
Пользователь
 
Регистрация: 20.01.2009
Сообщений: 16
По умолчанию

Спасибо!ну просто огромное надеюсь там есть то что мне нужно!

Все работает!
Какая тупость надо было query закрывать после ADOStoredProc

Код:
DM.ADOStoredProc_d_ATS.Parameters.ParamByName('@idATS').Value:=DM.ADOQuery_ATSidATS.Value;
    DM.ADOStoredProc_d_AdressTC.Parameters.ParamByName('@idTC').Value:=DM.ADOQuery_ATSidATS.Value;

DM.ADOQuery_AdresTC.Close;
DM.ADOQuery_ATS.Close;
Спасибо огромное за отклик.

Тупость рождается от незнания

Последний раз редактировалось Stilet; 08.01.2010 в 22:53.
Илья Сергеевич вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти и поменять запись в файле Kib Общие вопросы Delphi 3 11.11.2009 16:46
Как найти последнюю запись в таблице? dsapa Microsoft Office Excel 2 21.07.2009 16:37
Помогите найти последную запись Reskov Microsoft Office Access 2 18.12.2008 11:42
Как в коде VBA возвратить путь к заранее известному файлу? Maxx Microsoft Office Excel 4 19.11.2008 13:17
Как сложить 2 значения из разных БД по ключу Nitti БД в Delphi 1 04.05.2007 12:58