Topic: [Скрипт] Сделать дубликат записи

Проект с примером, как сделать дубликат записи, выделив необходимую запись в TableGrid, и как сделать дубликат на форме редактирования записи
http://myvisualdatabase.com/forum/misc. … download=1

Dmitry.

Re: [Скрипт] Сделать дубликат записи

А можно ли сделать так чтобы данный скрипт копировал значения из одного поля в несколько других?

Re: [Скрипт] Сделать дубликат записи

Пожалуйста, опишите вопрос более подробно на данном примере, постараюсь помочь.

Dmitry.

4 (edited by ivan.kulikov95 2015-06-15 07:55:45)

Re: [Скрипт] Сделать дубликат записи

Вообщем я бы хотел создать поле для ввода текста text box для того, чтобы заполнить одно поле из таблицы приказы. В таблице "Приказы" содержатся семь полей для более удобной вставки их в отчёт. И для того чтобы стандартный набор приказов не вводить в семь полей таблиц, я подумал, может быть можно сделать так чтобы значение одного поля копировались в остальные шесть.

Re: [Скрипт] Сделать дубликат записи

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

Dmitry.

6 (edited by jenek 2015-07-03 14:02:53)

Re: [Скрипт] Сделать дубликат записи

здравствуйте.
В версии 1_46 нет возможности сделать дубликат записи? выдает такую ошибку...

Post's attachments

Attachment icon 1.JPG 26.29 kb, 406 downloads since 2015-07-03 

Re: [Скрипт] Сделать дубликат записи

попробуйте заменить данный участок кода на следующий:

id =''' + IntToStr(Form1.TableGrid1.dbItemID) + '''' )
Dmitry.

Re: [Скрипт] Сделать дубликат записи

может я что-то не там меняю? при запуске такая ошибка (скрин), при нажатии на кнопку дубликат - Access violationat address 0087E3B1 in module "Employees.exe"/ Write of address 00000014

Post's attachments

Attachment icon 1.JPG 35.65 kb, 356 downloads since 2015-07-05 

Re: [Скрипт] Сделать дубликат записи

jenek wrote:

может я что-то не там меняю? при запуске такая ошибка (скрин), при нажатии на кнопку дубликат - Access violationat address 0087E3B1 in module "Employees.exe"/ Write of address 00000014

замените TableGrid1 на GridEmployees в коде.

Dmitry.

10 (edited by jenek 2015-07-05 13:57:19)

Re: [Скрипт] Сделать дубликат записи

отлично ))) все работает! респект!

сорри. работает на примере просто великолепно...
очень просить не охота. но, похоже, без вашей помощи - никак.
перенес скрипт в свою базу и вылезла ошибка. на кнопку не реагирует. не поправите?
заранее спасибо.
MVD версия 1_46

Post's attachments

Attachment icon Eridan_Med.rar 310.97 kb, 1011 downloads since 2015-07-05 

Re: [Скрипт] Сделать дубликат записи

jenek wrote:

отлично ))) все работает! респект!

сорри. работает на примере просто великолепно...
очень просить не охота. но, похоже, без вашей помощи - никак.
перенес скрипт в свою базу и вылезла ошибка. на кнопку не реагирует. не поправите?
заранее спасибо.
MVD версия 1_46

Исправил.

Post's attachments

Attachment icon Eridan_Med_fixed.zip 25.26 kb, 911 downloads since 2015-07-06 

Dmitry.

Re: [Скрипт] Сделать дубликат записи

спасибо. я должник ))

13 (edited by levrussia174 2023-11-24 13:46:22)

Re: [Скрипт] Сделать дубликат записи

Здравствуйте.
Можно ли как через SQL или другим способом создать дубликат записи из выбранной записи? в выбаррной записи  находятся  индивидуальные таблицы со значениями в строковой структуре и вот,  взять все данные из индивидуальной таблицы и продублировать в созданный дубликат записи?

Re: [Скрипт] Сделать дубликат записи

levrussia174 wrote:

Здравствуйте.
Можно ли как через SQL или другим способом создать дубликат записи из выбранной записи? в выбаррной записи  находятся  индивидуальные таблицы со значениями в строковой структуре и вот,  взять все данные из индивидуальной таблицы и продублировать в созданный дубликат записи?

