4,576

(46 replies, posted in Russian)

RZ-007 wrote:

Дмитрий..это просто чудо!!!  РАБОТАЕТ !!!
Два микро вопросика, для красоты графика....
профит слился с датой....
ВОПРОС:
1.) возможно окрасить профит в другой цвет....
а.) просто окрасить в другой цвет...
б.) если профит >0, тогда в синий...
    если профит <0, тогда в красный...
2.) разделить профит от даты многоточием
      (1000   ...  31.05.2016)
рисунок прилогается...

1.

замените эту строку

if ValidFloat(ProfitValue) then ChartLine.Series[0].AddXY(x, StrToFloat(ProfitValue), DateToStr(DateValue) );

на

        if ValidFloat(ProfitValue) then
        begin
            if StrToFloat(ProfitValue) > 0 then
                ChartLine.Series[0].AddXY(x, StrToFloat(ProfitValue), DateToStr(DateValue), clBlue)
            else ChartLine.Series[0].AddXY(x, StrToFloat(ProfitValue), DateToStr(DateValue), clRed);
        end;

2. К сожалению нет такой возможности.

4,577

(9 replies, posted in Russian)

indigen wrote:

Ворд 2013 таже проблема

Спасибо, исправил пример проекта, теперь должно работать корректно, проверил на Word 2010 и 2013

4,578

(35 replies, posted in Russian)

tkuzmin wrote:

Теперь понял, я думал это глобальное правило для всех гридов! ) Я как понимаю по такому же принципу добавлять все другие гриды где нужны такие параметры ссылаясь на конкретные грид и форму правильно?

Да, для каждого грида необходимо создать событие OnChange, и в данное событие вставить скрипт, как правильно создавать события можете прочитать здесь
http://myvisualdatabase.com/help_ru/scr … rview.html

4,579

(35 replies, posted in Russian)

tkuzmin wrote:

Дмитрий, спасибо большое, база теперь подключается! Но в гриде значение все равно не от центрованы (

Какой именно грид имеете ввиду, я сделал в качестве примера для грида TableGrid1 на форме searchorder

4,580

(35 replies, posted in Russian)

tkuzmin wrote:

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

Готово.

4,581

(12 replies, posted in Russian)

memult wrote:

А вывести сразу в отчет не получится? Т.е перечислить эти комбобоксы сразу в процедуре и передать результат SQL в отчет.

Сейчас смог реализовать только для 5 комбобоксов, по Вашему первому варианту. 30 комбинаций..

В принципе да, разместите на форме кнопку с действием Отчет (SQL), ее можно также сделать невидимой.
затем в коде измените

    Grid.dbSQL:=sSQL; // the id field, want to be able to edit or delete the entry from the table component
    Grid.dbGeneralTable := 'employees'; // Optional (in the case of complex SQL queries with sub queries, you need to choose the main table of the database, also it need to be able to edit or delete the entry from the table component)
    Grid.dbListFieldsNames :='delete_col,Lastname'; // If you do not want to see the value of the id in the component table, enter a name for the column delete_col
    Grid.dbSQLExecute;

на

    Form1.Button9.dbSQL := sSQL;
    Form1.Button9.Click;

4,582

(46 replies, posted in Russian)

RZ-007
Попробуйте так

var
   ChartLine: TChart;
   
procedure Form1_OnShow (Sender: string; Action: string);
begin
  ChartLine := TChart.Create(Form1);
  ChartLine.Parent := Form1.Panel1;
  ChartLine.Align := alClient;
  ChartLine.AddSeries(TLineSeries.Create(ChartLine));
  //ChartLine.Series[0].XValues.DateTime := True;
  ChartLine.View3D := False; //  отключить 3д
end;

 procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);
var
    Results: TDataSet;
    DateValue: Double;
    ProfitValue: string;
    i,c: integer;
    x: integer;
