1 (edited by vit007 2019-03-22 09:26:07)

Topic: Подскажите, как присвоить id для второй таблицы.

Подскажите, как присвоить id для второй таблицы. Решил попробовать заново собрать базу, вдруг, где-то ошибка появилась.
Перепробовал разные подстановки в Grid при просмотре, но не желает выдавать зависимые записи от первой таблицы.
Хотелось бы, чтоб первая запись отображалась в Grid при просмотре, а обратной зависимости не было, т.к. будет в этот Grid и таблицу добавляться новые значения, по типу, Истории. Спасибо.

Post's attachments

Attachment icon qwe.rar 3.99 kb, 295 downloads since 2019-03-22 

Re: Подскажите, как присвоить id для второй таблицы.

К сожалению я не понял вашего вопроса.

Dmitry.

3 (edited by vit007 2019-03-22 14:27:07)

Re: Подскажите, как присвоить id для второй таблицы.

Мне бы хотелось, чтоб записи второй таблицы соответствовали одному идентификатору первой таблицы. Если выбрать нужный id, то по кнопке создать новую запись, можно спокойно набросать записей и увидеть в желаемой таблице. Но меня интересует заполнение второй таблицы все одним, начальным значением первой таблицы. т.е.:
Поступает заявка и в первой таблице отмечается ее поступление и дата и эти же параметры должны автоматически перенестись во вторую и дальше, мы по заявке ведем журнал ее движения -

начальное значение: поступление - дата
последующие:            согласование - дата

и тогда получится красивая история от начала до конца.
Штатными средствами у меня получается, только вводить последующие значения.

Re: Подскажите, как присвоить id для второй таблицы.

Это довольно странное решение, зачем все это дублировать? просто создавайте дочерние записи, как в примере, когда у абонента может быть несколько номеров, так и у вас, сможете создавать для клиента множество заявок, заявка с наибольшей датой будет текущей (активной).

Dmitry.

Re: Подскажите, как присвоить id для второй таблицы.

Ну не все дублировать, а только одну первую. У меня и сделано, что в последствии, делаются дочерние записи, но как сделать первую, чтоб ее не делать снова. А так получается, что при создании нового клиента-заказа, мне придется принуждать программу выдавать форму для заполнения события (принято в работу - дата), а не автоматически просто вписать во вторую таблицу "без шуму и пыли". smile

6 (edited by vit007 2019-03-28 11:04:09)

Re: Подскажите, как присвоить id для второй таблицы.

Все же странно как-то...
Если в новой записи разместить кн. сохранить для другой таблицы, то сохраняются все значения для всех... А если в новой записи разместить еще и кн. новая запись для другой таблицы, то сохраняются значения для новой записи первой таблицы по id, т.е. как надо. НО при нажатие на сохранить в обеих формах с новой записью создается две записи в основной форме. А если сделать скрипт или нажать закрыть первой формы, но норм. У меня возник вопрос, а как оно сохраняет, и оказывается, что при пользование второй новой записи, как-то без моего нажатия на сохранить, а просто закрыть, все сохраняет, при условии настроенной кн. сохранить. Если кн. убрать, то и не сохранит ничего. Это прям как, я писал пост, о том, как таблица становится активной, при появление кн. просмотр....
Мне бы хотелось, чтоб работала кн. сохранить правильно , без дополнительных форм и выкрутасов, для второй таблицы.

Re: Подскажите, как присвоить id для второй таблицы.

Видать, большой объем текста плохо читается, тогда подскажите скрипт. "новой записи" с применением в нем данных из data и combobox, ,без вызова дополнительной формы. Спасибо.

Re: Подскажите, как присвоить id для второй таблицы.

Наверно, надо из серии:

if Form2.dbAction = 'NewRecord' then // заполняем компонент только если форма была вызвана для создания новой записи
    begin
        if Form2.CheckBox1.Checked then Form2.Edit2.Text := 'ваше значение';
    end;

9 (edited by sibprogsistem 2019-04-01 16:17:26)

Re: Подскажите, как присвоить id для второй таблицы.

vit007 wrote:

