Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
 Re: Создание таблицы  [new]
Polesov
Member

Откуда:
Сообщений: 578
Bora2015
самообучение

https://docplayer.ru/26222180-Programmirovanie-baz-dannyh-v-delphi.html
5 июл 19, 06:27    [21921264]     Ответить | Цитировать Сообщить модератору
 Re: Создание таблицы  [new]
Bora2015
Member

Откуда:
Сообщений: 35
Polesov,
Ввод данных в первую таблицу у меня происходил через combobox.


Table1.Insert;
 Table1.FieldByName('Projname').AsString:=ComboBox1.Text;
Form1.Caption:=Table1.FieldByName('Projname').AsString;
  Table1.Post;


А во вторую таблицу

Table3.Insert;
  for i:=0 to 5 do
  begin

       Table3.FieldByName('Cy1').AsString:=floattostr(Cyst[i]);
        Table3.FieldByName('Ka1').AsString:=floattostr(kA1[i]);
        Table3.FieldByName('Kb1').AsString:=floattostr(kB1[i]);
        Table3.FieldByName('Cp1').AsString:=floattostr(cp1[i]);
        Table3.FieldByName('Cp2').AsString:=floattostr(cp2[i]);
        Table3.FieldByName('Cm1').AsString:=floattostr(cm1[i]);
        Table3.FieldByName('Cm2').AsString:=floattostr(cm2[i]);
        Table3.FieldByName('Y1').AsString:=floattostr(Y1[i]);
        Table3.FieldByName('M1').AsString:=floattostr(M1[i]);
        Table3.FieldByName('Y2').AsString:=floattostr(Y2[i]);
        Table3.FieldByName('M2').AsString:=floattostr(M2[i]);    
        end;
   
 Table3.Post;


автор
// Вставка мастер-записи
MasterDataSet.Insert;
MasterDataSet.FildByName( 'MASTER_ID' ).AsInteger := NewMasterId;
MasterDataSet.Post;

// Вставка шести детайл-записей
DetailDataSet.Insert;
// Запись 1
DetailDataSet.FildByName( 'DETAIL_ID' ).AsInteger := NewDetailId1;
DetailDataSet.FildByName( 'MASTER_ID' ).AsInteger := NewMasterId;
// Запись 2
DetailDataSet.FildByName( 'DETAIL_ID' ).AsInteger := NewDetailId2;
DetailDataSet.FildByName( 'MASTER_ID' ).AsInteger := NewMasterId;
// Запись 3
DetailDataSet.FildByName( 'DETAIL_ID' ).AsInteger := NewDetailId3;
DetailDataSet.FildByName( 'MASTER_ID' ).AsInteger := NewMasterId;
// Запись 4
DetailDataSet.FildByName( 'DETAIL_ID' ).AsInteger := NewDetailId4;
DetailDataSet.FildByName( 'MASTER_ID' ).AsInteger := NewMasterId;
// Запись 5
DetailDataSet.FildByName( 'DETAIL_ID' ).AsInteger := NewDetailId5;
DetailDataSet.FildByName( 'MASTER_ID' ).AsInteger := NewMasterId;
// Запись 6
DetailDataSet.FildByName( 'DETAIL_ID' ).AsInteger := NewDetailId6;
DetailDataSet.FildByName( 'MASTER_ID' ).AsInteger := NewMasterId;
DetailDataSet.Post;


У первой таблицы первич. ключ Projid, а у второй Rid.

MASTER_ID понятно у меня Projid, а NewMasterId это что ?
8 июл 19, 01:36    [21922390]     Ответить | Цитировать Сообщить модератору
 Re: Создание таблицы  [new]
goldmi45
Member

Откуда:
Сообщений: 1161
Bora2015
Polesov,
У первой таблицы первич. ключ Projid, а у второй Rid.

MASTER_ID понятно у меня Projid, а NewMasterId это что ?

