Skip to forum content
My Visual Database
A Simple Solution for Creating Databases
You are not logged in. Please login or register.
Active topics Unanswered topics
Search options (Page 31 of 61)
Topics by k245 User defined search
Posts found: 751 to 775 of 1,517
I have created several procedures that allow you to call the report generator for displaying tabular data, as well as any others that are passed to it through parameters. That is, you can create a report without a database using only parameters.
https://createmyvisualdatabaseapp.blogs … st_14.html
But you still have to create an application, since there are no other ways to access the FastReport libraries built into My Visual Database.
Нужен ваш проект. Причин может быть несколько.
В календаре дата всегда выбрана.
I wouldn't rely on this setting. At the most unexpected moment, she can let us down. If you find that the Table View Builder fails to produce the desired result, use SQL . This gives you full control over the result and allows you to optimize database queries. Yes, it's more complicated and requires learning the query language, but it's worth it.
joshuA wrote:Привет к245,
Могу я узнать размеры (ширину и высоту) логотипа в вашем примере.
Спасибо!
Hi k245,
May I know the dimensions (width and height) for the logo in your example.
Thanks!
-joshuA
Размеры изображения 128х128, но вы можете менять всё: размеры и положение картинки, размеры формы логина, добавлять новые элементы. Только не нужно удалять элементы, которые задействованы в логике работы формы.
Image dimensions are 128x128, but you can change everything: image size and position, login form size, add new elements. Just do not need to remove the elements that are involved in the logic of the form.
0anion0 wrote:Благодарю.
Сразу, чтобы не плодить темы, можно в окне авторизации пользователя сменить логотип и добавить текст,
пока не нашёл как это сделать, может конечно не так искал.
Ps: я всего 4 дня с программой разбираюсь.
Евгений, за четыре дня такого вы не найдете ))).
procedure Init;
var
tmpLabel:TLabel;
tmpImage: TImage;
begin
// Заменить надпись в заголовке
frmdbCoreLogin.Caption := 'Моя программа v.1.0';
// Заменить картинку
tmpImage := TImage( frmdbCoreLogin.FindComponent('Image1') );
tmpImage.Picture.LoadFromFile( ExtractFilePath( Application.ExeName ) +'logo.png' );
// Добавить текст
tmpLabel := TLabel.Create( frmdbCoreLogin );
tmpLabel.Name := 'labVersion';
tmpLabel.Parent := frmdbCoreLogin;
tmpLabel.Left := 4;
tmpLabel.Top := 4;
tmpLabel.Caption := 'Version 1.0';
end;
begin
Init;
end.
Тут можно почитать, как искать ответы на подобные вопросы:
https://createmyvisualdatabaseapp.blogs … lorer.html
Значит нужно исправить сам отчет
добавьте в основной скрипт директиву:
{$MySQL disable_connectdialog}
begin
end.
вы так и не показали скрипт вызова ColorRowGrid() из обработчика OnAfterSort(). Боюсь, что вашего словесного описания недостаточно для поиска причины ошибки....
И ещё: если вы использовали BeginUpdate то нужен также EndUpdate() после завершения изменений грида. И я бы избавился от переменных c и q.
procedure ColorRowGrid (Grid:TdbStringGridEx;ColorEven,ColorOdd:TColor);
//Grid - Таблица для раскрашивания (Form1.TableGrid1)
//ColorEven - цвет четных строк
//ColorOdd - цвет нечетных строк
var
iRow: integer;
iCol: integer;
begin
Grid.BeginUpdate;
for iRow := 0 to Grid.RowCount - 1 do
for iCol := 0 to Grid.Columns.Count-1 do
begin
if iRow mod 2 = 0 then
Grid.Cell[iCol,iRow].Color := ColorEven
else
Grid.Cell[iCol,iRow].Color := ColorOdd;
end;
Grid.EndUpdate;
end;
0anion0 wrote:Кстати да, одним запросом будет лучше. Благодарю.
но у меня в там есть Null, мне кажется это помешает.
Если кажется, то попробуйте - практика укрепит вашу веру в силу SQL Если не получится, покажите ваш запрос
Устройство вашего отчета и то, как вы его вызываете, нужно угадать?
0anion0 wrote:А как перестроить цвета после изменения сортировки по столбцу?
Если использовать как в примере alex842 то при сортировки по какой либо колонке появляется ошибка.
Функцию вешаю на событие OnChange и OnAfterSort/
Ошибку в студию!
Моё предварительное предположение, что функцию ColorRowGrid() нужно не "вешать", а "вызывать из"
Эволюция абстракций
Эту статью можно рассматривать как вступление в тему “Разработка программ” без уточнения, на каком именно языке, хотя статья базируется на эволюции вполне определенного языка программирования. По форме статья напоминает глоссарий, который выстроен в хронологической последовательности.
Читать: https://createmyvisualdatabaseapp.blogs … st_25.html
Привет jean.brezhonek, 0anion0 !
Решение рабочее, но я рекомендую получать данные одним запросом
var
tmpDataSet: TDataSet;
tmpSQL: string;
...
// один запрос, к той же таблице, что отображается в табличном представлении на форме
tmpSQL := 'SELECT table1.Field1 data1, table1.Field2 data2, table2.Field1 data3 ... '+ // нужные данные с алиасами для полей
' FROM table 1 LEFT JOIN table2 .... '+ // главная таблица и остальные по зависимостям (если есть)
' WHERE table1.id = '+IIntToStr(Form1.TableGrid1.dbItemID); // фильтр по главной таблице
SQLQuery(tmpSQL,tmpDataSet);
// нужные данные в датасете, вытаскиваем по алиасам
Form1.Label1.Caption := tmpDataSet.FieldByName('data1').asString;
Form1.Label2.Caption := tmpDataSet.FieldByName('data2').asString;
...
// TODO: эту часть можно сделать циклом, если использовать соглашение по наименованию компонентов отображения и алиасов
Form1.LabelN.Caption := tmpDataSet.FieldByName('dataN').asString;
// обязательно освобождаем ресурсы
tmpDataSet.Free;
MVD is RAD. ObjectPascal-based scripting language is used. In some cases, knowledge of the SQL is required.
sibprogsistem wrote:а возможно применять стиль не ко всей программе а только для определённых компонентов ?
В рамках MVDB - нет. Можно ли сделать свой стиль для отдельных компонентов? Вряд ли, так как меняются свойства базовых классов
Хамелеон
Как вы, наверное, знаете, My Visual Database позволяет задавать стили оформления приложений. Стиль - это совокупность внешнего вида заголовка окна, кнопок и цветов прочих элементов пользовательского интерфейса. Стиль приложения определяется при создании приложения, выбором нужного пункта в главном меню среды разработки. Список стилей внушителен, но всё же конечен. К тому же, стиль, выбранный разработчиком, не всегда совпадает с темой оформления операционной системы, что может затруднить работу конечного пользователя.
Рассмотрим возможность программного изменения стиля оформления конечного приложения, а также расширения палитры стилей.
Читать: https://createmyvisualdatabaseapp.blogs … -post.html
The PIVOT command is not standard SQL command, it is supported only by some DBMS, SQLite and MySQL are not among them.
But you can make a similar view of the data using a script that will create a table view with the desired number of columns and rows.
This is not often ordered, I don’t have a ready-made simple example. All I can say is that you will need three SQL queries: 1) get a list of headers for rows 2) get a list of headers for columns 3) get data.
Key methods:
1) add Column for Row Names
try
Grid.Columns.Add(TNxTextColumn);
except
end;
Grid.Columns[0].Width := 40;
Grid.FixedCols := 1;
Grid.Columns[0].Color := clbtnFace;
2) add a column for data
try
Grid.Columns.Add(TNxTextColumn);
except
end;
Grid.Columns[Grid.Columns.count-1].Header.Caption := ColData.FieldByName('name').asString;
Grid.Columns[Grid.Columns.count-1].Color := clWhite;
Grid.Columns[Grid.Columns.count-1].Width := 40;
3) add a row
Grid.AddRow;
Grid.Cells[0, Grid.RowCount-1] := RowData.FieldByName('name').asString;
4) fill the cell with data.
Grid.Cells[col, row] := CellData;
konstruktor wrote:При удалении записи файла из базы данных не удаляется сам файл в папке files. Что делать?
Ничего не делать. Стандартная система хранения файлов позволяет один и тот же файл добавлять в разные записи БД. Поэтому, если вы физически удалите такой файл, то он станет недоступным в другой записи. Но, если у вас стоит проверка на уникальность, тогда удаляйте, конечно... Скриптом. Но тут свои нюансы. Например, если вы удаляете запись кнопкой с функцией "Удаление". Тогда в обработчике OnClick нужно запомнить путь к удаляемому файлу, а в обработчике onAfterClick удалить файл. Либо полностью написать скрипт удаления по схеме, предложенной sibprogsistem и не использовать функцию кнопки "Удаление". Вот только я бы рекомендовал удалять файл после удаления записи, так как возможно запись не удастся удалить из-за контроля целостности данных (наличия ссылок на неё без каскадного удаления)
Landropa wrote:А можно как то не удалять файл а переместить его в корзину?
Файлы удаляет ОС, поэтому по умолчанию они перемещаются в корзину.
sibprogsistem wrote:k245 wrote:You can draw graphical primitives on the shape canvas or panel. But hardly anyone will provide you with ready-made scripts for drawing diagrams.
Specifically, in your example, I would use the TShape and TLabel components.
не, ну колбу-то я нарисовать могу
я не понимаю как закрашивать ее только на определенный процент
Пожалуй, для "колбы" лучше использовать PNG картинку с прозрачной частью - внутренностью "колбы", а для "заливки" использовать TShape или TLabel.
Perhaps, for the "tank" it is better to use a PNG image with a transparent part - the inside of the "tank", and for the "fill" use a TShape or a TLabel.
Or abandon the rounding and use the example of Destiny )))
You can draw graphical primitives on the shape canvas or panel. But hardly anyone will provide you with ready-made scripts for drawing diagrams.
Specifically, in your example, I would use the TShape and TLabel components.
derek wrote:Привет Константин,
Я думал, что должен быть способ сделать это, но не мог получить правильный синтаксис.
Теперь я вижу, что мне нужно было сделать
начинать
TdbEdit( tmpForm.Components(j) ).OnEnter := @highlighton;
TdbEdit( tmpForm.Components(j) ).OnExit := @highlightoff;
конец;
Спасибо за это, это будет полезно для многих вещей.
Derek.
.
I thought there must be a way of doing this but couldn't get the correct syntax.
Now I see what I was needing to do
begin
TdbEdit( tmpForm.Components(j) ).OnEnter := @highlighton;
TdbEdit( tmpForm.Components(j) ).OnExit := @highlightoff;
end;
Thanks for this, it will be useful for many things.
It is more correct to cast each object to its true type:
if tmpForm.Components(j) is TdbEdit then
begin
TdbEdit( tmpForm.Components(j) ).OnEnter := @highlighton;
TdbEdit( tmpForm.Components(j) ).OnExit := @highlightoff;
end
else if tmpForm.Components(j) is TdbMemo then
begin
TdbMemo( tmpForm.Components(j) ).OnEnter := @highlighton;
TdbMemo( tmpForm.Components(j) ).OnExit := @highlightoff;
end
else if tmpForm.Components(j) is TdbComboBox then
begin
TdbComboBox( tmpForm.Components(j) ).OnEnter := @highlighton;
TdbComboBox( tmpForm.Components(j) ).OnExit := @highlightoff;
end;
derek wrote:Hi Frank, K245,
Rather than trying to make the flashing cursor more prominent, a different approach might be to make the object that the flashing cursor is currently placed in more prominent.
A simple way to do that would be to change the object background colour when it's got focus (nb this doesn't work for datetimepickers (but I believe that's a Windows constraint rather than MVD)).
Please see the attached.
Derek.
The code works, but I wouldn't recommend ignoring the actual component class. I'm not sure if they are all related to TdbEdit )))
You can automate the assignment of handlers:
procedure highlighton (Sender: TObject);
begin
tdbedit(sender).color := $00BEDD9F;
end;
procedure highlightoff (Sender: TObject);
begin
tdbedit(sender).color := clwhite;
end;
procedure AutoAssign;
var
i,j: integer;
tmpForm: TForm;
begin
for i:=0 to Screen.FormCount - 1 do
begin
tmpForm := Screen.Forms[i];
for j := 0 to tmpForm.ComponentCount - 1 do
begin
if (tmpForm.Components(j) is TdbEdit) // это верно на 100%
or (tmpForm.Components(j) is TdbMemo) // это неправильно, но работает )))
or (tmpForm.Components(j) is TdbComboBox) // это неправильно, но тоже работает )))
then
begin
TdbEdit( tmpForm.Components(j) ).OnEnter := @highlighton;
TdbEdit( tmpForm.Components(j) ).OnExit := @highlightoff;
end;
end;
end;
end;
begin
AutoAssign;
end.
Не стоит обработку организовывать через цикл FOR, для получения нужных значений ID используйте запрос и процедуру SQLQuery, которая создает набор данных (экземпляр класса TDataSet)
var
tmpDataSet: TDataSet;
begin
SQLQuery('SELECT id FROM FIO',tmpDataSet);
while not tmpDataSet.EOF do
begin
SQLExecute('INSERT INTO ZHYRNAL(data,id_FIO,zemlya,zarplata,dorogi) VALUES
('+Nalog.DateTime.sqlDate+', '+tmpDataSet.FieldByName('id').asString+', '+Nalog.TarifZemlya.sqlValue+','+Nalog.TarifZarplata.sqlValue+','+Nalog.TarifDorogi.sqlValue+')' );
tmpDataSet.Next;
end;
tmpDataSet.Free
Но, если всем нужно добавить одно и то же значение для всех, то это можно сделать одной SQL-командой:
SQLExecute('INSERT INTO ZHYRNAL(data,id_FIO,zemlya,zarplata,dorogi) SELECT '+Nalog.DateTime.sqlDate+', id , '+Nalog.TarifZemlya.sqlValue+','+Nalog.TarifZarplata.sqlValue+','+Nalog.TarifDorogi.sqlValue+' FROM FIO' );
Posts found: 751 to 775 of 1,517