Наверно, надо из серии:

if Form2.dbAction = 'NewRecord' then // заполняем компонент только если форма была вызвана для создания новой записи
    begin
        if Form2.CheckBox1.Checked then Form2.Edit2.Text := 'ваше значение';
    end;

Form2.dbAction
поменяйте на
Form2.Action

10 (edited by vit007 2019-04-01 16:23:40)

Re: Подскажите, как присвоить id для второй таблицы.

т.е. надо  "...у абонента может быть несколько номеров, так и у вас, сможете создавать для клиента множество заявок, ..." и у каждой заявки должно быть множество атрибутов.

    if frmAddNote.Action = 'NewRecord' then 
    begin
        frmAddNote.ComboBox1.sqlValue := frmNew.ComboBox1.sqlValue
    
    end;

ругается "incompatible types"

Re: Подскажите, как присвоить id для второй таблицы.

vit007 wrote:

Видать, большой объем текста плохо читается, тогда подскажите скрипт. "новой записи" с применением в нем данных из data и combobox, ,без вызова дополнительной формы. Спасибо.

 var tTypeKC : string = IntToStr(frmReceivinOgEquipment.cbTCK.DbItemID);
     tNameCompany : string = IntToStr(frmReceivinOgEquipment.cbNameCompany.DbItemID);
     tNameTypeOfEquipment : string = IntToStr(frmReceivinOgEquipment.cbNameTypeOfEquipment.DbItemID);
     tNameManufacturer : string = IntToStr(frmReceivinOgEquipment.cbNameManufacturer.DbItemID);
     tDate : string = FormatDateTime('yyyy-mm-dd',frmReceivinOgEquipment.dtDateInServise.DateTime);
     tCompanyOrApp : string = IntToStr(frmReceivinOgEquipment.cbnameclCompanyOrApp.DbItemID);
     tStatusName : string = IntToStr(frmReceivinOgEquipment.cbStatusName.DbItemID);
     tCount : string;
     sWarranty: string = frmReceivinOgEquipment.cbWarranty.sqlValue;
     sOnlyDiagnostic: string = frmReceivinOgEquipment.cbOnlyDiagnostic.sqlValue;
    begin
      tCount := frmReceivinOgEquipment.RecordCount.Text;
      //проверка на заполнение полей
      if (tTypeKC='-1') then ShowHint(frmReceivinOgEquipment.cbTCK, mess13)else
      if (tDate='-1') then ShowHint(frmReceivinOgEquipment.dtDateInServise, mess13)else
      if (tNameCompany='-1') then ShowHint(frmReceivinOgEquipment.cbNameCompany, mess13)else
      if (tNameTypeOfEquipment='-1') then ShowHint(frmReceivinOgEquipment.cbNameTypeOfEquipment, mess13)else
      if (tNameManufacturer='-1') then ShowHint(frmReceivinOgEquipment.cbNameManufacturer, mess13)else
      if (frmReceivinOgEquipment.eModel.Text='') then ShowHint(frmReceivinOgEquipment.eModel, mess13)else
      if (frmReceivinOgEquipment.eSerialNamber.Text='') then ShowHint(frmReceivinOgEquipment.eSerialNamber, mess13)else
      if (frmReceivinOgEquipment.eEquipment.Text='') then ShowHint(frmReceivinOgEquipment.eEquipment, mess13)else
      if (frmReceivinOgEquipment.mDescriptionATCsWords.Text='') then ShowHint(frmReceivinOgEquipment.mDescriptionATCsWords, mess13)else
      if (frmReceivinOgEquipment.mExternalStatus.Text='') then ShowHint(frmReceivinOgEquipment.mExternalStatus, mess13)else
    begin
      // запись в таблицы базы данных
      SQLExecute('INSERT INTO servise (dateInServise, id_status, id_Company, id_TypeOfEquipment, id_manufacturer, model, serialNamber, equipment, externalStatus, descriptionATCsWords, id_clCompanyOrApp, record_count, warranty, onlyDiiagnostics) VALUES ("'+tDate+'", "'+tStatusName+'", "'+tNameCompany+'", "'+ tNameTypeOfEquipment + '", "'+tNameManufacturer+'", "'+frmReceivinOgEquipment.eModel.Text+'", "'+frmReceivinOgEquipment.eSerialNamber.Text+ '", "'+frmReceivinOgEquipment.eEquipment.Text+ '", "'+ frmReceivinOgEquipment.mDescriptionATCsWords.Text+ '", "'+ frmReceivinOgEquipment.mExternalStatus.Text+ '", "'+tCompanyOrApp+'", "'+tCount+'", "'+sWarranty+'", "'+sOnlyDiagnostic+'")');
          // обновление таблицы данных главной формы
      frmServiceCen.tgList.dbUpdate;
      frmReceivinOgEquipment.RecordCount.Text := IntToStr(GetNewRecordCount('servise'));
      //закрытие формы
      frmReceivinOgEquipment.Close;
  end;

