Интересно, что при этом добавляются и формы первой (Мастер) БД.

Derek!
Это очень интересный вариант. Спасибо, что уделили время и обратили внимание на тему. Буду пробовать.

Но работа со второй базой будет вручную через скрипт.

Спасибо огромное!

Героям Слава!

Ваша база была создана в MVD ?

Да!
Создал програмку в MVD. Позднее появилась необходимость еще одной програмки (тоже в MVD) с другим целевым назначением. Но в ней используются такие же справочные данные как и в первой (город, улицы, имена сотрудников). Вот и появился вопрос, как получить часть данных из первой програмы для обезпечения работы второй.

Базы SQLite (встроеные в MVD).
Делал подобное с Аксесом (используя его как СУБД, а в качестве визуализации проекта использовал VBA excel). Создавал несколько БД и подключался к ним из разных приложений выхватывая нужное для себя.
Что то подобное хотел бы попробовать с MVD. Без использования MySQL (он немного связывает руки).
Может есть способ с помощью запроса указать БД SQLite из которой необходимо взять данные?

Доброго времени суток!
Возможно ли реализовать связь между двумя проектами:
Есть проект выполняющий функцию справочника (города, улицы, имена и т.п.).  Хотелось бы создать проект или несколько проектов более целевого назначения, но при этом имеющих возможность использования данных из дазы справочника.
Есть ли какая то возможность такой реализации штатными средствами?

Заранее спасибо!

7

(3 replies, posted in General)

Для себя нашел вариант решения задачи:
Поскольку свойтво Node.Data устанавливается только для определенных позицый, добавил к ниму еще и Node.StateIndex . И по нему отбираю нужное мне значения из нужных таблиц.

procedure TreeViewOnDoubleClick(Sender: TObject);
begin

     if TreeView.Selected.Data=0 then begin
         exit;
     end else
     begin

         IF TreeView.Selected.StateIndex=1 Then Begin
              //Some Code
         End Else
         Begin
              //Some Code
         End;

     end;
end;

procedure Form1_Button2_OnClick (Sender: TObject; var Cancel: boolean);
var
    treenode, treenode1, treenode2,treenode3 : TTreenode;
    sWorks : TDataSet;
    sHOUSE,sPOD,sST,sKV:String;
    sSQL:string;
begin
    Tree_Set;

    Treeview.Items.BeginUpdate;

    sSQL:='SELECT "дом."||HOUSE.dom||ifnull("-"||HOUSE.let,"")||ifnull(", корп."||HOUSE.korp,""), "под."||H_KV.pod, "ст."||H_KV.st, "кв."||H_KV.kv, HOUSE.segment, STREET.id, ';
    sSQL:=sSQL+'(HOUSE.id||STREET.street||ifnull("дом."||HOUSE.dom,"")||ifnull("под."||H_KV.pod,"")||ifnull("ст."||H_KV.st,"")||ifnull("кв."||H_KV.kv,"")) as full_dom, HOUSE.id, H_KV.id ';
    sSQL:=sSQL+'FROM STREET LEFT JOIN HOUSE ON HOUSE.id_STREET=STREET.id LEFT JOIN H_KV ON H_KV.id_HOUSE=HOUSE.id WHERE STREET.id="'+IntToStr(Form1.ComboBox1.dbItemID)+'" ';
    sSQL:=sSQL+'ORDER BY full_dom';

    sHOUSE:='';sPOD:='';sST:='';sKV:='';    

    SQLQuery(sSQL, sWorks);

    While not sWorks.EOF do Begin
            IF sWorks.Fields[4].AsString='Многоэтажный' Then Begin
                IF sHOUSE<>sWorks.Fields[0].AsString Then Begin
                    sHOUSE:=sWorks.Fields[0].AsString;
                    treenode := Treeview.Items.Add(nil,sWorks.Fields[0].AsString);
                end;
                IF sPOD<>sHOUSE+sWorks.Fields[1].AsString Then Begin
                    sPOD:=sHOUSE+sWorks.Fields[1].AsString;
                    treenode1 := Treeview.Items.AddChild(treenode,sWorks.fields[1].asstring);
                End;
                IF sST<> sHOUSE+sPOD+sWorks.Fields[2].AsString Then Begin
                    sST:=sHOUSE+sPOD+sWorks.Fields[2].AsString;
                    treenode2 := Treeview.Items.AddChild(treenode1,sWorks.Fields[2].AsString);
                End;
                IF sKV<>sHOUSE+sPOD+sST+sWorks.Fields[3].AsString Then Begin
                    sKV:=sHOUSE+sPOD+sST+sWorks.Fields[3].AsString;
                    treenode3 := Treeview.Items.AddChild(treenode2,sWorks.Fields[3].AsString);
                    treenode3.Data := sWorks.fields[8].AsInteger;
                    treenode3.StateIndex := 1;
                End;
            End else
            Begin
                IF sWorks.Fields[3].AsString>'' Then Begin
                    IF sHOUSE<>sWorks.Fields[6].AsString Then Begin
                        sHOUSE:=sWorks.Fields[6].AsString;
                        treenode := Treeview.Items.Add(nil,sWorks.Fields[0].AsString+', '+sWorks.Fields[3].AsString);
                        treenode.Data := sWorks.fields[8].AsInteger;
                        treenode.StateIndex := 1;
                    End;
                End else
                begin
                    IF sHOUSE<>sWorks.Fields[6].AsString Then Begin
                        sHOUSE:=sWorks.Fields[6].AsString;
                        treenode := Treeview.Items.Add(nil,sWorks.Fields[0].AsString);
                        treenode.Data := sWorks.fields[5].AsInteger;
                        treenode.StateIndex := 0;
                    End;
                end;
            end;
        sWorks.Next;
        End;
    sWorks.Free;
    Treeview.Items.EndUpdate;
