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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.05.2010, 06:19   #1
palochka
Пользователь
 
Регистрация: 02.05.2009
Сообщений: 18
По умолчанию Удаление текущей записи Ado

Существует таблицы Подразделение,Должности,Сотрудники в access...
Таблицу сотрудники я выводу в dbgrid с помощью запроса(нужно по заданию)

Код:
DbGrid1.DataSource:=Module.DataSource3;
Module.ADoQuery1.Close;
Module.ADoQuery1.SQL.Clear;
Module.ADoQuery1.SQL.Add('Select Подразделение.название as Podr,Должности.название as Dolg,Сотрудники.Таб as tab,Сотрудники.Фамилия as fam,Сотрудники.пол as pol,Сотрудники.ДатаР as Rog,Сотрудники.адрес as adr,Сотрудники.СемПол as sem,+');
Module.AdoQuery1.SQL.Add('Сотрудники.Стаж as stag,Сотрудники.ДатаТр as Trud,Сотрудники.Разр as razr');
Module.ADOQuery1.SQL.Add('from Должности,Подразделение,Сотрудники');
Module.ADOQuery1.SQL.Add('Where Подразделение.шифр=Сотрудники.Подразделение AND Должности.шифр=Сотрудники.Должность');
Module.ADoQuery1.Open;
Module.AdoQuery1.FieldByName('Podr').DisplayLabel:='Подразделение';
Module.AdoQuery1.FieldByName('Dolg').DisplayLabel:='Должность';
Module.AdoQuery1.FieldByName('tab').DisplayLabel:='Табельный номер';
Module.AdoQuery1.FieldByName('fam').DisplayLabel:='ФИО';
Module.AdoQuery1.FieldByName('pol').DisplayLabel:='Пол';
Module.AdoQuery1.FieldByName('Rog').DisplayLabel:='Дата рождения';
Module.AdoQuery1.FieldByName('adr').DisplayLabel:='Адрес';
Module.AdoQuery1.FieldByName('sem').DisplayLabel:='Семейное положение';
Module.AdoQuery1.FieldByName('stag').DisplayLabel:='Стаж(мес.)';
Module.AdoQuery1.FieldByName('Trud').DisplayLabel:='Дата трудоустройства';
Module.AdoQuery1.FieldByName('razr').DisplayLabel:='Разряд';
Нужно осуществить удаление текущей записи
У меня почему то удаляет в любом случае первую запись..Помогите найдите ошибку!!!
Код:
if messagedlg('Удалить текущую запись?',mtConfirmation,[mbOk,mbCancel],0)=1 then
 begin
 Module.ADOQuery2.Close;
 Module.ADOQuery2.SQL.Clear;
 Module.ADOQuery2.SQL.add('DELETE FROM Сотрудники');
 Module.ADOQuery2.SQL.add('WHERE Таб='+Module.ADOTable3.fieldbyname('Таб').AsString);
 Module.ADOQuery2.ExecSQL;
 Module.ADOTable3.Close;
 Module.ADOTable3.Open;
  end;
DbGrid1.DataSource:=Module.DataSource3;
Module.ADoQuery1.Close;
Module.ADoQuery1.SQL.Clear;
Module.ADoQuery1.SQL.Add('Select Подразделение.название as Podr,Должности.название as Dolg,Сотрудники.Таб as tab,Сотрудники.Фамилия as fam,Сотрудники.пол as pol,Сотрудники.ДатаР as Rog,Сотрудники.адрес as adr,Сотрудники.СемПол as sem,+');
Module.AdoQuery1.SQL.Add('Сотрудники.Стаж as stag,Сотрудники.ДатаТр as Trud,Сотрудники.Разр as razr');
Module.ADOQuery1.SQL.Add('from Должности,Подразделение,Сотрудники');
Module.ADOQuery1.SQL.Add('Where Подразделение.шифр=Сотрудники.Подразделение AND Должности.шифр=Сотрудники.Должность');
Module.ADoQuery1.Open;
Module.AdoQuery1.FieldByName('Podr').DisplayLabel:='Подразделение';
Module.AdoQuery1.FieldByName('Dolg').DisplayLabel:='Должность';
Module.AdoQuery1.FieldByName('tab').DisplayLabel:='Табельный номер';
Module.AdoQuery1.FieldByName('fam').DisplayLabel:='ФИО';
Module.AdoQuery1.FieldByName('pol').DisplayLabel:='Пол';
Module.AdoQuery1.FieldByName('Rog').DisplayLabel:='Дата рождения';
Module.AdoQuery1.FieldByName('adr').DisplayLabel:='Адрес';
Module.AdoQuery1.FieldByName('sem').DisplayLabel:='Семейное положение';
Module.AdoQuery1.FieldByName('stag').DisplayLabel:='Стаж(мес.)';
Module.AdoQuery1.FieldByName('Trud').DisplayLabel:='Дата трудоустройства';
Module.AdoQuery1.FieldByName('razr').DisplayLabel:='Разряд';
palochka вне форума Ответить с цитированием
Старый 20.05.2010, 08:03   #2
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

