powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Условие на редактирование записей
23 сообщений из 48, страница 2 из 2
Условие на редактирование записей
    #39843726
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bora2015, предлагаещь мне нарисовать?
...
Рейтинг: 0 / 0
Условие на редактирование записей
    #39843731
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GatorBora2015, предлагаещь мне нарисовать?
Вчера на работе, два "архитектора" принесли базу, "что-то в связях не так". Вытрясти из них диаграмму не получилось, "а мы не рисуем, сразу скриптами", пришлось исследовать и рисовать самому. Разобрались, исправили, картинку забрали с собой. И ведь наверняка и ее пролюбят, черти...
...
Рейтинг: 0 / 0
Условие на редактирование записей
    #39843744
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bora2015Мне не понятно, как редактировать данные которые хранятся в табл 3, чтобы менялись все шесть записей в поле ,а не только первый.
Тебе для начала надо определиться со структурой таблиц в базе. Боюсь, ты не до конца понимаешь, чем запись в наборе данных отличается от поля записи. Отсюда и путаница в объяснениях.

К сожалению, ты так и описал точно твоей задачи. Поэтому предположим, что для каждого проекта из Table1 может быть несколько записей в Table2 (классическая master-detail с соотношением 1:n). А раз так, то тебе необязательно заводить еще и Table3. Достаточно в Table2 (помимо автоинкременного 'ishid' и FK на Table1 'isid') сделать 6 полей для исходных данных (например, 'FldSrcData0', 'FldSrcData1'... до 'FldSrcData5') + еще 6 полей (по аналогии, 'FldResultData0', 'FldResultData1'... до 'FldResultData5'), куда ты будешь записывать результаты полученных расчетов. Ну и, чтобы записи одного проекта в Table2 еще как-то отличались друг от друга можно ввести еще какое-нибудь поле, например 'ResearchDate', которое будет показывать, когда проводились замеры для данныго проекта. Отсюда:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
var
  RD: Variant;
  MyIntArr: array [0..5] of Integer;
  i: Integer;