end;

=====================================

For myself, I found a solution to the problem:
Since Node.Data is installed only for certain position, added to Node.StateIndex. And by him, select the values you need from the desired tables.

8

(3 replies, posted in General)

Sibprogsistem, спасибо Вам огромное за то, что обратили внимание на тему и уделили ей время!
Спасибо за Ваш совет, но к сожалению, dbForeignKey не подойдет, т.к. относится к TdbTreeView, а в данном случае используется TTreeView.

========================

Sibprogsistem, thank you so much for noting the attention on the topic and paid her time!
Thanks for your advice, but unfortunately, DBforeignKey will not suit, because Refers to TDBTreeView, and in this case the TTreeView is used.

Good day!
There is a form on which the TreeView is created and the data is cleaned. I can not get a value from the horse assembly.
Thank you in advance!

Translation from Google.

===========================

Доброго времени суток!
Есть форма на которой создается TreeView и отбражаются данные. Не могу получить значение из коневого узла.
Заранее всем спасибо!

Перевод с Гугл.

10

(2 replies, posted in General)

Derek, thank you for your help and for bringing this topic to our attention!  Your version greatly simplifies the task and gives you the opportunity to join the movement.  Thanks again!  Good luck!

==========================

Derek, спасибо Вам за помощь и за то, что обратили внимание на эту тему! Ваш вариант во многом упращает задачу и дает возможность к соедующему движению. Спасибо ещё раз! Успехов!

11

(2 replies, posted in General)

Good day!
There are three tables linked to each other. Everything works as it should. But for an ordinary user it is difficult to understand what and when to contribute. Is it possible to simplify data entry through one form?
Thank you all in advance!

Translated with google

=========================
Доброго времени суток!
Есть три таблицы связаные между собой. Все рабртает как нужно. Но для рядового пользователя тяжело понять, что и когда вносить. Можно ли упростить внесение данных через одну форму?
Заранее всем спасибо!
Переведено с помощью гугл

12

(3 replies, posted in General)

Sparrow,
Thank you for paying attention to the topic and separately you thank you for your help! Work perfectly.
Regarding the names of the columns, I called it for example.
Thanks again!

Sparrow,
Спасибо, что обратиkb внимание на тему и отдельное Вам спасибо за Вашу помощь! Работает отлично.
Что касается названий столбцов, я назвал так, только ради примера.
Спасибо еще раз!

13

(3 replies, posted in General)

Good day!
There is a Grid Form where the table data is displayed with the possibility of further search. For search I use the built-in function of the button "Search". But there is a problem: structurally, the built-in search cannot build an SQL query with the "OR" operator, but it is necessary. Can you please tell me how to supplement the built-in search query with your own text?
Thank you in advance!

Translation from google.


Доброго времени суток!
Есть Форма с Гридом где  отображаются данные таблицы с возможностью дальнейшего  поиска. Для поиска использую встроенную функцию кнопки "Поиск". Но есть проблема: структурно, встроенный поиск не может строить SQL запрос с оператором "OR", а необходим именно он. Подскажите пожалуйста, как дополнить встроенный запрос поиска  своим текстом?
Заранее спасибо!