А таблицы у Вас связаны между собой?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 20.05.2010, 08:07   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Module.ADOQuery2.ExecSQL;
Module.ADOTable3.Close;
Module.ADOTable3.Open;
Module.ADOTable3.Close;
Module.ADOTable3.Open;
Тут лишние.

Если твой запрос неправильный то попробуй использовать метод Module.ADOTable3.Delete;

Да кстати а сам запрос на удаление если в акцессе проверить?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.05.2010, 10:07   #4
palochka
Пользователь
 
Регистрация: 02.05.2009
Сообщений: 18
По умолчанию

artemavd,да таблицы связаны..

Stilet,когда я заполняла dbgrid не запросом,а просто данными с adotable3(т.е у меня было datasource3.dataset:=adotable3)-все удалялось правильно!
Таблица сотрудники у меня содержит Код подразделения,шифр должности,табельный номер,фио и остальные данные о сотруднике...
Но некорректно выводить код подразделения и шифр должности цифрами,нужно названиями..Поэтому пришлось использовать запрос для заполения dbgrid...

Последний раз редактировалось palochka; 20.05.2010 в 10:11.
palochka вне форума Ответить с цитированием
Старый 20.05.2010, 10:25   #5
palochka
Пользователь
 
Регистрация: 02.05.2009
Сообщений: 18
По умолчанию

Ой ребята я поняла ошибка в этой строчке
Код:
Module.ADOQuery2.SQL.add('WHERE Таб='+Module.ADOTable3.fieldbyname('Таб').AsString);
Правильно

Код:
Module.ADOQuery2.SQL.add('WHERE Таб='+Module.ADOQuery1.fieldbyname('tab').AsString);
palochka вне форума Ответить с цитированием
Старый 20.05.2010, 10:35   #6
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Ну, молодец, поздравляем
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 20.05.2010, 10:48   #7
palochka
Пользователь
 
Регистрация: 02.05.2009
Сообщений: 18
По умолчанию

Ну вот сразу же возник новый вопрос...Сотрудник-это как бы справочная таблица,и после запроса на вывод в dbgrid она в себе содержит ключевое поле Таб...Поэтому удаление получается без проблем...

А вот есть у меня таблица Штатное расписание..и Ключевые поля Код подразделения и шифр должности были выведены с помощью запроса просто названиями..Как в этом случае осуществить удаление?
palochka вне форума Ответить с цитированием
Старый 20.05.2010, 11:31   #8
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Наверное если таблицы связаны между собой, то должно произойти каскадное удаление.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 20.05.2010, 11:42   #9
palochka
Пользователь
 
Регистрация: 02.05.2009
Сообщений: 18
По умолчанию

Код:
if messagedlg('Удалить текущую запись?',mtConfirmation,[mbOk,mbCancel],0)=1 then
 begin
 Module.ADOQuery2.Close;
 Module.ADOQuery2.SQL.Clear;
 Module.ADOQuery2.SQL.add('DELETE FROM Штатное');
???
 Module.ADOQuery2.ExecSQL;
  end;
как вместо ??? мне написать условие where...
если писать это
Код:
Module.ADOQuery2.SQL.add('WHERE КодПодр='+Module.AdoQuery1.fieldbyname('Podr').AsString);
 Module.ADOQuery2.SQL.Add('AND ШифрДолж='+Module.AdoQuery1.fieldbyname('Dolg').AsString);
и я например выбираю удалить запись
Бухгалтерия Бухгалтер
Выдается ошибка "Параметр бухгалтерия не имеет значения по умолчанию!"

Последний раз редактировалось palochka; 20.05.2010 в 12:14.
palochka вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление записи. ADO Rekky БД в Delphi 13 02.11.2011 12:46
Удаление текущей записи из файла Proger_1 Общие вопросы Delphi 4 15.05.2010 23:35
Номер текущей записи Streetmagic БД в Delphi 5 25.12.2009 07:43
Записи в таблице ADO doniyor БД в Delphi 5 01.07.2009 13:19
Удалить 2 записи. ADO... Roof БД в Delphi 9 18.08.2008 20:32