begin
  RD:= date;//будем искать записи, например, на текущую дату

  //заполняем массив (для теста) произвольными значениями
  for i:= Low(MyIntArr) to High(MyIntArr) do
  MyIntArr[i]:= i * 2;
  
  //если в этой Table2 для проекта с ID Table1.FieldByName('Projid').Value существует подчиненная запись на дату RD
  if Table2.Locate('Isid;ResearchDate', VarArrayOf([Table1.FieldByName('Projid').Value, RD],[]) then
  begin
    Table2.Edit; //редактируем таблю
    //записываем в соответствующие поля значения соответствующих элементов массива
    Table2.FieldByName(FldResultData0').Value:= MyIntArr[0];   
    Table2.FieldByName(FldResultData1').Value:= MyIntArr[1];
     ...     
    Table2.FieldByName(FldResultData5').Value:= MyIntArr[5];    
    Table2.Post;//сохраняем изменения
  end;
end;


Работоспособность кода не проверял, лень поднимать D7 с БДЕ, но общий посыл должен быть понятен :)
...
Рейтинг: 0 / 0
Условие на редактирование записей
    #39843809
Bora2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ДокBora2015Мне не понятно, как редактировать данные которые хранятся в табл 3, чтобы менялись все шесть записей в поле ,а не только первый.
Тебе для начала надо определиться со структурой таблиц в базе. Боюсь, ты не до конца понимаешь, чем запись в наборе данных отличается от поля записи. Отсюда и путаница в объяснениях.

К сожалению, ты так и описал точно твоей задачи. Поэтому предположим, что для каждого проекта из Table1 может быть несколько записей в Table2 (классическая master-detail с соотношением 1:n). А раз так, то тебе необязательно заводить еще и Table3. Достаточно в Table2 (помимо автоинкременного 'ishid' и FK на Table1 'isid') сделать 6 полей для исходных данных (например, 'FldSrcData0', 'FldSrcData1'... до 'FldSrcData5') + еще 6 полей (по аналогии, 'FldResultData0', 'FldResultData1'... до 'FldResultData5'), куда ты будешь записывать результаты полученных расчетов. Ну и, чтобы записи одного проекта в Table2 еще как-то отличались друг от друга можно ввести еще какое-нибудь поле, например 'ResearchDate', которое будет показывать, когда проводились замеры для данныго проекта. Отсюда:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
var
  RD: Variant;
  MyIntArr: array [0..5] of Integer;
  i: Integer;
begin
  RD:= date;//будем искать записи, например, на текущую дату

  //заполняем массив (для теста) произвольными значениями
  for i:= Low(MyIntArr) to High(MyIntArr) do
  MyIntArr[i]:= i * 2;
  
  //если в этой Table2 для проекта с ID Table1.FieldByName('Projid').Value существует подчиненная запись на дату RD
  if Table2.Locate('Isid;ResearchDate', VarArrayOf([Table1.FieldByName('Projid').Value, RD],[]) then
  begin
    Table2.Edit; //редактируем таблю
    //записываем в соответствующие поля значения соответствующих элементов массива
    Table2.FieldByName(FldResultData0').Value:= MyIntArr[0];   
    Table2.FieldByName(FldResultData1').Value:= MyIntArr[1];
     ...     
    Table2.FieldByName(FldResultData5').Value:= MyIntArr[5];    
    Table2.Post;//сохраняем изменения
  end;
end;


Работоспособность кода не проверял, лень поднимать D7 с БДЕ, но общий посыл должен быть понятен :)
Да, это если одно выражение результирующее( массив), а у меня их в 19. Т.о 19x5=95. Это значит 95 полей будет.
...
Рейтинг: 0 / 0
Условие на редактирование записей
    #39843863
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bora2015Да, это если одно выражение результирующее( массив), а у меня их в 19.
Тогда у тебя будет 19 записей за раз, и каждая запись будет соответствовать расчету в определенный момент времени (при условии, что исходные данные тоже будут в этот момент другие). Если исходные данные те же, а расчеты другие, то лепи еще одну master-->detail, но теперь уже на таблицу Table2 --> Table3. Точнее сказать сложно, не зная деталей твоей задачи.

Короче, тебе надо основательно изучать теорию реляционных баз данных , чтобы работать дальше.
...
Рейтинг: 0 / 0
Условие на редактирование записей
    #39843899
Bora2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ДокBora2015Да, это если одно выражение результирующее( массив), а у меня их в 19.
Тогда у тебя будет 19 записей за раз, и каждая запись будет соответствовать расчету в определенный момент времени (при условии, что исходные данные тоже будут в этот момент другие). Если исходные данные те же, а расчеты другие, то лепи еще одну master-->detail, но теперь уже на таблицу Table2 --> Table3. Точнее сказать сложно, не зная деталей твоей задачи.
.
Изначально я хотел в табл 2 хранить исходн данные , табл 1 связана с табл 2 один к одному (т.е одному проекту соответ 1 набор исходн. данных ) ,а табл 3 результат. Т.о получается один проект -> один набор данных и соответствующий набору результат (тоже один ,но в 19 записях). Тогда как вывести в табл 3 эти 19 записей?
...
Рейтинг: 0 / 0
Условие на редактирование записей
    #39844039
Bora2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bora2015Докпропущено...

Тогда у тебя будет 19 записей за раз, и каждая запись будет соответствовать расчету в определенный момент времени (при условии, что исходные данные тоже будут в этот момент другие). Если исходные данные те же, а расчеты другие, то лепи еще одну master-->detail, но теперь уже на таблицу Table2 --> Table3. Точнее сказать сложно, не зная деталей твоей задачи.
.
Изначально я хотел в табл 2 хранить исходн данные , табл 1 связана с табл 2 один к одному (т.е одному проекту соответ 1 набор исходн. данных ) ,а табл 3 результат. Т.о получается один проект -> один набор данных и соответствующий набору результат (тоже один ,но в 19 записях). Тогда как вывести в табл 3 эти 19 записей?
Из 19 шестимерных массивов сформировать шесть 19 мерных и их использовать ? Или есть другие решения?
...
Рейтинг: 0 / 0
Условие на редактирование записей
    #39844196
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть решения:
1. 21939514
2. Нанять программиста
...
Рейтинг: 0 / 0
Условие на редактирование записей
    #39844205
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёё,

Слово понравилось. ПРОЛЮБЯТ. Класс!

А инструмента ахики не знают, раз скрипты ваяют, а диаграммку напечатать лень (диаграмма сама скрипты напечатать может. Хотя бы полуфабрикат. И рисовать на ней удобнее.
...
Рейтинг: 0 / 0
Условие на редактирование записей
    #39844221
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bora2015,

Bora2015Т.о получается один проект -> один набор данных и соответствующий набору результат (тоже один ,но в 19 записях). Тогда как вывести в табл 3 эти 19 записей?
Мда, архитектура в таком случае получается очень кривая. Но если реализовывать твою хотелку 1:1, то будет выглядеть примерно так (я покажу на примере FB, типы данных в БДЕ немного другие)
код
Код: sql
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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
-- создаем таблю с проектами
CREATE TABLE TBL_MAIN (
    ID         INTEGER NOT NULL,
    PROJ_NAME  VARCHAR(10) NOT NULL
);

ALTER TABLE TBL_MAIN ADD CONSTRAINT PK_TBL_MAIN PRIMARY KEY (ID);

--табля с исходными данными
CREATE TABLE TBL_SOURCE (
    ID       INTEGER NOT NULL,
    FK_MAIN  INTEGER NOT NULL,
    FLD_0    INTEGER,
    FLD_1    INTEGER,
    FLD_3    INTEGER,
    FLD_4    INTEGER,
    FLD_5    INTEGER
);


ALTER TABLE TBL_SOURCE ADD CONSTRAINT PK_TBL_SOURCE PRIMARY KEY (ID);

ALTER TABLE TBL_SOURCE ADD CONSTRAINT FK_TBL_SOURCE_1 FOREIGN KEY (FK_MAIN) REFERENCES TBL_MAIN (ID);

-- табля с результатами
CREATE TABLE TBL_RESULT (
    ID           INTEGER NOT NULL,
    FK_SOURCE    INTEGER NOT NULL,
    CALC_DATE    TIMESTAMP NOT NULL, --  это поле денормализует эту таблицу и его бы надо вынести в отдельную таблю, но для упрощенного примера пойдет
    FLD_RESULT_0  INTEGER,
    FLD_RESULT_1  INTEGER,
    FLD_RESULT_2  INTEGER,
    FLD_RESULT_3  INTEGER,
    FLD_RESULT_4  INTEGER,
    FLD_RESULT_5  INTEGER
);


ALTER TABLE TBL_RESULT ADD CONSTRAINT PK_TBL_RESULT PRIMARY KEY (ID);

ALTER TABLE TBL_RESULT ADD CONSTRAINT FK_TBL_RESULT_1 FOREIGN KEY (FK_SOURCE) REFERENCES TBL_SOURCE (ID);

графическое представление


Если хочешь добавлять записи пачками по 19 за раз, то таки да, тебе нужен двумерный массив [6,19]
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
var
  i: integer;
  CurrDateTime: TDateTime;
  MyIntArr: array [0..5, 0..18] of Integer; 
begin
 
  if Tbl_Source.Locate('FK_MAIN', Tbl_Main.FieldByName('ID').Value,[]) then
  for i:= 0 to 18 do
    begin
      CurrDateTime:= Now;//текущий момент
      Tbl_Result.Append;//добавляем
      Tbl_Result.FieldByName('FK_SOURCE').Value:= Tbl_Source.FieldByName('ID').Value;//ссылка на родителя
      Tbl_Result.FieldByName('FK_SOURCE').Value:= CurrDateTime;

      //будем считать, что массив заполнен и готов к употреблению
      Tbl_Result.FieldByName('FLD_RESULT_0').Value:= MyIntArr[0,i];
      Tbl_Result.FieldByName('FLD_RESULT_1').Value:= MyIntArr[1,i];
      Tbl_Result.FieldByName('FLD_RESULT_2').Value:= MyIntArr[2,i];
      Tbl_Result.FieldByName('FLD_RESULT_3').Value:= MyIntArr[3,i];
      Tbl_Result.FieldByName('FLD_RESULT_4').Value:= MyIntArr[4,i];
      Tbl_Result.FieldByName('FLD_RESULT_5').Value:= MyIntArr[5,i];
      Tbl_Result.Post;//сохраняем
    end;
end;



Таким образом, тут добавляется 19 х 6 = 114 записей. Дальше - сам.
...
Рейтинг: 0 / 0
Условие на редактирование записей
    #39844238
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доктут добавляется 19 х 6 = 114 записей
ой, бл@ ©
записей таки 19 :)
...
Рейтинг: 0 / 0
Условие на редактирование записей
    #39844243
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще ошибка копипасты (код писан из головы, на коленке). Читай так:
Код: pascal
1.
2.
3.
...
Tbl_Result.FieldByName('CALC_DATE').Value:= CurrDateTime;
...
...
Рейтинг: 0 / 0
Условие на редактирование записей
    #39844615
Bora2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ДокBora2015,

Bora2015Т.о получается один проект -> один набор данных и соответствующий набору результат (тоже один ,но в 19 записях). Тогда как вывести в табл 3 эти 19 записей?
Мда, архитектура в таком случае получается очень кривая. Но если реализовывать твою хотелку 1:1, то будет выглядеть примерно так (я покажу на примере FB, типы данных в БДЕ немного другие)
код
Код: sql
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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
-- создаем таблю с проектами
CREATE TABLE TBL_MAIN (
    ID         INTEGER NOT NULL,
    PROJ_NAME  VARCHAR(10) NOT NULL
);

ALTER TABLE TBL_MAIN ADD CONSTRAINT PK_TBL_MAIN PRIMARY KEY (ID);

--табля с исходными данными
CREATE TABLE TBL_SOURCE (
    ID       INTEGER NOT NULL,
    FK_MAIN  INTEGER NOT NULL,
    FLD_0    INTEGER,
    FLD_1    INTEGER,
    FLD_3    INTEGER,
    FLD_4    INTEGER,
    FLD_5    INTEGER
);


ALTER TABLE TBL_SOURCE ADD CONSTRAINT PK_TBL_SOURCE PRIMARY KEY (ID);

ALTER TABLE TBL_SOURCE ADD CONSTRAINT FK_TBL_SOURCE_1 FOREIGN KEY (FK_MAIN) REFERENCES TBL_MAIN (ID);

-- табля с результатами
CREATE TABLE TBL_RESULT (
    ID           INTEGER NOT NULL,
    FK_SOURCE    INTEGER NOT NULL,
    CALC_DATE    TIMESTAMP NOT NULL, --  это поле денормализует эту таблицу и его бы надо вынести в отдельную таблю, но для упрощенного примера пойдет
    FLD_RESULT_0  INTEGER,
    FLD_RESULT_1  INTEGER,
    FLD_RESULT_2  INTEGER,
    FLD_RESULT_3  INTEGER,
    FLD_RESULT_4  INTEGER,
    FLD_RESULT_5  INTEGER
);


ALTER TABLE TBL_RESULT ADD CONSTRAINT PK_TBL_RESULT PRIMARY KEY (ID);

ALTER TABLE TBL_RESULT ADD CONSTRAINT FK_TBL_RESULT_1 FOREIGN KEY (FK_SOURCE) REFERENCES TBL_SOURCE (ID);

графическое представление


Если хочешь добавлять записи пачками по 19 за раз, то таки да, тебе нужен двумерный массив [6,19]
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
var
  i: integer;
  CurrDateTime: TDateTime;
  MyIntArr: array [0..5, 0..18] of Integer; 
begin
 
  if Tbl_Source.Locate('FK_MAIN', Tbl_Main.FieldByName('ID').Value,[]) then
  for i:= 0 to 18 do
    begin
      CurrDateTime:= Now;//текущий момент
      Tbl_Result.Append;//добавляем
      Tbl_Result.FieldByName('FK_SOURCE').Value:= Tbl_Source.FieldByName('ID').Value;//ссылка на родителя
      Tbl_Result.FieldByName('FK_SOURCE').Value:= CurrDateTime;

      //будем считать, что массив заполнен и готов к употреблению
      Tbl_Result.FieldByName('FLD_RESULT_0').Value:= MyIntArr[0,i];
      Tbl_Result.FieldByName('FLD_RESULT_1').Value:= MyIntArr[1,i];
      Tbl_Result.FieldByName('FLD_RESULT_2').Value:= MyIntArr[2,i];
      Tbl_Result.FieldByName('FLD_RESULT_3').Value:= MyIntArr[3,i];
      Tbl_Result.FieldByName('FLD_RESULT_4').Value:= MyIntArr[4,i];
      Tbl_Result.FieldByName('FLD_RESULT_5').Value:= MyIntArr[5,i];
      Tbl_Result.Post;//сохраняем
    end;
end;



Я так понимаю это код на добавление записей. А двумерный массив тут обязателен или можно одномерным? Я через одномерный реализовал.При добавлении (первоначальном) добавляет. При редактировании заменяется только первая запись из 19.
...
Рейтинг: 0 / 0
Условие на редактирование записей
    #39844663
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bora2015,

извини, но я и так сделал гораздо больше, чем должен был
. Или выкладывай неработающий код, или делай сам. У меня свободно времени не так много.
...
Рейтинг: 0 / 0
Условие на редактирование записей
    #39844711
Bora2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ДокBora2015,

извини, но я и так сделал гораздо больше, чем должен был
. Или выкладывай неработающий код, или делай сам. У меня свободно времени не так много.

Принципиально тут ничего не поменялось.
Код: pascal
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.
27.
28.
if  not Table2.Locate('Isid',Table1.FieldByName('Projid').AsInteger,[]) then
      begin
   for i:=0 to 18 do
  begin
  Table2.Insert;
          Table3.FieldByName('Alfa1').AsString:=floattostr(C1_[0,i]);
  Table3.FieldByName('Alfa2').AsString:=floattostr(C2_[1,i]);
  Table3.FieldByName('Alfa3').AsString:=floattostr(C3_[2,i]);
  Table3.FieldByName('Alfa4').AsString:=floattostr(C4_[3,i]);
  Table3.FieldByName('Alfa5').AsString:=floattostr(C5_[4,i]);
  Table3.FieldByName('Alfa6').AsString:=floattostr(C6_[5,i]);
 Table2.Post;
end;
end
else
begin
 for i:=0 to 18  do
  begin
         Table3.Edit;
Table3.FieldByName('Alfa1').AsString:=floattostr(C1_[0,i]);
  Table3.FieldByName('Alfa2').AsString:=floattostr(C2_[1,i]);
  Table3.FieldByName('Alfa3').AsString:=floattostr(C3_[2,i]);
  Table3.FieldByName('Alfa4').AsString:=floattostr(C4_[3,i]);
  Table3.FieldByName('Alfa5').AsString:=floattostr(C5_[4,i]);
  Table3.FieldByName('Alfa6').AsString:=floattostr(C6_[5,i]);
  Table3.Post;
  end;
end;
...
Рейтинг: 0 / 0
Условие на редактирование записей
    #39844875
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bora2015Принципиально тут ничего не поменялось.

Код: pascal
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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
if  not Table2.Locate('Isid',Table1.FieldByName('Projid').AsInteger,[]) then
begin
  for i:=0 to 18 do
  begin
    //вставляешь новую запись в Table2 с учетом цикла 19(!) раз 
    //и если учесть, что это detail-таблица, то не видно в коде, как ты заполняешь поле 'Isid'
    Table2.Insert;

//-----------------------------------------------------------------

    //пытаешься изменить значение полей в Table3?
    //но у тебя датасет находится в нередактируемом состоянии (где Insert/Append?)
    //исходя из предположения, что ты проигнорировал мои советы по проектированию БД
    //и  Table3 - это detail-таблица для Table1, где код заполнения поля 'rezid'?
    Table3.FieldByName('Alfa1').AsString:=floattostr(C1_[0,i]);//здесь берется значение из массива C1_
    Table3.FieldByName('Alfa2').AsString:=floattostr(C2_[1,i]);//здесь берется значение из массива C2_
    Table3.FieldByName('Alfa3').AsString:=floattostr(C3_[2,i]);
    Table3.FieldByName('Alfa4').AsString:=floattostr(C4_[3,i]);
    Table3.FieldByName('Alfa5').AsString:=floattostr(C5_[4,i]);
    Table3.FieldByName('Alfa6').AsString:=floattostr(C6_[5,i]);
    //итого, у тебя получается 6(!) двумерных массивов. WTF?
    //про Table3.Post говорить тоже излишне

//-----------------------------------------------------------------
    //учитывая 19 Insert'ов, соответственно делаем 19 раз...
    Table2.Post; 
    //и в итоге получаем 19 пустых записей в Table2 (если, конечно, поле 'Isid' допускает NULL-значение)
  end;
end
else
begin
//-----------------------------------------------------------------
  //где Table3.Locate('rezid',Table1.FieldByName('Projid').AsInteger,[])?
  //как приложение должно угадать, какую запись нужно редактировать?
  for i:=0 to 18  do
  begin
    Table3.Edit;
    Table3.FieldByName('Alfa1').AsString:=floattostr(C1_[0,i]);
    Table3.FieldByName('Alfa2').AsString:=floattostr(C2_[1,i]);
    Table3.FieldByName('Alfa3').AsString:=floattostr(C3_[2,i]);
    Table3.FieldByName('Alfa4').AsString:=floattostr(C4_[3,i]);
    Table3.FieldByName('Alfa5').AsString:=floattostr(C5_[4,i]);
    Table3.FieldByName('Alfa6').AsString:=floattostr(C6_[5,i]);
    Table3.Post;
    //на первой итерации ты прекрасно отредактировал запись
    //теперь тебе надо перейти к следующей записи с такой же 'rezid' (их должно быть еще 18)
    //но ты не сможешь, потому что эту часть кода (for..to..do) нужно завернуть в цикл
    
    //Table3.First
    //while (not Table3.EOF) and (Table3.FieldByName('rezid').Value = Table1.FieldByName('Projid').Value) do
    //begin
    //...
    //Table3.Next;
    //end;
  
    //поэтому ты редактируешь эту запись еще 18 раз :)  
 end;
end;


Я думаю, что тебе сначала просто необходимо почитать книжки. Их сейчас много. Их легко скачать. Их можно читать на чем угодно, где угодно и когда угодно. Было бы желание.

Ну и напоследок еще один полезный совет отсюда
авторФорум - это ускоренные курсы решения проблемы. Которые уже подразумевают наличие базовых знаний. А "блеяние" насчет "играл-играл, угадал все буквы, но не смог прочитать слово" - это не для форума.
Для получения базовых знаний нужно образование. Либо самообразование (т.е. чтение документации), либо обучение (т.е. курсы). Но форуме нет времени для подбора методики общения с каждым вопрашающим.
Есть планка. Не выполнил ее - иди "расти".
...
Рейтинг: 0 / 0
Условие на редактирование записей
    #39844946
Bora2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Док,

Сообщение 21940817 записано было не полностью и с опечатками. (торопился)

Код: pascal
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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
if  not Table2.Locate('Isid',Table1.FieldByName('Projid').AsInteger,[]) then
      begin
Table2.Insert; 
  for i:=0 to 18 do
  begin
 Table3.Insert;
  Table3.FieldByName('Alfa1').AsString:=floattostr(C1_[0,i]);
  Table3.FieldByName('Alfa2').AsString:=floattostr(C2_[1,i]);
  Table3.FieldByName('Alfa3').AsString:=floattostr(C3_[2,i]);
  Table3.FieldByName('Alfa4').AsString:=floattostr(C4_[3,i]);
  Table3.FieldByName('Alfa5').AsString:=floattostr(C5_[4,i]);
  Table3.FieldByName('Alfa6').AsString:=floattostr(C6_[5,i]);
 Table3.Post;
end;
end
else
  Table2.Edit;
begin
 for i:=0 to 18  do
  begin
         Table3.Edit;
Table3.FieldByName('Alfa1').AsString:=floattostr(C1_[0,i]);
  Table3.FieldByName('Alfa2').AsString:=floattostr(C2_[1,i]);
  Table3.FieldByName('Alfa3').AsString:=floattostr(C3_[2,i]);
  Table3.FieldByName('Alfa4').AsString:=floattostr(C4_[3,i]);
  Table3.FieldByName('Alfa5').AsString:=floattostr(C5_[4,i]);
  Table3.FieldByName('Alfa6').AsString:=floattostr(C6_[5,i]);
  Table3.Post;
  end;
end;
  if Edit1.Text<>'' then Table2.FieldByName('Dmin').AsString:=Edit1.Text;
        if Edit2.Text<>'' then  Table2.FieldByName('Lnas').AsString:=Edit2.Text;
        if Edit3.Text<>'' then Table2.FieldByName('Lm').AsString:=Edit3.Text;
        if Edit4.Text<>'' then Table2.FieldByName('V0').AsString:=Edit4.Text;
        if Edit5.Text<>'' then Table2.FieldByName('P1').AsString:=Edit5.Text;
........................
 Table2.Post;
...
Рейтинг: 0 / 0
Условие на редактирование записей
    #39844954
Bora2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Докгде Table3.Locate('rezid',Table1.FieldByName('Projid').AsInteger,[])?

Нужно осуществлять проверку по двум условиям?
Проверки по Table2.Locate('Isid',Table1.FieldByName('Projid').AsInteger,[]) не достаточно?
Доккак приложение должно угадать, какую запись нужно редактировать?
Вопрос хороший. По условию Table3.Locate('rezid',Table1.FieldByName('Projid').AsInteger,[]) ?
Докна первой итерации ты прекрасно отредактировал запись
теперь тебе надо перейти к следующей записи с такой же 'rezid' (их должно быть еще 18)
но ты не сможешь, потому что эту часть кода (for..to..do) нужно завернуть в цикл
Вот этот момент самый главный. Вот так?
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Table3.First;
      while (not Table3.EOF) and(Table3.FieldByName('Rezid').Value=Table1.FieldByName('Projid').Value)  do
    begin
   for i:=0 to m  do
       begin
    Table3.Edit;
  Table3.FieldByName('Alfa1').AsString:=floattostr(C1_[0,i]);
  Table3.FieldByName('Alfa2').AsString:=floattostr(C2_[1,i]);
  Table3.FieldByName('Alfa3').AsString:=floattostr(C3_[2,i]);
  Table3.FieldByName('Alfa4').AsString:=floattostr(C4_[3,i]);
  Table3.FieldByName('Alfa5').AsString:=floattostr(C5_[4,i]);
  Table3.FieldByName('Alfa6').AsString:=floattostr(C6_[5,i]);
  Table3.Next;
  Table3.Post;
 end;
  end;
...
Рейтинг: 0 / 0
Условие на редактирование записей
    #39844967
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bora2015Вот так?
почти :) Вот это
Код: pascal
1.
2.
  Table3.Next;
  Table3.Post;

поменяй местами

И остался еще один вопрос: почему у тебя
Код: pascal
1.
2.
  Table3.FieldByName('Alfa1').AsString:=floattostr(C1_[0,i]);
  Table3.FieldByName('Alfa2').AsString:=floattostr(C2_[1,i]);


?

Это ведь разные имена массивов...
...
Рейтинг: 0 / 0
Условие на редактирование записей
    #39845001
Bora2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ДокИ остался еще один вопрос: почему у тебя
Код: pascal
1.
2.
  Table3.FieldByName('Alfa1').AsString:=floattostr(C1_[0,i]);
  Table3.FieldByName('Alfa2').AsString:=floattostr(C2_[1,i]);


?

Это ведь разные имена массивов...

Разные. У меня 19 выходных переменных по 6 элементов в каждом.
Вот и получается, что вставляется в 6 полей по 19 записей сразу.
...
Рейтинг: 0 / 0
Условие на редактирование записей
    #39845013
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bora2015Вот и получается
Не получается... У кого-то с логикой проблемы. Но я спорить не буду (оставлю додумывать тебе), ибо мне неизвестны детали. На этом все.
...
Рейтинг: 0 / 0
Условие на редактирование записей
    #39845036
Bora2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ДокBora2015Вот и получается
Не получается... У кого-то с логикой проблемы. Но я спорить не буду (оставлю додумывать тебе), ибо мне неизвестны детали. На этом все.
А что не так?

Док
Если хочешь добавлять записи пачками по 19 за раз, то таки да, тебе нужен двумерный массив [6,19]
var
i: integer;
CurrDateTime: TDateTime;
MyIntArr: array [0..5, 0..18] of Integer;
begin

if Tbl_Source.Locate('FK_MAIN', Tbl_Main.FieldByName('ID').Value,[]) then
for i:= 0 to 18 do
begin
CurrDateTime:= Now;//текущий момент
Tbl_Result.Append;//добавляем
Tbl_Result.FieldByName('FK_SOURCE').Value:= Tbl_Source.FieldByName('ID').Value;//ссылка на родителя
Tbl_Result.FieldByName('FK_SOURCE').Value:= CurrDateTime;

//будем считать, что массив заполнен и готов к употреблению
Tbl_Result.FieldByName('FLD_RESULT_0').Value:= MyIntArr[0,i];
Tbl_Result.FieldByName('FLD_RESULT_1').Value:= MyIntArr[1,i];
Tbl_Result.FieldByName('FLD_RESULT_2').Value:= MyIntArr[2,i];
Tbl_Result.FieldByName('FLD_RESULT_3').Value:= MyIntArr[3,i];
Tbl_Result.FieldByName('FLD_RESULT_4').Value:= MyIntArr[4,i];
Tbl_Result.FieldByName('FLD_RESULT_5').Value:= MyIntArr[5,i];
Tbl_Result.Post;//сохраняем
end;
end;
...
Рейтинг: 0 / 0
Условие на редактирование записей
    #39845061
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bora2015А что не так?
у тебя получается 6 двумерных массивов, в каждом из которых 19 х 6 элементов. А теперь посмотри на мой код и свой, и "найди 10 отличий" :)
...
Рейтинг: 0 / 0
23 сообщений из 48, страница 2 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Условие на редактирование записей
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]