function DB_CopyRecord( ATableName: string; AID: integer ):integer;
// универсальная функция копирования записи
begin
  // создаем временную таблицу со структурой, идентичной копируемой записи
  SQLExecute('CREATE TEMPORARY TABLE tmp AS SELECT * FROM ['+ATableName+'] WHERE id = '+IntToStr(AID));
  // сбрасываем значение поля ID
  SQLExecute('UPDATE tmp SET id = NULL');
  // вставляем запись обратно
  SQLExecute('INSERT INTO ['+ATableName+'] SELECT * FROM tmp');
  // получаем ID новой записи
  Result := Last_Insert_ID();
  // удаляем временную таблицу
  SQLExecute('DROP TABLE tmp');
end;
Визуальное программирование: блог и телеграм-канал.

Re: [Скрипт] Сделать дубликат записи

Константин, хорошее решение.


Можно предложить еще такой вариант

function DB_CopyRec( ATableName: string; AID: integer ):integer;
var
  Results: TDataSet;
  i, fc: byte;
  tmpQ: string = '';
begin
  SQLQuery('SELECT * FROM "'+ATableName+'" WHERE id=0',Results);   // get columns name
  fc := Results.FieldCount - 1;
  for i := 0 to fc do                                              // building request fields
  begin
    if Results.Fields[i].FieldName = 'id' then continue
    else begin
      tmpQ := tmpQ + '"'+Results.Fields[i].FieldName+'"' + ',';
    end;
  end;
  Results.free;
  Delete(tmpQ, length(tmpQ),1);
                                                                  // Execute INSERT
  SQLExecute('INSERT INTO "'+ATableName+'" ('+tmpQ+') SELECT '+ tmpQ +' FROM "'+ATableName+'" WHERE id='+IntToStr(AID));
  Result := Last_Insert_ID();
end;

16 (edited by levrussia174 2023-11-29 17:11:12)

Re: [Скрипт] Сделать дубликат записи

k245 wrote:
levrussia174 wrote:

Здравствуйте.
Можно ли как через SQL или другим способом создать дубликат записи из выбранной записи? в выбаррной записи  находятся  индивидуальные таблицы со значениями в строковой структуре и вот,  взять все данные из индивидуальной таблицы и продублировать в созданный дубликат записи?

function DB_CopyRecord( ATableName: string; AID: integer ):integer;
// универсальная функция копирования записи
begin
  // создаем временную таблицу со структурой, идентичной копируемой записи
  SQLExecute('CREATE TEMPORARY TABLE tmp AS SELECT * FROM ['+ATableName+'] WHERE id = '+IntToStr(AID));
  // сбрасываем значение поля ID
  SQLExecute('UPDATE tmp SET id = NULL');
  // вставляем запись обратно
  SQLExecute('INSERT INTO ['+ATableName+'] SELECT * FROM tmp');
  // получаем ID новой записи
  Result := Last_Insert_ID();
  // удаляем временную таблицу
  SQLExecute('DROP TABLE tmp');
end;