begin
    ChartLine.Series[0].Clear;
    x := 0;
    
    c := Form1.TableGrid1.RowCount-1;
    for i := 0 to c do
    begin
        if ValidDate(Form1.TableGrid1.Cells[1, i]) then DateValue := StrToDate(Form1.TableGrid1.Cells[1, i]);
        ProfitValue := Form1.TableGrid1.Cells[2, i];

        if ValidFloat(ProfitValue) then ChartLine.Series[0].AddXY(x, StrToFloat(ProfitValue), DateToStr(DateValue) );
        Inc(x);
    end;
end;

4,583

(9 replies, posted in Russian)

kunar80 wrote:

Столкнулся со следующей проблемой. В этот грид на frmMain загружаются данные через CSV, а значит даты при наличии в гриде вычисляемого поля, загружать нет возможности. Можно ли не создавать вычисляемое поле, а в гриде задать формат для даты MMMM yyyy (как на frmAddUnit)? Речь идёт о дате изготовления техники, число в ней как правило отсутствует. Проект прилагаю.

К сожалению не совсем понял проблему. Наличие вычисляемого поля не может влиять на возможность импорта в базу. Дату необходимо загружать не в вычисляемое поле mfrDateText, а в настоящее поле mfrDate

4,584

(12 replies, posted in Russian)

memult
Написал универсальную процедуру, для поиска по любому количеству кобобоксов

procedure SearchByComboBoxes (ComboBoxes: Array of TdbComboBox; Grid: TdbStringGridEx);
var
    Results: TDataSet;
    sSQL: string;
    sWhere: string;
    s: string;
    i,c: integer;
    ComboBox: TdbComboBox;
begin
    sSQL := 'SELECT id, lastname FROM employees';
    sWhere := '';
    
    c := Length(ComboBoxes)-1;
    for i := 0 to c do
    begin
        ComboBox := ComboBoxes[i];

        s := '';
        for i := 0 to ComboBox.Items.Count-1 do
        begin
            if ComboBox.ItemsChecked[i] then
                s := s + ' '+ComboBox.dbForeignKeyShort+'='+IntToStr(ComboBox.dbIndexToID(i))+' OR';
        end;

        if s<>'' then
        begin
            SetLength(s, Length(s)-3);
            s := '(' + s + ')';
            if sWhere<>'' then sWhere := sWhere + ' AND ';
            sWhere := sWhere + s;
        end;
    end;

    if sWhere<>'' then sSQL := sSQL + ' WHERE ' + sWhere;

    Grid.dbSQL:=sSQL; // the id field, want to be able to edit or delete the entry from the table component
    Grid.dbGeneralTable := 'employees'; // Optional (in the case of complex SQL queries with sub queries, you need to choose the main table of the database, also it need to be able to edit or delete the entry from the table component)
    Grid.dbListFieldsNames :='delete_col,Lastname'; // If you do not want to see the value of the id in the component table, enter a name for the column delete_col
    Grid.dbSQLExecute;
end;


Для использования данной процедуры, необходимо передать ей массив ComboBox-ов и компонент грида, куда необходимо вывести результат, пример использования:

procedure Form1_Button8_OnClick (Sender: string; var Cancel: boolean);
begin
    SearchByComboBoxes( [Form1.cbGroups, Form1.cbSex, Form1.ComboBox1] , Form1.TableGrid1)
end;

4,585

(35 replies, posted in Russian)

tkuzmin wrote:

Другие скрипты ругается на BEGIN expected - я как понимаю что мне чего то не хватает, скрипт должен с чего то начинаться и чем то заканчиваться куда уже можно вставить ваши скрипты. Подскажите пожалуйста)

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

Пожалуйста приложите ваш проект, посмотрю где ошибка.
Скрипты написаны на Pascal.

kunar80 wrote:

Коллеги! Прошу посмотреть проект. На форме frmMain не работает кнопка удаления записи Button3. Выдаёт ошибку, связанную с ключом (скрин ошибки во вложении).

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

4,587

(12 replies, posted in Russian)

memult wrote:

Спасибо за пример, но работает это некорректно.
Когда стоит условие сразу в двух мультикомбобоксах, результат отображается неверно.
К примеру выборка для вашего примера: Groups: Home,Sport;  Sex: Female
Результат: Ivanov,John,Elizabet,Lara. А должен быть: Lara. Два условия сразу не соблюдаются.

