26

(13 replies, posted in Russian)

ОК, Сенкс заработало. Немного комбобоксы по другому стали отрабатывать, но вполне нормально.

27

(13 replies, posted in Russian)

DriveSoft wrote:

попробуйте так

procedure All_koresp_Button10_OnClick (Sender: string; var Cancel: boolean);  // В зависимости от введенных данных в поиске формируем условие WHERE в SQL запросе
var
    s, sWhere: string;
begin
     sWhere := '';
     if All_koresp.ComboBox1.Text <> '' Then sWhere := sWhere + 'kan_grup.id_kan_tip= {ComboBox1} AND ';
     if All_koresp.ComboBox2.Text <> '' Then sWhere := sWhere + 'documentiki.id_kan_grup= {ComboBox2} AND ';
     if All_koresp.ComboBox3.Text <> '' Then sWhere := All_koresp.Edit11.Text + 'documentiki.id_organization={ComboBox3} AND ';
     if All_koresp.Edit6.Text <> '' Then sWhere := sWhere + 'documentiki.god_docum LIKE ''{Edit6}'' AND ';
     if All_koresp.Edit8.Text <> '' Then sWhere := sWhere + 'documentiki.Reg_nom LIKE ''%{Edit8}%'' AND ';
     if All_koresp.Edit7.Text <> '' Then sWhere := sWhere + 'documentiki.kr_soder LIKE ''%{Edit7}%'' AND ';
     if All_koresp.Edit9.Text <> '' Then sWhere := sWhere + 'documentiki.Reg_nom_otprav LIKE ''%{Edit9}%'' AND ';

     if All_koresp.CheckBox1.State = cbChecked Then
     begin
         sWhere := sWhere + 'documentiki.Ob_prosm=1'
     end;

     if All_koresp.CheckBox1.State = cbUnchecked Then
     begin
     if (All_koresp.Edit3.Text <> '') and (All_koresp.Edit4.Text <> '') Then sWhere := sWhere + '((documentiki.DP1 LIKE ''{Edit3}'' AND documentiki.DP2 LIKE ''{Edit4}'') OR (documentiki.PP1 LIKE ''{Edit3}'' AND documentiki.PP2 LIKE ''{Edit4}''))';
     if (All_koresp.Edit3.Text = '') and (All_koresp.Edit4.Text = '') Then sWhere := sWhere + '1=1';
     if (All_koresp.Edit3.Text <> '') and (All_koresp.Edit4.Text = '') Then sWhere := sWhere + '(documentiki.DP1 LIKE ''{Edit3}'' OR documentiki.PP1 LIKE ''{Edit3}'')';
     end;

     s := All_koresp.Button9.dbSQL;
     s := ReplaceStr(s, '{Edit11}', sWhere);
     All_koresp.Button9.dbSQL := s;
end;

Помогло для первой сортировки, при дальнейшем выборе критериев сортировки в коде

s := All_koresp.Button9.dbSQL;
     s := ReplaceStr(s, '{Edit11}', sWhere);
     All_koresp.Button9.dbSQL := s;

'{Edit11}' уже нет в тексте полученным

s := All_koresp.Button9.dbSQL;

а содержит уже предыдущее значение s

28

(14 replies, posted in Russian)

DriveSoft wrote:

Скачайте пожалуйста последнюю бета версию
https://www.dropbox.com/s/5x7vjreoju45z … a.zip?dl=0


Теперь не должно быть проблем с отображением веток при переносе.

Добрый день, проблем с переносом теперь не наблюдается, но появилось следующее, в записи которая так сказать первого уровня (TOP), и последняя в списке в поле Parrent ID сидит какое то число, т.е при раскраске по условию:

