Topic: Нарушить связь

Каким скриптом на кнопке можно стереть в конкретной строке в таблице данные? То есть есть таблица с значениями допустим -
1) Имя
2)Фамилия
3)ИД_группа
4)ИД_должность
Так вот, как одной кнопкой удалить данные только из ИД_Должность? Что бы остальная строка с данными не удалилась

Re: Нарушить связь

SQLExecute('DELETE FROM таблица  WHERE условие ');

3 (edited by sibprogsistem 2019-10-28 19:44:17)

Re: Нарушить связь

а как всегда не дочитал
просто саздайте обновление  и замените текст на пустую строку

SQLExecute('UPDATE таблица SET поле="" WHERE условие');

4 (edited by agatlogic101 2019-10-28 20:19:54)

Re: Нарушить связь

1)А что бы по ошибке не удалить эту запись, как вывести сообщение с вопросом об удаление? Нужно создавать для этого отдельную форму? или в программе есть решение

Re: Нарушить связь

agatlogic101 wrote:

А что бы по ошибке не удалить эту запись, как вывести сообщение с вопросом об удаление? Нужно создавать для этого отдельную форму? или в программе есть решение

if IDYES = MessageBox('Ваш текст','Ваш заголовок', MB_YESNO+MB_ICONINFORMATION) then begin
  Ваши условия
end;

Re: Нарушить связь