Похоже я тупой... ;( можно пожалуйста показать на моем проекте ? Внутри архива есть картинка с пояснением

Post's attachments

Attachment icon База ЭВМ.rar 1 mb, 64 downloads since 2023-11-29 

17 (edited by k245 2023-11-30 06:19:20)

Re: [Скрипт] Сделать дубликат записи

Точность вопроса влияет на точность ответа.

https://myvisualdatabase.com/forum/misc.php?action=pun_attachment&item=10127&download=0

В вашем случае вопрос стоит шире: как скопировать связанные данные?
Универсального решения для этого нет. Для этого понадобятся несколько SQL-запросов, которые должны учитывать структуру конкретной БД. Написание таких запросов - это и есть РАБОТА программиста.

Post's attachments

Attachment icon Как добраться до записи.png 111.89 kb, 103 downloads since 2023-11-30 

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

18 (edited by levrussia174 2023-11-30 14:34:56)

Re: [Скрипт] Сделать дубликат записи

k245 wrote:

Точность вопроса влияет на точность ответа.

https://myvisualdatabase.com/forum/misc.php?action=pun_attachment&item=10127&download=0

В вашем случае вопрос стоит шире: как скопировать связанные данные?
Универсального решения для этого нет. Для этого понадобятся несколько SQL-запросов, которые должны учитывать структуру конкретной БД. Написание таких запросов - это и есть РАБОТА программиста.

Понял.
Ладно сейчас распишу, данная структура групп работает на ссылочном варианте, основная база данных это "bd_devace".
Всё остальное работает на системы "Поиска" тип фильтр данных для отображения.


На данный момент я столкнулся с проблемой "создание индивидуального дубликата" ,именно основных данных, а это таблица "bd_devace", которая имеет связь  с таблицей "specifications" (но "bd_devace" является родительской таблицей и записи в ней для таблицы "specifications") и вот как продублировать данные для edit я знаю (хотя может не до конца), но я не знаю, как продублировать из таблицы "specifications" она же "Характеристика" одной родительской записи из таблицы "bd_devace" в другую родительскую запись с такими же данными как у предыдущей  родительской  записи из таблицы "bd_devace".


А все эти переходы из групп в группы это нет так важно, важно только именно "bd_devace"

Вот в чём вопрос smile

Re: [Скрипт] Сделать дубликат записи

ни чего не понял, Вы хотите продублировать таблицу или просто запись?

Re: [Скрипт] Сделать дубликат записи

pavlenko.vladimir.v wrote:

ни чего не понял, Вы хотите продублировать таблицу или просто запись?

Запись и таблицу в ней

Re: [Скрипт] Сделать дубликат записи

Если делать по уму:
для таких случаев таблица Характеристика , как справочник, делается универсальной.
цвет черный
цвет желтый
вес 1-3 кг
вес 20-30 кг
ножки кривые
винтики золотые
корпус чугунный


Затем делается связь между таблицами многие ко многим.
Это позволяет многим записям из одной таблицы соответствовать многим записям в другой.


Какието уникальные вещи можно записать в примечания.
пахнет духами
потеки на корпусе


тут можно увидеть пример многие ко многим на примере книг и авторов.
https://myvisualdatabase.com/forum/view … hp?id=1086

22 (edited by levrussia174 2023-11-30 18:08:01)

Re: [Скрипт] Сделать дубликат записи

sparrow wrote:

Если делать по уму:
для таких случаев таблица Характеристика , как справочник, делается универсальной.
цвет черный
цвет желтый
вес 1-3 кг
вес 20-30 кг
ножки кривые
винтики золотые
корпус чугунный


Затем делается связь между таблицами многие ко многим.
Это позволяет многим записям из одной таблицы соответствовать многим записям в другой.


Какието уникальные вещи можно записать в примечания.
пахнет духами
потеки на корпусе


тут можно увидеть пример многие ко многим на примере книг и авторов.
https://myvisualdatabase.com/forum/view … hp?id=1086


Дело в том, что у моей организации очень тонкие условия, допустим если "Системный блок" изменил цвет, то человек должен удалить старый цвет и записать новый, но при этом в истории должно сохраниться изменения данных о цвете, но историю я сделаю, у меня в этом только проблема стоит в дубликате таблиц и всё.


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

Re: [Скрипт] Сделать дубликат записи

levrussia174 wrote:

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

Вам не нужно копировать таблицу, Вы вообще представляете сколько у Вас в итоге будет таблиц???
Просто при поступлении товара нужно указать его характеристики, что и будет различать товары.
Вы же понимаете, что телевизор черного цвета не может стать красным - он либо есть, либо нет

Re: [Скрипт] Сделать дубликат записи

levrussia174 wrote:

Дело в том, что у моей организации очень тонкие условия, допустим если "Системный блок" изменил цвет, то человек должен удалить старый цвет и записать новый, но при этом в истории должно сохраниться изменения данных о цвете, но историю я сделаю, у меня в этом только проблема стоит в дубликате таблиц и всё.


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

Вы всё в кучу свалили...
1. История изменения характеристики (параметра) товара в справочнике товаров
2. Хранение актуальных на момент сделки характеристик товара в документах.


Эти процессы могут быть связанными, а могут быть сами по себе. Всё зависит от требований бизнеса.
Если вам нужна полноценная история, то вам нужно реализовывать партионный учёт, при котором есть одна запись в таблице номенклатуры и несколько записей в таблице партий. В номенклатуре - только название и артикул, а характеристики - в партиях. Тогда при списании товара происходит указание на партию, с её характеристиками (цветом, весом и т.д.). Вплоть до того, что у разных партий может быть разный набор характеристик (параметров).  Чтобы человек, составляющие аналитические отчеты, двинулся кукушкой ))))


Какие требования у бизнеса? Учёт цвета ржавчины гвоздей на каждой партии товара или анализ продаж товаров по определенным критериям? Подумайте об этом, прежде чем вносить правки в структуру данных...

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