procedure new_poruch_TreeView1_OnChange (Sender: TObject);  // Раскрашиваем Дерево
var
c, i:integer;
begin
   //new_poruch.TreeView1.Columns[1].Visible:= False;  //Скрываем колонку ID Parrent
   new_poruch.TreeView1.BeginUpdate;
   c := new_poruch.TreeView1.RowCount - 1;
   for i := 0 to c do
    begin
    if new_poruch.TreeView1.Cells[1,i] = '0'  then    //если запись первого уровня то делаем раскраску
    begin
    new_poruch.TreeView1.SelectedRow :=0; //перемещаем курсор на первую строку
    new_poruch.TreeView1.Cell[0,i].TextColor := $008A4500;  //если стартовое поручение то окрашиваем текст  в синий цвет
    new_poruch.TreeView1.Cell[0,i].FontStyle := fsBold;  //Если поручение Раздел то делаем его жирным
    new_poruch.TreeView1.Cell[0,i].Color := $00E0E0E0;   // Заливаем фон
    new_poruch.TreeView1.Cell[1,i].Color := $00E0E0E0;   // Заливаем фон
    new_poruch.TreeView1.Cell[2,i].Color := $00E0E0E0;   // Заливаем фон
    new_poruch.TreeView1.Cell[3,i].Color := $00E0E0E0;   // Заливаем фон
    end;
    end;
   new_poruch.TreeView1.EndUpdate; 
end;

Последняя запись не проходит на условие равенства нулю и не раскрашивается.
Скрин во вложении

29

(14 replies, posted in Russian)

DriveSoft wrote:

Проверкую можно сделать так

function CheckTreeOk(TreeView: TdbTreeView; FromIndex, ToIndex: integer): boolean;
var
    i: integer;
begin
    result := True;
    i := ToIndex;
    while TreeView.GetLevel(i) > 0 do
    begin
        i := TreeView.GetParent(i);
        if i = FromIndex then
        begin
            Result := False;
            Break;
        end;                        
    end;
end;


procedure perenos_Button1_OnClick (Sender: TObject; var Cancel: boolean);
begin
    if CheckTreeOk(Form1.TreeView1, Form1.TreeView1.SelectedRow, perenos.TreeView1.SelectedRow) then
    begin
        //Перед перемещением помогите сделать проверку чтобы нельзя было переносить ниже по этой ветке
        SQLExecute('UPDATE skup SET ParrentID='+IntToStr(perenos.TreeView1.dbItemID)+' WHERE id='+IntToStr (Form1.TreeView1.dbItemID)+' ');// Переносим записи меняем Parrent ID у выбранной записи
        Form1.TreeView1.dbUpdate;
        perenos.Close;
    end else ShowMessage('You can''t');
end;

А вот то, что ветки не отображается, это ошибка в программе, поправлю.

Круто, работает. Можно пояснить некоторые команды:

    i := ToIndex;
    i = FromIndex
   

а как кодом свернуть?

new_poruch.WindowState := wsMinimized;  // сворачиваем форму

Сворачивает все равно в панель задач

31

(13 replies, posted in Russian)

С апострофом заметил следующее
допустим условие WHERE для SQL запроса формируется у меня так:

All_koresp.Edit11.Text := All_koresp.Edit11.Text + 'documentiki.god_docum LIKE ''{Edit6}'' AND ';

Потом в SQL запросе подставляю сформированное условие:

WHERE {Edit11} 

после SQL условие выглядит так:

WHERE documentiki.god_docum LIKE ''2018''

Тоже самое сделал с кнопкой поиск и посмотрел каким SQL запросом сформирована таблица показало такое условие

WHERE `documentiki`.`god_docum` LIKE '2018'

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

All_koresp.Edit11.Text := All_koresp.Edit11.Text + 'documentiki.Reg_nom LIKE ''%{Edit8}%'' AND ';

32

(13 replies, posted in Russian)

DriveSoft wrote:

Evgeniy D
Не смог найти ошибку, приложите пожалуйста ваш проект, протестирую.

ссылка на проект https://yadi.sk/d/jmAVXvO-3TsiDE
Вряд ли поможет, проект большой, база на MySQL.
Форма - All_koresp
Кнопка формирования условия - Button10
Кнопка SQL запроса - Button9

Можно ли раннюю версию программы еще раз выложить которую здесь давали http://myvisualdatabase.com/forum/viewtopic.php?id=4155