где

 tNameManufacturer : string = IntToStr(frmReceivinOgEquipment.cbNameManufacturer.DbItemID);


и есть combobox

Re: Подскажите, как присвоить id для второй таблицы.

собрал

procedure frmNew_Button2_OnClick (Sender: TObject; var Cancel: boolean);
var
    tNameManufacturer : string = IntToStr(frmNew.ComboBox1.DbItemID);
    tDate : string = FormatDateTime('yyyy-mm-dd',frmNew.DateTimePicker1.DateTime);
begin
   if frmAddNote.dbAction ='NewRecord' then
   begin
    // запись в таблицы базы данных
    SQLExecute('INSERT INTO statistic (data1, id_notice) VALUES ("'+tDate+'", "'+tNameManufacturer+'")');
      // обновление таблицы данных главной формы
    frmMain.TableGrid1.dbUpdate;
      //закрытие формы
    frmNew.Close;
    end;
end;

Но у меня получилось тоже самое, что с кнопкой сохранить, т.е. не получается к заказу присвоить атрибут вместо этого атрибут присваивается ко всем заказам...

Re: Подскажите, как присвоить id для второй таблицы.

vit007 wrote:

т.е. надо  "...у абонента может быть несколько номеров, так и у вас, сможете создавать для клиента множество заявок, ..." и у каждой заявки должно быть множество атрибутов.

    if frmAddNote.Action = 'NewRecord' then 
    begin
        frmAddNote.ComboBox1.sqlValue := frmNew.ComboBox1.sqlValue
    
    end;

ругается "incompatible types"

извиняюсь моя ошибка
что бы определить действие которое открыло форму
нужно писать просто Action
пример в архиве

procedure w_OnShow (Sender: TObject; Action: string);
begin
   if Action = 'NewRecord' then  ShowMessage('Новая запись');
  end;
Post's attachments

Attachment icon 11.7z 1.83 kb, 294 downloads since 2019-04-01 

14 (edited by sibprogsistem 2019-04-01 22:04:59)

Re: Подскажите, как присвоить id для второй таблицы.

vit007 wrote:

Но у меня получилось тоже самое, что с кнопкой сохранить, т.е. не получается к заказу присвоить атрибут вместо этого атрибут присваивается ко всем заказам...


отрибут должен присвоиться через комбобокс... он и создасть связь между таблицами...
загрузите Ваш проект

15 (edited by vit007 2019-04-02 08:46:28)

Re: Подскажите, как присвоить id для второй таблицы.

В форме frmNew, замысленно, при нажатии "сохранить" надпись "в работе" с датой приемки должны записаться в две таблицы request и statistic, при чем значения таблицы statistic должны быть индивидуальны для каждой заявки (как раньше писал "атрибут"). Его, атрибут получается присвоить только при нажатие "новая", но мне не хотелось бы вызывать еще одну форму для записи, а ограничится одной клавишей "сохранить".

Post's attachments

Attachment icon Database.rar 306.6 kb, 294 downloads since 2019-04-02 

16 (edited by sibprogsistem 2019-04-02 20:42:29)

Re: Подскажите, как присвоить id для второй таблицы.

я так понимаю..

