Topic: Редактирование данных из грида не в гриде

Hi all!

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

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

Re: Редактирование данных из грида не в гриде

Hello Oanion0

Do you mean something like this ? (See this attachment)

JB

Post's attachments

Attachment icon Example.jpg 322.76 kb, 66 downloads since 2022-05-24 

Re: Редактирование данных из грида не в гриде

jean.brezhonek wrote:

Hello Oanion0

Do you mean something like this ? (See this attachment)

JB

Yes.

Re: Редактирование данных из грида не в гриде

Hello 0anion0

Here is the code I use to display the different data on the right side of the screen.
If you have different tables but in relation to each other (relationship), you will have to use the Left Outer Join (SQL) statement to retrieve the different elements.
This is the best solution: create independent tables that have become relational.
By clicking on a cell of the grid, all the elements concerning a flower (this is my case in this example) will be brought together to form the right panel.
Similarly, if you use the arrows to navigate the grid, add this same code behind the OnKeyUp and OnKeyDown statements.

See in attachement, my code.
Hope this can help you.

JB

Post's attachments

Attachment icon Code.txt 5.62 kb, 140 downloads since 2022-05-25 

Re: Редактирование данных из грида не в гриде

jean.brezhonek wrote:

Hello 0anion0

Here is the code I use to display the different data on the right side of the screen.
If you have different tables but in relation to each other (relationship), you will have to use the Left Outer Join (SQL) statement to retrieve the different elements.
This is the best solution: create independent tables that have become relational.
By clicking on a cell of the grid, all the elements concerning a flower (this is my case in this example) will be brought together to form the right panel.
Similarly, if you use the arrows to navigate the grid, add this same code behind the OnKeyUp and OnKeyDown statements.

See in attachement, my code.
Hope this can help you.

JB

I figured it out a little myself, but thanks for the example, it came in handy for me

Re: Редактирование данных из грида не в гриде

Привет jean.brezhonek, 0anion0 !

Решение рабочее, но я рекомендую получать данные одним запросом

var
  tmpDataSet: TDataSet;
  tmpSQL: string;
...
  // один запрос, к той же таблице, что отображается в табличном представлении на форме
  tmpSQL :=  'SELECT table1.Field1  data1, table1.Field2 data2, table2.Field1 data3 ... '+ // нужные данные с алиасами для полей
    ' FROM table 1 LEFT JOIN table2 .... '+ // главная таблица и остальные по зависимостям (если есть)
    ' WHERE table1.id = '+IIntToStr(Form1.TableGrid1.dbItemID); // фильтр по главной таблице
  SQLQuery(tmpSQL,tmpDataSet);
  // нужные данные в датасете, вытаскиваем по алиасам
  Form1.Label1.Caption := tmpDataSet.FieldByName('data1').asString;
  Form1.Label2.Caption := tmpDataSet.FieldByName('data2').asString;
  ...
  // TODO: эту часть можно сделать циклом, если использовать соглашение по наименованию компонентов отображения и алиасов
  Form1.LabelN.Caption := tmpDataSet.FieldByName('dataN').asString;
  // обязательно освобождаем ресурсы
  tmpDataSet.Free;
Визуальное программирование: блог и телеграм-канал.

7 (edited by 0anion0 2022-05-25 08:02:55)

Re: Редактирование данных из грида не в гриде

k245 wrote:

Привет jean.brezhonek, 0anion0 !

Решение рабочее, но я рекомендую получать данные одним запросом

var
  tmpDataSet: TDataSet;
  tmpSQL: string;
...
  // один запрос, к той же таблице, что отображается в табличном представлении на форме
  tmpSQL :=  'SELECT table1.Field1  data1, table1.Field2 data2, table2.Field1 data3 ... '+ // нужные данные с алиасами для полей
    ' FROM table 1 LEFT JOIN table2 .... '+ // главная таблица и остальные по зависимостям (если есть)
    ' WHERE table1.id = '+IIntToStr(Form1.TableGrid1.dbItemID); // фильтр по главной таблице
  SQLQuery(tmpSQL,tmpDataSet);
  // нужные данные в датасете, вытаскиваем по алиасам
  Form1.Label1.Caption := tmpDataSet.FieldByName('data1').asString;
  Form1.Label2.Caption := tmpDataSet.FieldByName('data2').asString;
  ...
  // TODO: эту часть можно сделать циклом, если использовать соглашение по наименованию компонентов отображения и алиасов
  Form1.LabelN.Caption := tmpDataSet.FieldByName('dataN').asString;
  // обязательно освобождаем ресурсы
  tmpDataSet.Free;

Кстати да, одним запросом будет лучше. Благодарю.
но у меня в там есть Null, мне кажется это помешает.

Re: Редактирование данных из грида не в гриде

0anion0 wrote:

Кстати да, одним запросом будет лучше. Благодарю.
но у меня в там есть Null, мне кажется это помешает.

Если кажется, то попробуйте - практика укрепит вашу веру в силу SQL smile  Если не получится, покажите ваш запрос

Визуальное программирование: блог и телеграм-канал.