76

(3 replies, posted in General)

I suggested selecting a date in only one form - the calendar form. And in other forms, select the link to the entry with the desired date. But something tells me that the problem is in the accuracy of the formulation of the requirements for the program. It would be easier to answer this question if you presented your project so that it would be clear what forms you are talking about.

77

(5 replies, posted in General)

Negrita wrote:

Hi Jean

Ok thanks for you feedback, and as you said it´s a shame.
I know that the last version is 6.5 , so where i can get te 6.6 ?

Thanks for your help

DC

The unofficial beta version of the My Visual Database database designer is 6.61 beta.
https://k245.ru/en/mvdb-en/last-beta-2.html

78

(2 replies, posted in General)

procedure Form1_Button1_OnClick (Sender: TObject; var Cancel: boolean);
begin
    Form1.TableGrid1.dbItemId := -1;
end;

79

(8 replies, posted in Russian)

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

80

(3 replies, posted in General)

Create a "Calendar" table that will store dates. And the remaining tables in which dates are needed must be connected to the “Calendar” table - refer to it. This relationship works better than subsequently filtering by date in each table.

netros wrote:

Хотя сейчас начал понимать идею к245, но боюсь не сработает.
Даже задумался, не сделать ли всё на Acsess`e.

Страх порой лишает радости победы. Прислать свой проект или поверите на слово, что всё работает как надо?

Поддерживаю sparrow, без max() будет быстрее работать:

select *
from z
left join x on  x.id = (select x2.id from x as x2 where x2.id_z = z.id order by 1 desc limit 1 )
left join y on  y.id = (select y2.id from y as y2 where y2.id_z = z.id order by 1 desc limit 1 )

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

netros wrote:

Спасибо,  sparrow, тут есть над чем подумать, проверю.

Для К245 - к сожалению таблицы X и Y находятся СПРАВА, поэтому LEFT JOIN не проходит.

У таблицы Z слева ещё есть справочники, просто я не стал  усложнять вопрос :-)

Обожаю теоретиков - у них такие красивые, большие глаза, когда смотрят на результат практиков:

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

levrussia174 wrote:

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


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

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


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


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

идея такая:

select *
from z
left join x on  x.id = (select max(x2.id) from x as x2 where x2.id_z = z.id )
left join y on  y.id = (select max(y2.id) from y as y2 where y2.id_z = z.id )

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

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

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

Godless wrote:
k245 wrote:
Godless wrote:

А, т.е. нужно скрипт прописывать? Только в визуальном, это не сделать ни как?

да, нужно smile

Эх... грустно , досадно sad  Спасибо
А не подскажете как ? Единственный косяк, который осталось "подтереть"

Раз у вас проблема с отчетом, то в кнопке, которая его вызывает, добавьте обработчик onClick, в котором выполните описанное выше действие.

Godless wrote:

А, т.е. нужно скрипт прописывать? Только в визуальном, это не сделать ни как?

да, нужно smile

89

(1 replies, posted in Russian)

Лучше разделить логику (данные) и отображение. Отдельно хранить массив с кубиками, которые упали в стакан, и фигуру, которая опускается в стакан. А таблицу использовать для отображения совмещения стакана и падающей фигуры.

http://myvisualdatabase.com/help_ru/scr … egrid.html
https://myvisualdatabase.com/forum/misc.php?action=pun_attachment&item=10121&download=0

Вы не путайте "выделение выбранной записи" и "выбранная запись". При переносе фокуса на другой элемент интерфейса выделение выбранной записи в таблице можно отключить, но выбранная запись останется прежней. Чтобы у таблицы сбросить выбранную запись, присвойте значение -1 свойству dbItemID. Но я не вижу тут прямой связи с FastReport. Или это ваша условность в программном коде?

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;

93

(10 replies, posted in General)

The script should run after the editing form opens.

procedure frmAddPayee_OnShow (Sender: TObject; Action: string);
var
  IDStreet : integer;
  IDRegion : integer;
begin
  if Action = 'ShowForm' then
  begin
    if (SearchPayments.TableGrid1.SelectedRow>=0) then
    begin
      IDStreet := SQLExecute('SELECT PayeeRegister.id_Street FROM PayeeRegister WHERE id='+ IntToStr(SearchPayments.TableGrid1.dbItemID) );
      IDRegion := SQLExecute('SELECT Street.id_Region FROM Street WHERE id='+ IntToStr(IDStreet) );
      frmAddPayee.ComboBox2.dbitemid := IDRegion;
      frmAddPayee.ComboBox2.DoOnChange;
      frmAddPayee.ComboBox1.dbitemid := IDStreet;

      frmAddPayee.Edit1.Text := SQLExecute('SELECT "'+ frmAddPayee.Edit1.dbField +'" FROM PayeeRegister WHERE id='+ IntToStr(SearchPayments.TableGrid1.dbItemID) );
      frmAddPayee.Edit2.Text := SQLExecute('SELECT "'+ frmAddPayee.Edit2.dbField +'" FROM PayeeRegister WHERE id='+ IntToStr(SearchPayments.TableGrid1.dbItemID) );
    end;
  end;
end;

94

(10 replies, posted in General)

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

95

(10 replies, posted in General)

project

96

(10 replies, posted in General)

MVDB does not work well if the nesting depth when setting up a table exceeds 2. In your case, it is enough to replace the nested table with a calculated field smile


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

97

(10 replies, posted in General)

You can add a calculated field and use it in a dropdown list.

98

(1 replies, posted in General)

If the namespace (tables, forms, procedures) in two projects does not overlap, then you can combine them by simple merging. In theory. But in practice, difficulties may arise if the code contains direct access to system objects of the main form (components related to reports, authorization, etc.). And most likely the problems will be due to the same name of the forms (especially the main form).

sidhillsaid wrote:
k245 wrote:

Таймер создайте, в обработчике таймера читайте данные из порта и записывайте в БД.
Или вам нужна готовая программа?

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

Пишите, договоримся ))

Таймер создайте, в обработчике таймера читайте данные из порта и записывайте в БД.
Или вам нужна готовая программа?