1. Нужно в событии OnClick создать запись - ту которая будет отрибутом
2. В событии  OnAfterClick (той же кнопки) с начало получить id последней записи в таблице с атрибутом а потом присвоить этот номер id полю связи с таблицей...
сильно занять пока пример не могу написать

Re: Подскажите, как присвоить id для второй таблицы.

Спасибо, буду ждать.

Re: Подскажите, как присвоить id для второй таблицы.

готово, для понимания сделал на чистом проекте,  когда будете реализовывать на своем проекте, смотрите не перепутайте порядок!

procedure Form1_Button1_OnClick (Sender: TObject; var Cancel: boolean);
var
maxID:string;
begin
      // запись в таблицу B
    SQLExecute('INSERT INTO b (sn, model, status) VALUES ("'+Form1.Edit4.Text+'", "'+Form1.Edit5.Text+'","'+Form1.Edit6.Text+'")');
    // получаем id последней записи в таблице В
   maxID := SQLExecute('SELECT MAX(id) FROM b');
   // запись в таблицу A
    SQLExecute('INSERT INTO a (firstname, twoname, lastname, id_b) VALUES ("'+Form1.Edit1.Text+'", "'+Form1.Edit2.Text+'","'+Form1.Edit3.Text+'", "'+maxID+'")');
   // обновление таблицы данных главной формы
   Form1.TableGrid1.dbUpdate;
end;
Post's attachments

Attachment icon test.7z 3.68 kb, 276 downloads since 2019-04-03 

19 (edited by vit007 2019-04-07 18:49:31)

Re: Подскажите, как присвоить id для второй таблицы.

Все же не то... дополнил Ваш пример.

Post's attachments

Attachment icon test.rar 294.48 kb, 294 downloads since 2019-04-07 

20 (edited by vit007 2019-04-07 18:57:37)

Re: Подскажите, как присвоить id для второй таблицы.

Таблица в просмотре должна отображать записи выбранной строки главной записи, и может быть дополнено через кл. ведение истории. А получается таблица "b" в просмотре отображает все записи.

Re: Подскажите, как присвоить id для второй таблицы.

это просто пример адновременной записи в разные таблицы, если вы хотите привязывать к записям в таблице А записи из таблицы В то это делается по другому...

Post's attachments

Attachment icon test.7z 3.67 kb, 289 downloads since 2019-04-07 

Re: Подскажите, как присвоить id для второй таблицы.

забыл сохранить связи

Post's attachments

Attachment icon test.7z 3.67 kb, 272 downloads since 2019-04-08 

Re: Подскажите, как присвоить id для второй таблицы.

Блин, как так мое сообщение не верицировалось...

Суть такова, что все равно не то smile. Сейчас получился пример записной книжки, кот. Дмитрий советовал брать за пример...
Рядом, но нет. Данная мысль появилась, из-за того, что клавиша сохранить не может сохранять в две таблицы...
А надо мне так, пример действия,
поступила заявка, у кот. есть дата приемки и присвоен признак - "В работе", и надо чтоб данная дата и признак, попали в грид, кот. расположен в форме просмотра. Там же, в форме просмотра, добавлять кл. "Ведение истории" новые даты и признаки, и все это должно принадлежать одной заявкам, а не всем...

Re: Подскажите, как присвоить id для второй таблицы.

соедините оба варианта и получите, то, что хотели..
просто не спешите, если что-то не получается, отдохните или делайте проект дальше, потом вернетесь к этому вопросу, даже крупные разработчики вынуждены отказываться от некоторых частей своих идей. Можете нарисовать то, что Вам нужно, только хорошо подумайте..

25 (edited by vit007 2019-04-09 08:00:24)

Re: Подскажите, как присвоить id для второй таблицы.

sibprogsistem, вашего первого примера, мне показалось, что дата и статус должны быть в одно отдельной таблице, но тогда нужен скрит, чтоб выбиралась самая первая и последняя даты для отображения в главном гриде...
Начертания начальной задумки прикрепил smile

Post's attachments

Attachment icon mvd.xlsx 11.4 kb, 287 downloads since 2019-04-09