Спасибо, и что бы не захламлять форум напишу сразу еще один вопрос тут.
Я обычно ид вытаскиваю такой стракой
idTrip := SQLExecute('SELECT id FROM trip WHERE id='+ Form1.TableGrid4.sqlValue );
так вот, возможно ли вытащить в переменную не только главный ид таблицы, но еще и связанных с ней таблиц. То есть если таблица имеет данные
1) Ид
2) Имя
3) ИД_Группы
4) ИД_Должность
то как одним разом задать 3 переменные? для 1)ИД=(переменная1) ИД_Группы=((переменная2) и ИД_должности=(переменная3)

Re: Нарушить связь

agatlogic101 wrote:

1)А что бы по ошибке не удалить эту запись, как вывести сообщение с вопросом об удаление? Нужно создавать для этого отдельную форму? или в программе есть решение
2)и что бы не захламлять форум напишу сразу еще один вопрос тут.
Я обычно ид вытаскиваю такой стракой
idTrip := SQLExecute('SELECT id FROM trip WHERE id='+ Form1.TableGrid4.sqlValue );
так вот, возможно ли вытащить в переменную не только главный ид таблицы, но еще и связанных с ней таблиц. То есть если таблица имеет данные
1) Ид
2) Имя
3) ИД_Группы
4) ИД_Должность
то как одним разом задать 3 переменные? для 1)ИД=(переменная1) ИД_Группы=((переменная2) и ИД_должности=(переменная3)

можно так

idTrip := SQLExecute('SELECT q ||" "|| w FROM qq WHERE id='+ Form1.TableGrid1.sqlValue ); 

либо

idTrip := SQLExecute('SELECT q  FROM qq WHERE id='+ Form1.TableGrid1.sqlValue ) +' '+ SQLExecute('SELECT ц  FROM qq WHERE id='+ Form1.TableGrid1.sqlValue ); 

или

idTrip := SQLExecute('SELECT q   FROM qq WHERE id='+ Form1.TableGrid1.sqlValue );
idTrip := idTrip + ' ' +SQLExecute('SELECT w FROM qq WHERE id='+ Form1.TableGrid1.sqlValue );

8 (edited by sibprogsistem 2019-10-28 20:40:54)

Re: Нарушить связь

да я подумал, что Вам нужно поместить все в одну переменную
в таком случае создайте запросы для каждой переменной  а данные из связанных таблиц можно вытащить  через их объединение

SQLExecute('SELECT строка FROM таблица2  LEFT OUTER JOIN таблица1 ON  таблица2.id=таблица1.id_таблица2  WHERE таблица1.id='+ Form1.TableGrid1.sqlValue');

так как объединяем две таблицы то и id будет 2, в этом случае нужно указать точный адрес
WHERE таблица1.id=

Re: Нарушить связь

Спасибо

Re: Нарушить связь

почему программа ругается на эту строчку?
SQLExecute('UPDATE event SET id_trip="'+idCity3+'"  WHERE id='+назначение_мероприятия.TableGrid1.sqlValue );
Даже если пытаюсь присвоить вместо переменной цифру

Re: Нарушить связь

agatlogic101 wrote:

почему программа ругается на эту строчку?
SQLExecute('UPDATE event SET id_trip="'+idCity3+'"  WHERE id='+назначение_мероприятия.TableGrid1.sqlValue );
Даже если пытаюсь присвоить вместо переменной цифру

на какую часть ругается? +idCity3+ или назначение_мероприятия.TableGrid1.sqlValue

12 (edited by sibprogsistem 2019-10-28 22:01:02)

Re: Нарушить связь

перепроверил на новом проекте
если ругается во время записи, то скорее всего Вы пытаетесь присвоить полю не существующий внешний ключ..
перед изминением записи проверте переменную idCity3 на ее содержимое

ShowMessage(idCity3);

13 (edited by agatlogic101 2019-10-29 10:23:05)

Re: Нарушить связь

Покопался, оказалось просто сама логика была нарушена, исправил, заработало.
Искал на форуме вариант открытие из одной таблицы разных форм, в зависимости от выбранного id Это реально?

Re: Нарушить связь

agatlogic101 wrote:

Покопался, оказалось просто сама логика была нарушена, исправил, заработало.
Искал на форуме вариант открытие из одной таблицы разных форм, в зависимости от выбранного id Это реально?

procedure frmServiceCen_tgList_OnCellDoubleClick (Sender: TObject; ACol, ARow: Integer);
begin
   //открытие карточки оборудования в соответсвии с ранее установленной меткой 1, 2 или 3 по двойному щелчку мышки
   if SQLExecute('SELECT id_clCompanyOrApp FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue)= '1' then frmClientServiсeList.ShowRecord('servise', frmServiceCen.tgList.dbItemID) else
   if SQLExecute('SELECT id_clCompanyOrApp FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue)= '2' then frmComServiceList.ShowRecord('servise', frmServiceCen.tgList.dbItemID) else
   if SQLExecute('SELECT id_clCompanyOrApp FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue)= '3' then frmAppl.ShowRecord('servise', frmServiceCen.tgList.dbItemID);
end;

Re: Нарушить связь

Я правильно понимаю что если используешь переменные для изменения записей в таблицу, то их лучше обнулять при закрытие формы что бы проверка
if (idPosition <> '') AND (idPeople <> '') then
имела смысл при следующем открытие формы и не была от предыдущего выбора?

Re: Нарушить связь

agatlogic101 wrote:

Я правильно понимаю что если используешь переменные для изменения записей в таблицу, то их лучше обнулять при закрытие формы что бы проверка
if (idPosition <> '') AND (idPeople <> '') then
имела смысл при следующем открытие формы и не была от предыдущего выбора?

смотря в какой ситуации.. но если проще то да..

17 (edited by agatlogic101 2019-10-29 13:20:41)

Re: Нарушить связь

А вычисляемое поле на textbox можно повесить? Что бы данные выводились не в таблицу а в него
.
должности_и_навыки.Edit1.Text:= SQLExecute('SELECT IFNULL(SUM(people.старший), 0)
FROM people
WHERE people.id_position=position.id'));
.
Это похоже на правду? В любом случае не работает, просто предположение

18 (edited by sibprogsistem 2019-10-29 13:28:51)

Re: Нарушить связь

agatlogic101 wrote:

А вычисляемое поле на textbox можно повесить? Что бы данные выводились не в таблицу а в него
.
должности_и_навыки.Edit1.Text:= SQLExecute('SELECT IFNULL(SUM(people.старший), 0)
FROM people
WHERE people.id_position=position.id'));
.
Это похоже на правду? В любом случае не работает, просто предположение

можно сделать так
а можно взять данные из таблицы с вычисляемого поля

Post's attachments

Attachment icon test.7z 2.88 kb, 262 downloads since 2019-10-29 

19 (edited by agatlogic101 2019-10-29 20:31:51)

Re: Нарушить связь

А возможно в таблице из 7 столбов, где данные расположены следующим образом
1 0 0 0 0 0 0
0 2 0 0 0 0 0
0 0 3 0 0 0 0
0 0 0 4 0 0 0
0 0 0 0 5 0 0
0 0 0 0 0 6 0
получить
1 0 0 0 0 0 1
0 2 0 0 0 0 2
0 0 3 0 0 0 3
0 0 0 4 0 0 4
0 0 0 0 5 0 5
0 0 0 0 0 6 6
то есть прописать где данные для 7 столба из прочих столбов, ну и как в примере выше скрыть первые 6 (как скрывать понимание есть)

Re: Нарушить связь

сделайте тоже самое, что и в предыдущем примере