Перевод с гугл.

Собственно, решение найдено:

SELECT ADR.id as ID,strftime("%d.%m.%Y %H:%M",ADR.data) as Data,ADR.adres as MyAdres,
      (SELECT group_concat(FIRST_TAB.column_1||' ('||FIRST_TAB.column_2||')') FROM FIRST_TAB WHERE FIRST_TAB.id_ADR=ADR.id) as Tab1,
      (SELECT group_concat(SECOND_TAB.column_1||' ('||SECOND_TAB.column_2||')') FROM SECOND_TAB WHERE SECOND_TAB.id_ADR=ADR.id) as Tab2
FROM ADR WHERE ADR.id={TableGrid1}  

Всем спасибо и с наступающим Новим годом!

Actually, the solution is found:

SELECT ADR.id as ID,strftime("%d.%m.%Y %H:%M",ADR.data) as Data,ADR.adres as MyAdres,
      (SELECT group_concat(FIRST_TAB.column_1||' ('||FIRST_TAB.column_2||')') FROM FIRST_TAB WHERE FIRST_TAB.id_ADR=ADR.id) as Tab1,
      (SELECT group_concat(SECOND_TAB.column_1||' ('||SECOND_TAB.column_2||')') FROM SECOND_TAB WHERE SECOND_TAB.id_ADR=ADR.id) as Tab2
FROM ADR WHERE ADR.id={TableGrid1}  

Thank you all and Happy New Year!

Slightly changed the request:

SELECT * FROM 
(SELECT ADR.id as ID, strftime("%d.%m.%Y %H:%M",ADR.data) as Data,ADR.adres as MyAdres,(FIRST_TAB.column_1||' - '||FIRST_TAB.column_2) as Tab1,'' as Tab2 FROM ADR
INNER JOIN              
FIRST_TAB ON ADR.id=FIRST_TAB.id_ADR and ADR.id={TableGrid1}
UNION ALL
SELECT ADR.id as ID, strftime("%d.%m.%Y %H:%M",ADR.data) as Data,ADR.adres as MyAdres,'' as Tab1,(SECOND_TAB.column_1||' - '||SECOND_TAB.column_2) as Tab2 FROM ADR
INNER JOIN
SECOND_TAB ON ADR.id=SECOND_TAB.id_ADR and ADR.id={TableGrid1})
ORDER BY ID  

The resulting records are correct, but I get empty lines. This spoils the entire type of report. I ask for help!
/Translation from Google/


Немного изменил запрос:

SELECT * FROM 
(SELECT ADR.id as ID, strftime("%d.%m.%Y %H:%M",ADR.data) as Data,ADR.adres as MyAdres,(FIRST_TAB.column_1||' - '||FIRST_TAB.column_2) as Tab1,'' as Tab2 FROM ADR
INNER JOIN              
FIRST_TAB ON ADR.id=FIRST_TAB.id_ADR and ADR.id={TableGrid1}
UNION ALL
SELECT ADR.id as ID, strftime("%d.%m.%Y %H:%M",ADR.data) as Data,ADR.adres as MyAdres,'' as Tab1,(SECOND_TAB.column_1||' - '||SECOND_TAB.column_2) as Tab2 FROM ADR
INNER JOIN
SECOND_TAB ON ADR.id=SECOND_TAB.id_ADR and ADR.id={TableGrid1})
ORDER BY ID  

Результирующие записи верны, но получаю пустые строки. Это портит весь вид отчета. Прошу помощи!
/Перевод с Гугл/

Hello everybody!
There are three tables: one basic and two subordinates associated by ID. When trying to create a report, I get not correct data.
Tell me, what's wrong with my script?
Thanks in advance!

/Translation from Google/

Всем здравствуйте!
Есть три таблицы: одна основная и две подчиненные, связаные по id. При попытке создания отчета, получаю не корректные данные.
Подскажите, что не так с моим скриптом?
Заранее спасибо!

/Перевод с Гугл/

sibprogsistem., спасибо Вам большое!
Вот, иногда даже слов нет чтоб выразить свои эмоции. Я целый день, вчера пытался как то получить индекс искомого компонента, чтоб через свойство Controls его переместить, а нужно было всего то  TdbPanel добавить.

Спасибо еще раз за подсказку. Успехов!