вам необходимо немного другая логика работы, попробуй так

procedure Form1_Button5_OnClick (Sender: string; var Cancel: boolean);
var
    Results: TDataSet;
    sSQL1, sSQL2, sSQL: string;
    i: integer;
begin
    sSQL := 'SELECT id, lastname FROM employees';


    sSQL1 := '';
    for i := 0 to Form1.cbGroups.Items.Count-1 do
    begin
        if Form1.cbGroups.ItemsChecked[i] then
            sSQL1 := sSQL1 + ' id_groups='+IntToStr(Form1.cbGroups.dbIndexToID(i))+' OR';
    end;

    if sSQL1<>'' then
    begin
        SetLength(sSQL1, Length(sSQL1)-3);
        sSQL1 := '(' + sSQL1 + ')';
    end;



    sSQL2 := '';
    for i := 0 to Form1.cbSex.Items.Count-1 do
    begin
        if Form1.cbSex.ItemsChecked[i] then
            sSQL2 := sSQL2 + ' id_sex='+IntToStr(Form1.cbSex.dbIndexToID(i))+' OR';
    end;

    if sSQL2<>'' then
    begin
        SetLength(sSQL2, Length(sSQL2)-3);
        sSQL2 := '(' + sSQL2 + ')';
    end;



    if (sSQL1<>'') or (sSQL2<>'') then  sSQL := sSQL +  ' WHERE ';
    if (sSQL1<>'') and (sSQL2<>'') then sSQL := sSQL + sSQL1 + ' AND '+ sSQL2
    else sSQL := sSQL + sSQL1 + sSQL2;


    Form1.TableGrid1.dbSQL:=sSQL; // the id field, want to be able to edit or delete the entry from the table component
    Form1.TableGrid1.dbGeneralTable := 'employees'; // Optional (in the case of complex SQL queries with sub queries, you need to choose the main table of the database, also it need to be able to edit or delete the entry from the table component)
    Form1.TableGrid1.dbListFieldsNames :='delete_col,Lastname'; // If you do not want to see the value of the id in the component table, enter a name for the column delete_col
    Form1.TableGrid1.dbSQLExecute;

end;

4,588

(2 replies, posted in General)

v_pozidis wrote:

Hi , is it possible in a combobox to have the last record in the  first choise ? how can i do that?

Hello,

You can do it only using script. You should populate ComboBox using SQL query, where you can use any kind of sorting, example:

procedure Form1_OnShow (Sender: string; Action: string);
begin
   Form1.ComboBox1.dbSQLExecute ('SELECT fieldname, id FROM tablename ORDER BY id DESC');
end;

Приветствую,


Исправил ваш проект.
На форме Запрос можете видеть все данные в таблицах, также там можете их добавлять, редактировать и удалять.


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

4,590

(35 replies, posted in Russian)

tkuzmin wrote:

3) Если можно поменять логотип программы и убрать верхнее меню?
4) Можно ли вписать в саму программу данные mysql что бы он их не спрашивал?


3. Под логотипом имеете ввиду иконку исполняемого файла проекта? это можно сделать только используя сторонюю программу Resourse Hacker

убрать меню можно так
http://myvisualdatabase.com/forum/viewtopic.php?id=1091


4. Можно, пример
http://myvisualdatabase.com/forum/viewtopic.php?id=1805

4,591

(35 replies, posted in Russian)

tkuzmin wrote:

Дмитрий, спасибо большое все теперь вроде понятно, строю базу дальше ) Есть два микро вопроса пока -
1) Как установить в гриде ширину ячеек что бы их не надо было растягивать в самой программе что бы увидеть всю инфу?
2) Как в гриде установить что бы значения ячеек были от центрованы?
Еще раз спасибо )


1.

procedure Form1_TableGrid1_OnChange (Sender: string);
begin
    Form1.TableGrid1.BestFitColumns();
end;

также возможно вам будет полезен данный пример
http://myvisualdatabase.com/forum/misc. … download=1