33

(13 replies, posted in Russian)

При компилировании в последней версии стала выпадать ошибка (см. вложение).
(в предыдущей версии такой ошибки небыло)
скорее всего по другому стал определятся код в редакторе.

кодом формировал условие WHERE в текстовом поле и подствлял в SQL запросе по заполнению таблицы.
код такой

procedure All_koresp_Button10_OnClick (Sender: string; var Cancel: boolean);  // В зависимости от введенных данных в поиске формируем условие WHERE в SQL запросе
begin
     All_koresp.Edit11.Text := '';
     if All_koresp.ComboBox1.Text <> '' Then All_koresp.Edit11.Text := All_koresp.Edit11.Text + 'kan_grup.id_kan_tip= {ComboBox1} AND ';
     if All_koresp.ComboBox2.Text <> '' Then All_koresp.Edit11.Text := All_koresp.Edit11.Text + 'documentiki.id_kan_grup= {ComboBox2} AND ';
     if All_koresp.ComboBox3.Text <> '' Then All_koresp.Edit11.Text := All_koresp.Edit11.Text + 'documentiki.id_organization={ComboBox3} AND ';
     if All_koresp.Edit6.Text <> '' Then All_koresp.Edit11.Text := All_koresp.Edit11.Text + 'documentiki.god_docum LIKE ''{Edit6}'' AND '; 
     if All_koresp.Edit8.Text <> '' Then All_koresp.Edit11.Text := All_koresp.Edit11.Text + 'documentiki.Reg_nom LIKE ''%{Edit8}%'' AND ';
     if All_koresp.Edit7.Text <> '' Then All_koresp.Edit11.Text := All_koresp.Edit11.Text + 'documentiki.kr_soder LIKE ''%{Edit7}%'' AND ';
     if All_koresp.Edit9.Text <> '' Then All_koresp.Edit11.Text := All_koresp.Edit11.Text + 'documentiki.Reg_nom_otprav LIKE ''%{Edit9}%'' AND ';

     if All_koresp.CheckBox1.State = cbChecked Then
     begin
     All_koresp.Edit11.Text := All_koresp.Edit11.Text + 'documentiki.Ob_prosm=1'
     end;

     if All_koresp.CheckBox1.State = cbUnchecked Then
     begin
     if (All_koresp.Edit3.Text <> '') and (All_koresp.Edit4.Text <> '') Then All_koresp.Edit11.Text := All_koresp.Edit11.Text + '((documentiki.DP1 LIKE ''{Edit3}'' AND documentiki.DP2 LIKE ''{Edit4}'') OR (documentiki.PP1 LIKE ''{Edit3}'' AND documentiki.PP2 LIKE ''{Edit4}''))';
     if (All_koresp.Edit3.Text = '') and (All_koresp.Edit4.Text = '') Then All_koresp.Edit11.Text := All_koresp.Edit11.Text + '1=1';
     if (All_koresp.Edit3.Text <> '') and (All_koresp.Edit4.Text = '') Then All_koresp.Edit11.Text := All_koresp.Edit11.Text + '(documentiki.DP1 LIKE ''{Edit3}'' OR documentiki.PP1 LIKE ''{Edit3}'')';
     end;
end;

Ругается скорее всего по текстовым полям кавычки стоят, может теперь по другому надо использовать

34

(14 replies, posted in Russian)

DriveSoft wrote:

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


Для этого можно пройтись по дереву с помощью метода GetParent (пока GetLevel > 0), чтобы проверить, не встретится ли данный узел.


Если не получиться самостоятельно, приложите ваш проект, в котором релизован механизм перемещения веток, постараюсь помочь.

Проект прикладываю, помогите  с проверкой, еще там в архиве в Ворде небольшой вопрос по определенному переносу записи перестают отображаться в дереве

35

(13 replies, posted in Russian)

Чето половина таблиц стала ругаться после этого обновления, посыпались ошибки, где предыдущую версию можно скачать

36

(14 replies, posted in Russian)