MASTER_ID - название поля в таблице.
NewMasterId - значение записи первичного ключа в таблице мастера (ссылка).
8 июл 19, 08:17    [21922418]     Ответить | Цитировать Сообщить модератору
 Re: Создание таблицы  [new]
Polesov
Member

Откуда:
Сообщений: 578
Bora2015
  Table3.Insert;
  for i:=0 to 5 do
  begin

      Table3.FieldByName('Cy1').AsString:=floattostr(Cyst[i]);
      Table3.FieldByName('Ka1').AsString:=floattostr(kA1[i]);
      Table3.FieldByName('Kb1').AsString:=floattostr(kB1[i]);
      Table3.FieldByName('Cp1').AsString:=floattostr(cp1[i]);
      Table3.FieldByName('Cp2').AsString:=floattostr(cp2[i]);
      Table3.FieldByName('Cm1').AsString:=floattostr(cm1[i]);
      Table3.FieldByName('Cm2').AsString:=floattostr(cm2[i]);
      Table3.FieldByName('Y1').AsString:=floattostr(Y1[i]);
      Table3.FieldByName('M1').AsString:=floattostr(M1[i]);
      Table3.FieldByName('Y2').AsString:=floattostr(Y2[i]);
      Table3.FieldByName('M2').AsString:=floattostr(M2[i]);    
  end;
  Table3.Post;

Я дико извиняюсь - Table3.Insert; требуется для каждой итерации цикла, иначе вставиться только одна запись, в которой будут последние значения.

Bora2015
MASTER_ID понятно у меня Projid, а NewMasterId это что ?

NewMasterId - значение первичного ключа мастер-таблицы, по которому, собственно, осуществляется связь мастер-детайл.
8 июл 19, 09:52    [21922477]     Ответить | Цитировать Сообщить модератору
 Re: Создание таблицы  [new]
Bora2015
Member

Откуда:
Сообщений: 35
А связь надо установить не введением дополнит. поля (помимо id первич. ключа) в главной таблице с которым и связать c id (первич. ключ) подчиненной ?
9 июл 19, 00:30    [21923142]     Ответить | Цитировать Сообщить модератору
 Re: Создание таблицы  [new]
Gator
Member

Откуда: Москва
Сообщений: 14347
Дико извиняюсь, речь то шла об 1 таблице
Bora2015
Здравствуйте. Как программно создать таблицу paradox при добавлении новой записи в другую таблицу? Т.е добавил в таблицу 1 запись ,создалась новая таблица (с фиксиров. колич. полей) с именем того , что ввели в первую запись , вторую создалась вторая и т.д.

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

Пусть уже отвяжется от парадокса и почитает, наконец, умные книжки.
9 июл 19, 01:21    [21923148]     Ответить | Цитировать Сообщить модератору
 Re: Создание таблицы  [new]
Bora2015
Member

Откуда:
Сообщений: 35
Polesov,
Я связал таблицы по Rid (ключевое поле автоинкрементного типа подчинённой таблицы) с полем Prezult главной. И при добавлении данных в таблицу получается ошибка ...class Edatabaserror with message field Rid cannot be modified. Связывал через инспектор объектов. Почему возникает ошибка?
11 июл 19, 16:57    [21925096]     Ответить | Цитировать Сообщить модератору
 Re: Создание таблицы  [new]
Polesov
Member

Откуда:
Сообщений: 578
Bora2015
Я связал таблицы по Rid (ключевое поле автоинкрементного типа подчинённой таблицы) с полем Prezult главной. И при добавлении данных в таблицу получается ошибка ...class Edatabaserror with message field Rid cannot be modified. Связывал через инспектор объектов. Почему возникает ошибка?
Значения автоинкрементных полей менять нельзя.

Master имеет свой первичный ключ, detail - свой первичный ключ и ссылочное значение Master_Id (по сути первичный ключ Master).
Принадлежность записей Detail к Master определяется значением поля Master_Id в Detail-таблице.

К сообщению приложен файл. Размер - 1Kb
12 июл 19, 14:14    [21925734]     Ответить | Цитировать Сообщить модератору
 Re: Создание таблицы  [new]
