Topic: [Скрипт] Сделать дубликат записи
Проект с примером, как сделать дубликат записи, выделив необходимую запись в TableGrid, и как сделать дубликат на форме редактирования записи
http://myvisualdatabase.com/forum/misc. … download=1
My Visual Database → FAQ → [Скрипт] Сделать дубликат записи
Проект с примером, как сделать дубликат записи, выделив необходимую запись в TableGrid, и как сделать дубликат на форме редактирования записи
http://myvisualdatabase.com/forum/misc. … download=1
А можно ли сделать так чтобы данный скрипт копировал значения из одного поля в несколько других?
Пожалуйста, опишите вопрос более подробно на данном примере, постараюсь помочь.
Вообщем я бы хотел создать поле для ввода текста text box для того, чтобы заполнить одно поле из таблицы приказы. В таблице "Приказы" содержатся семь полей для более удобной вставки их в отчёт. И для того чтобы стандартный набор приказов не вводить в семь полей таблиц, я подумал, может быть можно сделать так чтобы значение одного поля копировались в остальные шесть.
К сожалению не могу дать точный пример, как это реализовать, необходимо видеть ваш проект, и описание, откуда и куда необходимо заполнить поля.
здравствуйте.
В версии 1_46 нет возможности сделать дубликат записи? выдает такую ошибку...
попробуйте заменить данный участок кода на следующий:
id =''' + IntToStr(Form1.TableGrid1.dbItemID) + '''' )
может я что-то не там меняю? при запуске такая ошибка (скрин), при нажатии на кнопку дубликат - Access violationat address 0087E3B1 in module "Employees.exe"/ Write of address 00000014
может я что-то не там меняю? при запуске такая ошибка (скрин), при нажатии на кнопку дубликат - Access violationat address 0087E3B1 in module "Employees.exe"/ Write of address 00000014
замените TableGrid1 на GridEmployees в коде.
отлично ))) все работает! респект!
сорри. работает на примере просто великолепно...
очень просить не охота. но, похоже, без вашей помощи - никак.
перенес скрипт в свою базу и вылезла ошибка. на кнопку не реагирует. не поправите?
заранее спасибо.
MVD версия 1_46
отлично ))) все работает! респект!
сорри. работает на примере просто великолепно...
очень просить не охота. но, похоже, без вашей помощи - никак.
перенес скрипт в свою базу и вылезла ошибка. на кнопку не реагирует. не поправите?
заранее спасибо.
MVD версия 1_46
Исправил.
спасибо. я должник ))
Здравствуйте.
Можно ли как через SQL или другим способом создать дубликат записи из выбранной записи? в выбаррной записи находятся индивидуальные таблицы со значениями в строковой структуре и вот, взять все данные из индивидуальной таблицы и продублировать в созданный дубликат записи?
Здравствуйте.
Можно ли как через 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;
Константин, хорошее решение.
Можно предложить еще такой вариант
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;
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;
Похоже я тупой... ;( можно пожалуйста показать на моем проекте ? Внутри архива есть картинка с пояснением
Точность вопроса влияет на точность ответа.
В вашем случае вопрос стоит шире: как скопировать связанные данные?
Универсального решения для этого нет. Для этого понадобятся несколько SQL-запросов, которые должны учитывать структуру конкретной БД. Написание таких запросов - это и есть РАБОТА программиста.
Точность вопроса влияет на точность ответа.
В вашем случае вопрос стоит шире: как скопировать связанные данные?
Универсального решения для этого нет. Для этого понадобятся несколько SQL-запросов, которые должны учитывать структуру конкретной БД. Написание таких запросов - это и есть РАБОТА программиста.
Понял.
Ладно сейчас распишу, данная структура групп работает на ссылочном варианте, основная база данных это "bd_devace".
Всё остальное работает на системы "Поиска" тип фильтр данных для отображения.
На данный момент я столкнулся с проблемой "создание индивидуального дубликата" ,именно основных данных, а это таблица "bd_devace", которая имеет связь с таблицей "specifications" (но "bd_devace" является родительской таблицей и записи в ней для таблицы "specifications") и вот как продублировать данные для edit я знаю (хотя может не до конца), но я не знаю, как продублировать из таблицы "specifications" она же "Характеристика" одной родительской записи из таблицы "bd_devace" в другую родительскую запись с такими же данными как у предыдущей родительской записи из таблицы "bd_devace".
А все эти переходы из групп в группы это нет так важно, важно только именно "bd_devace"
Вот в чём вопрос
ни чего не понял, Вы хотите продублировать таблицу или просто запись?
ни чего не понял, Вы хотите продублировать таблицу или просто запись?
Запись и таблицу в ней
Если делать по уму:
для таких случаев таблица Характеристика , как справочник, делается универсальной.
цвет черный
цвет желтый
вес 1-3 кг
вес 20-30 кг
ножки кривые
винтики золотые
корпус чугунный
Затем делается связь между таблицами многие ко многим.
Это позволяет многим записям из одной таблицы соответствовать многим записям в другой.
Какието уникальные вещи можно записать в примечания.
пахнет духами
потеки на корпусе
тут можно увидеть пример многие ко многим на примере книг и авторов.
https://myvisualdatabase.com/forum/view … hp?id=1086
Если делать по уму:
для таких случаев таблица Характеристика , как справочник, делается универсальной.
цвет черный
цвет желтый
вес 1-3 кг
вес 20-30 кг
ножки кривые
винтики золотые
корпус чугунныйЗатем делается связь между таблицами многие ко многим.
Это позволяет многим записям из одной таблицы соответствовать многим записям в другой.Какието уникальные вещи можно записать в примечания.
пахнет духами
потеки на корпусетут можно увидеть пример многие ко многим на примере книг и авторов.
https://myvisualdatabase.com/forum/view … hp?id=1086
Дело в том, что у моей организации очень тонкие условия, допустим если "Системный блок" изменил цвет, то человек должен удалить старый цвет и записать новый, но при этом в истории должно сохраниться изменения данных о цвете, но историю я сделаю, у меня в этом только проблема стоит в дубликате таблиц и всё.
Так как бывают поставки одной и той же техники, какое то время у них одинаковые характеристики, но потом начинает меняться и это должно отобразиться в таблице. Но я почитаю данную статью, спасибо
Так как бывают поставки одной и той же техники, какое то время у них одинаковые характеристики, но потом начинает меняться и это должно отобразиться в таблице. Но я почитаю данную статью, спасибо
Вам не нужно копировать таблицу, Вы вообще представляете сколько у Вас в итоге будет таблиц???
Просто при поступлении товара нужно указать его характеристики, что и будет различать товары.
Вы же понимаете, что телевизор черного цвета не может стать красным - он либо есть, либо нет
Дело в том, что у моей организации очень тонкие условия, допустим если "Системный блок" изменил цвет, то человек должен удалить старый цвет и записать новый, но при этом в истории должно сохраниться изменения данных о цвете, но историю я сделаю, у меня в этом только проблема стоит в дубликате таблиц и всё.
Так как бывают поставки одной и той же техники, какое то время у них одинаковые характеристики, но потом начинает меняться и это должно отобразиться в таблице. Но я почитаю данную статью, спасибо
Вы всё в кучу свалили...
1. История изменения характеристики (параметра) товара в справочнике товаров
2. Хранение актуальных на момент сделки характеристик товара в документах.
Эти процессы могут быть связанными, а могут быть сами по себе. Всё зависит от требований бизнеса.
Если вам нужна полноценная история, то вам нужно реализовывать партионный учёт, при котором есть одна запись в таблице номенклатуры и несколько записей в таблице партий. В номенклатуре - только название и артикул, а характеристики - в партиях. Тогда при списании товара происходит указание на партию, с её характеристиками (цветом, весом и т.д.). Вплоть до того, что у разных партий может быть разный набор характеристик (параметров). Чтобы человек, составляющие аналитические отчеты, двинулся кукушкой ))))
Какие требования у бизнеса? Учёт цвета ржавчины гвоздей на каждой партии товара или анализ продаж товаров по определенным критериям? Подумайте об этом, прежде чем вносить правки в структуру данных...
My Visual Database → FAQ → [Скрипт] Сделать дубликат записи
Powered by PunBB, supported by Informer Technologies, Inc.
Theme Hydrogen by Kushi