Добрый день.
Еще вопрос, подскажите не совсем понимаю какой из вышеуказанных методов можно применить при перемещении записи саму в себя и выдать запрет на такое перемещение т.к. ветка размыкается. Пример действия которое нужно запретить на картинке во вложении.

Компоненты Диаграмма Ганта существуют? возможно ли в недалеком будущем и такой компонент добавить?

38

(14 replies, posted in Russian)

И еще вопрос, по формированию дерева, описание проблемки с картинками во вложении

39

(25 replies, posted in Russian)

И еще вопрос, по формированию дерева, описание проблемки с картинками во вложении

40

(25 replies, posted in Russian)

DriveSoft wrote:
Evgeniy D wrote:

По TreeView остается актуальным вопросы.
Допустим для реализации задача - подзадача ..... актуально для определенных пользователей видеть или не видеть определенные подуровни, т.е. требуется сделать некоторые подуровни скрытыми.
Можно ли загружать данные в дерево попадающие под определенные условия а не все? Например с помощью кнопки Поиск или SQL поиск.

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


Сделал для вас проект с примером. За видимост узла отвечает поле AdminOnly


Опцию фильтр если менять кодом это меняется свойство dbFilter?  Если да, то тогда следующий вопрос, какой принцип работы dbFilter? Ранее наблюдалось что dbFilter, при большом количестве записей работает гораздо медленное если таблицу заполнять SQL запросом.

41

(14 replies, posted in Russian)

В продолжении темы http://myvisualdatabase.com/forum/viewtopic.php?id=4096

При переносе уровней (SQL запросом) дерева как проверить что ветку собираются перенести в себя уровнем ниже?

42

(25 replies, posted in Russian)

По TreeView остается актуальным вопросы.
Допустим для реализации задача - подзадача ..... актуально для определенных пользователей видеть или не видеть определенные подуровни, т.е. требуется сделать некоторые подуровни скрытыми.
Можно ли загружать данные в дерево попадающие под определенные условия а не все? Например с помощью кнопки Поиск или SQL поиск.
Как можно подуровни менять местами? например

задача 1
    Подзадача 1.1
    Подзадача 1.2
как Подзадача 1.2. поменять местами  с Подзадачей 1.1.

Еще не понятно как после переноса подуровней (с помощь кода меняю ParrenID) обновить компонент, обновляется только после перезапуска проекта. обновляю так

new_poruch.TreeView1.dbUpdate;

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

Коллеги подскажите можно ли и как использовать в запросе переменную
допустим в этом кусочке у меня поля могут меняться от N1 до N10,

 

newnum := SQLexecute('SELECT MAX(N2)+1 FROM skup WHERE parrentID = "'+IntToStr (new_poruch.TableGrid1.dbItemID)+'"');


Чтобы не плодить кучу разных запросов хотел поле формировать и подставлять в запрос например:

pole := 'N2';
   newnum := SQLexecute('SELECT MAX("'+pole+'")+1 FROM skup WHERE parrentID = "'+IntToStr (new_poruch.TableGrid1.dbItemID)+'"'); 

не выдает ошибку, но и не воспринимает значение.
Подскажите можно ли как то пользоваться переменными?

Сенкс

Именно другая не скрыть форму а свернуть - имитация при нажатии кнопки управления на форме "_"

Всем привет, собственно вопрос - Как Свернуть скриптом все открытые формы, ну или хотя бы текущую форму

такая же проблема была. На сервере почтовик и еще программы крутились, пока на отдельный комп не перенес также по 10 мин запускалось приложение.

49

(25 replies, posted in Russian)

Круто.
По TreeView можно ли в пример добавить?
Как перемещать ветку.
Как скрыть один из уровней
Как программно создать подуровень

Добрый день. Есть пример http://myvisualdatabase.com/forum/viewtopic.php?id=3864
В нем с помощью dbLimit устанавливают количество записей выводимых в таблицу.
Можно ли как то сделать допустим выводим 500 записей, а при нажатии на кнопку например "показать следующие 500 записей" и при этом показались следующие 500 записей а предыдущие 500 не показывались и т.д.