Bora2015
Member

Откуда:
Сообщений: 35
Polesov
Bora2015
Вот это мне и не понятно.


// Вставка мастер-записи
  MasterDataSet.Insert;
  MasterDataSet.FildByName( 'MASTER_ID' ).AsInteger := NewMasterId;
  MasterDataSet.Post;

// Вставка шести детайл-записей
  DetailDataSet.Insert;
// Запись 1
  DetailDataSet.FildByName( 'DETAIL_ID' ).AsInteger := NewDetailId1;
  DetailDataSet.FildByName( 'MASTER_ID' ).AsInteger := NewMasterId;
// Запись 2
  DetailDataSet.FildByName( 'DETAIL_ID' ).AsInteger := NewDetailId2;
  DetailDataSet.FildByName( 'MASTER_ID' ).AsInteger := NewMasterId;
// Запись 3
  DetailDataSet.FildByName( 'DETAIL_ID' ).AsInteger := NewDetailId3;
  DetailDataSet.FildByName( 'MASTER_ID' ).AsInteger := NewMasterId;
// Запись 4
  DetailDataSet.FildByName( 'DETAIL_ID' ).AsInteger := NewDetailId4;
  DetailDataSet.FildByName( 'MASTER_ID' ).AsInteger := NewMasterId;
// Запись 5
  DetailDataSet.FildByName( 'DETAIL_ID' ).AsInteger := NewDetailId5;
  DetailDataSet.FildByName( 'MASTER_ID' ).AsInteger := NewMasterId;
// Запись 6
  DetailDataSet.FildByName( 'DETAIL_ID' ).AsInteger := NewDetailId6;
  DetailDataSet.FildByName( 'MASTER_ID' ).AsInteger := NewMasterId;
  DetailDataSet.Post;


У меня вставка мастер записи происходит так:
автор
Table1.Insert;
Table1.FieldByname('Projname').AsString:=Combobox1.Text;
Table1.Post;


Как записать с учётом сообщения выше о вставке мастер -записи?
12 июл 19, 14:45    [21925770]     Ответить | Цитировать Сообщить модератору
 Re: Создание таблицы  [new]
Polesov
Member

Откуда:
Сообщений: 578
Bora2015
У меня вставка мастер записи происходит так:
Table1.Insert;
Table1.FieldByname('Projname').AsString:=Combobox1.Text;
Table1.Post;
Как записать с учётом сообщения выше о вставке мастер -записи?

  MasterId := Table1.FieldByName( 'ID' ).AsInteger;
  for i := 1 to 6 do
  begin
    Table2.Insert;
    Table2.FieldByName( 'MASTER_ID' ).AsInteger := MasterId; 
  end;
  Table2.Post;
12 июл 19, 16:12    [21925880]     Ответить | Цитировать Сообщить модератору
 Re: Создание таблицы  [new]
LocksmithPC
Member

Откуда:
Сообщений: 184
Я тебе здесь 21925629 все расписал с картинками
13 июл 19, 12:03    [21926126]     Ответить | Цитировать Сообщить модератору
 Re: Создание таблицы  [new]
Bora2015
Member

Откуда:
Сообщений: 35
Polesov
Bora2015
У меня вставка мастер записи происходит так:
Table1.Insert;
Table1.FieldByname('Projname').AsString:=Combobox1.Text;
Table1.Post;
Как записать с учётом сообщения выше о вставке мастер -записи?

  MasterId := Table1.FieldByName( 'ID' ).AsInteger;
  for i := 1 to 6 do
  begin
    Table2.Insert;
    Table2.FieldByName( 'MASTER_ID' ).AsInteger := MasterId; 
  end;
  Table2.Post;
У меня один обработчик добавляет запись в таблицу проектов ,а другой в таблицу исходн. данных и таблицу результатов. А этот код в какой обработчик?
16 июл 19, 11:05    [21927333]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
Все форумы / Delphi Ответить