Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 2
Регистрация: 01.10.2013
Сообщений: 344

Как узнать ID?

22.05.2016, 20:58. Показов 2391. Ответов 49
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите пожалуйста, вот есть DBGrid.

В нем поля:
1) ID (Уникальное)
2) NAME (Просто название ГРУЗА)
3) ID_TIP (По нему получаю название ТИПА ГРУЗА из другой таблицы, где только типы: легкий, средний и.т.д.)

Предположим есть там 10 ну или N записей, вида:

1 КОРОБКИ ТЯЖЕЛЫЙ
2 ПРОВОДА ЛЕГКИЙ
................................

Мне нужно сделать проверку на удаление, т.е. если ТИП ГРУЗА используется в этой таблице на какой-то записи, то удалить его нельзя т.е. есть связь.

Я пишу запрос SQL:

SELECT * FROM GRUZ G, TIPGRUZA T WHERE G.ID_TIP=T.ID
n:=SQL.RecordCount; (Вернёт число строк с таким условием)

Ставлю if n>0 then 'вывести ошибку удаления грубо говоря' else 'удалим и всё'

Но есть проблема, БДЕ так не продумана или я глупый, но по такому условию всегда будет проверяться только первая запись, а если указатель будет стоять на другой то он не сработает и всё равно проверит первую и выдаст соответствующее условие. Нужно каким-то образом пробегать по всем записям и передвигать курсор туда куда я тыкнул или как-то по другому. Проще говоря, если в типе груза 3 записи и я нажму удалить 3-ю, проверит 1-ю и всё и выдаст ошибку для неё, а не для 3-й записи куда я нажал, как это реализовать?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.05.2016, 20:58
Ответы с готовыми решениями:

Как узнать раскладку клавиатуры? Как её изменить? Как узнать, на каком языке текст в файле?
сабж

Как узнать, что картинка полностью загружена, чтобы узнать её размеры
Здраствуйте ! Делаю галерею. Мне нужно узнать когда картинка загрузица полносттю, чтобы узнать её размеры. Подскажыте, читал ето делаеца...

Как узнать количество вводимых чисел? Как их записать все в массив?
Входной поток содержит набор целых чисел Ai (0 ≤ Ai ≤ 1018), отделённых друг от друга произвольным количеством пробелов и переводов строк....

49
Эксперт Pascal/Delphi
 Аватар для xxbesoxx
1135 / 616 / 129
Регистрация: 13.02.2009
Сообщений: 3,607
23.05.2016, 13:02
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от demon31 Посмотреть сообщение
Моя проблема от ваших слов в общем не решается.
и даже примеров который выложили да ?
Цитата Сообщение от demon31 Посмотреть сообщение
Как говорил мой препод: не понятно, не ясно.
Чего, чего ? o для препод не понятно ? тогда Мы извиняем перед препод ухх... препод, препод
0
0 / 0 / 2
Регистрация: 01.10.2013
Сообщений: 344
23.05.2016, 13:04  [ТС]
То что без цикла это никаким образом не осуществить, у вас его нигде нет, значит предполагаю, что мы говорим о разном.

Добавлено через 1 минуту
SELECT * FROM GRUZ G, TIPGRUZA T WHERE G.ID_TIP=T.ID
n:=SQL.RecordCount; (Вернёт число строк с таким условием)

Ставлю if n>0 then 'вывести ошибку удаления грубо говоря' else 'удалим и всё'

Вот весь код, он не правильный, потому что работает на одну, первую строку.
0
Эксперт Pascal/Delphi
 Аватар для xxbesoxx
1135 / 616 / 129
Регистрация: 13.02.2009
Сообщений: 3,607
23.05.2016, 13:08
Цитата Сообщение от demon31 Посмотреть сообщение
То что без цикла это никаким образом не осуществить,
зачем мне цикл ? что вашего преподу не понятно здес ?
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
procedure TForm1.Button1Click(Sender: TObject);
 var
   ID : string;