2.

procedure Form1_TableGrid1_OnChange (Sender: string);
var
    i, c: integer;
begin
    c := Form1.TableGrid1.Columns.Count - 1;
    for i := 0 to c do
    begin
        Form1.GridEmplTableGrid1oyees.Columns[i].Alignment := taCenter;
    end;
end;

если объеденить оба скрипта, получится так

procedure Form1_TableGrid1_OnChange (Sender: string);
var
    i, c: integer;
begin
    c := Form1.TableGrid1.Columns.Count - 1;
    for i := 0 to c do
    begin
        Form1.GridEmplTableGrid1oyees.Columns[i].Alignment := taCenter;
    end;

    Form1.TableGrid1.BestFitColumns();
end;

4,592

(5 replies, posted in General)

nrmuduli wrote:

Ok
As far as i understand, i need to use sql insert statement to insert calculated data in the database then show in the grid.
but how to set variable, calculate data & insert into database.

You don't need to use sql queries to calculate data. Please check out this example, how to do calculate data on form using script
http://myvisualdatabase.com/forum/viewtopic.php?id=1416

4,593

(5 replies, posted in General)

nrmuduli wrote:

i need the table grid to be filled automatically upon clicking the calculate button .
the data to be filled is as per the example given in the attached image.

thanks...

You should save data to database (using button with action "Save Record") only after that table grid can be filled with this data.

4,594

(9 replies, posted in Russian)

kunar80 wrote:

Здравствуйте!
Если для DateTimePicker1 на форме установлен формат "MMMM, yyyy", то каким образом в гриде можно получить выбранное значение в виде "ММ/уууу" (например сейчас август 2016, значит в гриде отображается 08/2016)?
Полагаю, что помимо поля Date в таблице нужно иметь вычисляемое поле DateText и уже его значение выводить в грид. Так? Но как в нём прописать формулу?

Здравствуйте,


Создайте вычисляемое поле вида

strftime('%m/%Y', datefield)

затем можете его вывести в грид.

4,595

(10 replies, posted in General)

I started writing a book about the database and use My Visual Database.


Please let me know if you found some errors (grammatical and syntax errors).
Many thanks to Yann Yvinec for the translate! )


--


Book:
http://myvisualdatabase.com/download/Bo … tabase.pdf

4,596

(5 replies, posted in General)

I can help you only with specific question.


You can't filled table grid manually, you can only save data to database and show it in the table grid.

4,597

(4 replies, posted in Russian)

Приветствую,


1.
Вы можете удалить файл script.pas из папки Script перед тем отдать проект клиенту, т.о. клиент не сможет увидеть или отредактировать скрипт. Но данный файл вам необходим для возможности редактирования скрипта. Другие файлы к сожалению закодировать или удалить не получиться.


3.

Создайте событие OnShow главной формы, пример:
procedure Form1_OnShow (Sender: string; Action: string);
begin
    frmOptionsdbCore.TabSettings.TabVisible := False;
end;

4,598

(35 replies, posted in Russian)

tkuzmin wrote:

Дмитрий, да частично заработало, спасибо )
Из того что не понял как делать:
Продавец 1 и продавец 2 используют один и тот же словарь но как сделать так что бы из одной таблицы он показывал два имени в гриде заказа не пойму - либо марина марина либо 1 - 2. И момент с редактированием формы, он в ней сбрасывает все значения которые связаны со словарями! Высылаю файл )

Немного исправил ваш проект.


На форме items были не верно указаны внешние ключи для ComboBox-ов


Для вывода в грид двух значений из словаря необходимо использовать вычисляемое поле, создал его в таблице db_items, поле calc_sale2

Gilberto_Schiavinatto wrote:

Hi Dmitri, I'm sorry for the inconvenience, but the version I'm using (2.6 Beta), the link to the example reported in the response, the action button is "Report (SQL)." I need guidance on how to use the "Report" option (see images).

Please check out your fixed example:

4,600

(2 replies, posted in Reports)

Unfortunately I can't find the answer.