Доброго времени суток!
Есть форма с компонентами (допустим это Panel1, Panel2, Panel3). Как выполнить расстановку компонентов циклом?
Пробовал:

procedure Form1_OnShow (Sender: TObject; Action: string);
var
    i:Integer;
begin
    For i:=1 to 3 do begin
        Form1.FindComponent('Panel'+IntToStr(i)).left:=28;
    End;
end;

Но получаю ошибку.

Заранее всем огромное спасибо!

19

(2 replies, posted in General)

Derek! Thank you very much for your help! It really works.
I wish you success!

20

(2 replies, posted in General)

Good day!
Found that when changing the values in the cell TableGrid on the form F2 (see example), the TableGrid1_OnAfterEdit function is not executed.
Tell me, what am I doing wrong?
Thank you all in advance!

Google translation
===========================================

Доброго времени суток!
Обнаружил, что при изменении значений в ячейке TableGrid на форме F2 (смотрите пример) , функция TableGrid1_OnAfterEdit не выполняется.
Подскажите, что я не так делаю?
Заранее всем спасибо!

Google translation
============================================

Если бы вы уточнили задачу, то было бы больше вариантов )))

К254, спасибо Вам, что не бросаете!
По сути, особой "сверх" задачи то и нет.
Есть форма "Карточка объекта" в которую выводятся данные с основных и подчиненных таблиц БД. Но для оперативности хочется иметь возможность прямого редактирования данных в подчиненных таблицах. Т.е. хотелось избежать необходимости открытия формы-2 для редактирования Grid формы-1 (Карточка).
Понимаю, что в Grid можно разрешить редактирование... Но поскольку столбцов подчиненной таблицы много, Grid займет много места. А он далеко не основной элемент формы. Да и не эстетично как-то. Вот и нафантазировал себе, что может можно в Grid всё транспонировать но с сохранением свойств и привязок ячеек?

В общем, выкрутился при помощи ComboBox-ов расположив их лесенкой. Немного муторно получилось, но ничего. Даже красиво немного!
Спасибо Вам еще раз за внимание! Успехов!

Спасибо Вам, что обратили внимание на тему!
На данный момент в два столбца и отображаю, что правда немного не удобно. Вот и думал, может можно упростить как то.
В любом случае благодарю Вас! Успехов!

Добрый день!
Подскажите пожалуйста, существует ли возможность выполнения транспонирования в Table Grid? Т.е. в строках первой колонки будут заглавия, а в ячейках второй колонки (в соответствующих заглавиям) значения таблицы (как в свойствах компонента формы).
Грубо говоря, хочу повернуть Grid на девяносто градусов влево.
Заранее спасибо и простите если выдал бредовую мысль!

================================================

Good day!
Can you please tell me if it is possible to perform transposition in the Table Grid? That is, the rows of the first column will contain titles, and the cells of the second column (corresponding to the titles) will contain table values (as in the properties of the form component).
Roughly speaking, I want to rotate the Grid ninety degrees to the left.
Thanks in advance and forgive me if I gave out a crazy thought!
/Google translation/

24

(4 replies, posted in General)

Дерек, спасибо что обратили внимание на тему!
Вы очень точно уловили суть вопроса.
Спасибо Вам огромное за помощь!

========================================

Derek, thanks for paying attention to the topic!
You very accurately grasp the essence of the question.
Thank you very much for your help!
   
Translated by Google

25

(4 replies, posted in General)

domebil, спасибо что обратили внимание на тему!
Боюсь, что я не правильно выразил свою мысль.
Допустим есть автомобиль номер ххх. Его стартовые показания на спидометре - 1000. В первый день он проехал 50 км, во второй день еще 10 км, а в третий день еще 40 км.
В результате, в Form1.TableGrid1 в столбце "Check out speedo" будут следующие значения: 1000; 1050; 1060.
То есть нужны текущие показания спидометра на начало дня с учетом предидущего пробега.
Заранее спасибо за помощь!

domebil, thanks for paying attention to the topic!
I am afraid that I have not correctly expressed my idea.
Let's say you have a car number xxx. His starting readings on the speedometer are 1000. On the first day he drove 50 km, on the second day another 10 km, and on the third day another 40 km.
As a result, in Form1.TableGrid1 the Check out speedo column will contain the following values: 1000; 1050; 1060. That is, you need the current speedometer readings at the beginning of the day, taking into account the previous run.
Thanks in advance for your help!

Translated by Google