begin
  ID := ADOQuery1.FieldByName('g_id').AsString;
  with qryDelete do
  begin
    SQL.Clear;
    SQL.Append(' select *  '+
               ' from Gruz g inner join tip_gruz t  '+
               ' on g.g_id=t.t_griz_id '+
               ' WHERE g_id = '''+ ID +'''');
 
   Open;
  end;
  if qryDelete.RecordCount<>0 then
  begin
    MessageDlg('Нельзя удалить это данных', mtError,[mbOK], 0);
    Abort;
  end
  else
  if qryDelete.RecordCount=0 then
  begin
   //    Удаляем
  end;
end;
0
0 / 0 / 2
Регистрация: 01.10.2013
Сообщений: 344
23.05.2016, 13:09  [ТС]
Не сравнивай свой код с моим ...
0
5998 / 4573 / 1096
Регистрация: 29.08.2013
Сообщений: 28,248
Записей в блоге: 3
23.05.2016, 13:12
Цитата Сообщение от demon31 Посмотреть сообщение
Вот весь код, он не правильный, потому что работает на одну, первую строку.
сделайте query.Next и перейдите на следующую

Добавлено через 1 минуту
но вам не нужна следующая строка
и не нужен массив

у вас ведь известно ID - стройте по нему запрос и тогда будет только ОДНА строка

Цитата Сообщение от demon31 Посмотреть сообщение
Не сравнивай свой код с моим ...
да да, тут я согласен
0
0 / 0 / 2
Регистрация: 01.10.2013
Сообщений: 344
23.05.2016, 13:17  [ТС]
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure TForm1.Button21Click(Sender: TObject);
var n:integer;
begin
Query1.Close;
  Query1.SQL.Clear;
   Query1.SQL.Add('select G.ID_TIP, T.ID from TIPGRUZA T, GRUZ G WHERE (G.ID_TIP=T.ID)');
    Query1.Open;
     n:=Query1.RecordCount;
 
if n>0 then
  MessageDlg('Удалю', mtError, [mbOK], 0)
else
  MessageDlg('Не удалю', mtError, [mbOK], 0);
 
end;
Вот мой код, звучит так: если число строк у которых айди типа равен ид (из таблицы типов) больше 0, т.е. они есть, тогда выполнить условие.
Но оно не работает ... Потому что оно проверяет всего 1 строчку из таблицы ...
0
5998 / 4573 / 1096
Регистрация: 29.08.2013
Сообщений: 28,248
Записей в блоге: 3
23.05.2016, 13:21
Цитата Сообщение от demon31 Посмотреть сообщение
Потому что оно проверяет всего 1 строчку из таблицы ...
какую СТРОЧКУ????????????????????

у вас в N - количество всех строк в запросе
это будет 100000000000000000000000000 (как вы сами писали)
0
0 / 0 / 2
Регистрация: 01.10.2013
Сообщений: 344
23.05.2016, 13:23  [ТС]
так-то оно так, но не так.
Условие сработает только на 1 из N строк и на основании этого выдаст условие
0
5998 / 4573 / 1096
Регистрация: 29.08.2013
Сообщений: 28,248
Записей в блоге: 3
23.05.2016, 13:23
забудь ты про строки
ЗАБУДЬ
0
0 / 0 / 2
Регистрация: 01.10.2013
Сообщений: 344
23.05.2016, 13:23  [ТС]
Я не знаю как и почему, но это так, в этой БДЕ это так, это не так если я бы писал на пхп, но тут это так ...
0
5998 / 4573 / 1096
Регистрация: 29.08.2013
Сообщений: 28,248
Записей в блоге: 3
23.05.2016, 13:26
ты получил ID по строке?
0
0 / 0 / 2
Регистрация: 01.10.2013
Сообщений: 344
23.05.2016, 13:28  [ТС]
Всё, я поник.
Можно просто последовательность действий?
0
5998 / 4573 / 1096
Регистрация: 29.08.2013
Сообщений: 28,248
Записей в блоге: 3
23.05.2016, 13:30
иди про SQL читай раз думать не хочешь
0
0 / 0 / 2
Регистрация: 01.10.2013
Сообщений: 344
23.05.2016, 13:42  [ТС]
Проблема с алгоритмом, а не с SQL

Добавлено через 10 минут
Таблица 1
1 Болт Легкий
2 Ручка Легкий
3 Кирпич Средний
4 Машина Средний

Таблица 2
1 Легкий
2 Средний
3 Тяжелый
SQL
1
2
3
4
5
6
7
Query1.Close;
  Query1.SQL.Clear;
   Query1.SQL.Add('select G.ID_TIP, T.ID from TIPGRUZA T, GRUZ G');
    Query1.Open;
IF Query1.FieldByName('ID_TIP').AsInteger = Query1.FieldByName('ID').AsInteger THEN
  MessageDlg('Нет', mtError, [mbOK], 0) ELSE
        MessageDlg('Да', mtError, [mbOK], 0) ;
Я жму удалить в Таблице 2 удалить тип Тяжелый.
Что должно выдать?
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,681
Записей в блоге: 21
23.05.2016, 14:24
просто показать таблицу 1
Delphi
1
2
3
Query1.Close;
Query1.SQL.text:='select G.ID, G.NAME, T.NAME from GRUZ G left join TIPGRUZA T on (g.ID_TIP=t.ID)';
Query1.OPEN;
показать таблицу 2 - справочник типов
Delphi
1
2
3
Query2.Close;
Query2.SQL.text:='select T.ID, T.NAME from TIPGRUZA T';
Query2.OPEN;
предполагается что к этому датасету подключен какой-то DBGrid
теперь я встаю на любую строку этого грида и нажимаю какую-то кнопку с надписью "удалить"
Delphi
1
2
3
4
5
6
7
8
9
query3.sql.text := 'select count(*) as C from GRUZ where ID_TIP='+Query2.FieldByName('ID').asString;
query3.sql.open;
if query3.fieldByName('C').AsInteger>0 then
  showMessage('Нельзя удалять')
else
begin
  /// удаление
end;
query3.close;
0
0 / 0 / 2
Регистрация: 01.10.2013
Сообщений: 344
23.05.2016, 14:38  [ТС]
Код скушало правильно, но он не работает.
Всё так как я и сказал ...
Ответь на вопрос над твоим постом.
0
Эксперт Pascal/Delphi
 Аватар для xxbesoxx
1135 / 616 / 129
Регистрация: 13.02.2009
Сообщений: 3,607
23.05.2016, 14:40
Цитата Сообщение от demon31 Посмотреть сообщение
Код скушало правильно, но он не работает.
Всё так как я и сказал ...
Потому что Вы невнимательно скопируйте код ....
0
0 / 0 / 2
Регистрация: 01.10.2013
Сообщений: 344
23.05.2016, 14:42  [ТС]
Цитата Сообщение от xxbesoxx Посмотреть сообщение
Потому что невнимательно Вы скопируйте код ....
Сударь, можете тут не писать?
Я сделал всё правильно, и дал ответ, код не работает, потому что вы меня не слушаете.
0
5998 / 4573 / 1096
Регистрация: 29.08.2013
Сообщений: 28,248
Записей в блоге: 3
23.05.2016, 14:43
Цитата Сообщение от demon31 Посмотреть сообщение
код не работает, потому что вы меня не слушаете.
вы вообще бред пишите

построчно разберите что вам разжевали
0
0 / 0 / 2
Регистрация: 01.10.2013
Сообщений: 344
23.05.2016, 14:44  [ТС]
Ответьте на 34 сообщение ...
Я больше ничего пока что не прошу.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.05.2016, 14:44

Как определить запуск браузера, и как узнать URL загруженный в браузере?
Добрый день подскажите пожалуйста как можно отследить запуск браузера? постоянно сканировать запущенные процессы и отлавливать там...

Как узнать поддерживает ли ноут SATA 3 и как перенести систему на SSD ?
Всем привет. Решил установить себе в ноутбук SSD (240 ГБ HyperX Savage) под ОС и программы, а нынешний HDD поставить в качестве хранилища...

Как с командной строки узнать как был присвоен IP адрес
Как с командной строки узнать как был присвоен IP адрес - статически или динамически

Как узнать чем накрыт и как дешифровать файл png
Изучал данный файл в HEX, вроде как особых отличий от оригинального PNG не вижу, но вот чем накрыт понять не могу и как вообще. Может у...

Как создать палитру цветов и как узнать выбранный цвет
Подскажите как можно реализовать такую задачу, пользователь выбирает палитру цветов, после выбора цвета форма перекрашуеться в тот цвет что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Установка нескольких штампов электронной подписи в строго определенных местах файла docx
ВладимирСамохин 19.07.2026
(В!) Работа с Электронной подписью - это неотъемлемая часть современного документооборота. Но что делать, если нужно поставить несколько штампов электронной подписи в строго определенных местах. . .
сукцессия 35. Научная статья о проделанной работе
anaschu 19.07.2026
Написал в формате латекс и пдф
Вангую, что это не пройдёт модерацию, и на неделе я запущу свой сервер.
Hrethgir 19.07.2026
Эта публикация сейчас в песочнице и ждёт приглашения. https:/ / habr. com/ ru/ sandbox/ 295048/ начало и оглавление - Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование. . .
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0) Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона Уважаемые коллеги! В продолжение. . .
Грибы - это женщины, деревья - это мужчины. Анти инь янь для союза мужчины и женщины.
anaschu 18.07.2026
ГЛАВНЫЙ НАУЧНО-ФИЛОСОФСКИЙ ВЫВОД: Сексуально-Репродуктивный Капитализм против Государства Моногамии Коллеги, мы вышли на финишную прямую 20-мерного ОДУ-моделирования вековой сукцессии (ветка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru