DriveSoft wrote:

Igor
Отправьте пожалуйста ваш проект на support@drive-software.com
посмотрю в чем дело.

Дмитрий, проект отправил, за ранее спасибо !

Дмитрий, приветствую !

Проблема с ошибками пропала, в базу логинится без проблем, но вот сообщение об именинниках не выскакивает.
Заменил как вы и советовали:

Попробуйте заменить

group_concat(FIO, char(13))

на

CONCAT_WS(char(13), `FIO`)

Теперь строчка выглядит так :

b := SQLExecute('SELECT CONCAT_WS(char(13), `FIO`) FROM UserCO WHERE DATE_FORMAT(DataRoghd, ''%d.%m'')=DATE_FORMAT(''now'', ''%d.%m'')');
if b <>'' then
begin
MessageDlg('Сегодня празднует День рождения:' +#13#10 +#13#10 +b, mtInformation, mbOK, 0 );
end;

Но при этом похоже не работает , сообщение не выводится

Дмитрий, здравствуйте !
Столкнулся с проблемой перевода базы в MySQL.

Выводит ошибки:
1.При попытке вывести сообщение с именинником

Error message:

#42000You have an error in yor SQL syntax; chek the manual that corresponds to your MySQL server version for the
right syntax to use near ')' at line 1

Жалуется на данную строку кода

b := SQLExecute('SELECT group_concat(FIO, char(13)) FROM UserCO WHERE DATE_FORMAT(DataRoghd, ''%d.%m'')=DATE_FORMAT(''now'', ''%d.%m'',)');
if b <>'' then
begin
MessageDlg('Сегодня празднует День рождения:' +#13#10 +#13#10 +b, mtInformation, mbOK, 0 );
end;

2. При попытке залогиниться в базе

Cloud not convert variant of type (Null) into type (integer)

Ссылается на данный участок кода

procedure frmLogin_OK_OnClick (Sender: string; var Cancel: boolean);  
   var
    s: string;
 begin

     // SQL запрос логина и пароля пользователя
    s:= VarToStr( SQLExecute('SELECT password FROM UserCO WHERE (FIO_login = ''' + frmLogin.ComboBox1.Text + ''');') );
      idUser:= SQLExecute('SELECT id FROM UserCO WHERE (FIO_Login = ''' + frmLogin.ComboBox1.Text + ''');');
      idOtdel := SQLExecute ('SELECT id_StrukturnOtdelCO FROM UserCO WHERE id='+IntToStr(idUser));

        // если логин и пароль найдены ////
       if s= frmLogin.Edit1.Text then
      begin
          sUser := frmLogin.ComboBox1.Text; 
     // проверка прав администратора
          s := VarToStr( SQLExecute('SELECT Admin FROM UserCO WHERE (FIO_Login = ''' + sUser + ''');') );
          if s='0' then

Данный код без проблем работал на SQLite версии. Подскажите как исправить? За ранее спасибо!

Дмитрий, как всегда - Огромное спасибо !
Работает как надо.

Дмитрий, здравствуйте !
Не подскажите как реализовать sql запрос с отображением данных в одной ячейке таблицы:
например:

SELECT
UserOP.Famyli+UserOP.Name,
UserOP.Name,
UserOP.Otchestvo,
DolghnostOP.NameDolghnostOP,
strftime('%d.%m.%Y',UserOP.DataRoghd),
UserOP.DopInfo,
strftime('%d.%m.%Y',UserOP.DateUvolen),
UserOP.id


FROM UserOP
LEFT OUTER JOIN DolghnostOP ON DolghnostOP.id =UserOP.id_DolghnostOP

WHERE

(FIO LIKE '%{Edit1}%')  OR

(case when '{Edit1}'='' then 1=1 else NameDolghnostOP LIKE '%{Edit1}%' end)

В результате данного запроса - фамилия имя и отчество отображаются в разных колонках. Вопрос: что нужно дописать, дабы ФИО отображалось в одной колонке и ячейке (и вообще возможно ли это)
http://myvisualdatabase.com/forum/misc. … _str=358f2

Дмитрий, здравствуйте !
А нет ли подобного примера реализации вывода изображения рядом с гридом, при условии что тип изображения (LinkFile) ?

82

(13 replies, posted in Russian)

Дмитрий, доброе утро!
Подскажите - когда включите кнопку (+) в строках кода у процедур? Не критично, но не очень удобно wink

83

(17 replies, posted in Russian)

wertyby пишет:


Дмитрий. Почему в последней бете 2,2 строки кола в скрипте приблизительно после сотни становятся синими? И я так понимаю теперь можно много свойств различных элементов  изменять путём графического меню без скриптов?

в версии 2.1 такого не наблюдается?

Дмитрий, в версии 2.1 такая же проблемка

Спасибо Дмитрий !

Дмитрий, появился еще один вопрос по сортировке значений в Grid, а именно :

procedure Form1_TableGrid1_OnChange (Sender: string);
begin
    Form1.TableGrid1.Columns[1].Sorted := True; // сортировка второй колонки (нумерация колонок с нуля)
end;

Я так понимаю что данная строка скрипта просто включает сортировку значений в указанной колонке. По умолчанию сортировка выполняется с большего до меньшего значения либо по алфавиту. Как реализовать (реверсную) сортировку - с меньшего на большее (в обратном порядке). За ранее спасибо.

86

(3 replies, posted in Russian)

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

87

(3 replies, posted in Russian)

DriveSoft wrote:

Пожалуйста отправьте ваш проект на support@drive-software.com
со ссылкой на данную тему, постараюсь помочь.

Дмитрий, письмо с проектом отправил

Добрый вечер!

Дмитрий подскажите пожалуйста, в чем может быть проблема.
Есть отчет, выполняется через sql запрос

SELECT

StrukturnOtdelCO.NameStructOtd,
strftime('%d.%m.%Y',{DateTimePicker1}) as dateFrom,
strftime('%d.%m.%Y',{DateTimePicker2}) as dateTo,

(
SELECT TOTAL(Fine.FineMoney) FROM Fine WHERE
(date({DateTimePicker1}) <= date(Fine.DataFine) AND date({DateTimePicker2}) >= date(Fine.DataFine)) AND
Fine.id_StrukturnOtdelCO = StrukturnOtdelCO.id
),

(
SELECT TOTAL(Prize.PrizeMoney) FROM Prize WHERE
(date({DateTimePicker1}) <= date(Prize.DataPrize) AND date({DateTimePicker2}) >= date(Prize.DataPrize)) AND
Prize.id_StrukturnOtdelCO = StrukturnOtdelCO.id
),



(
SELECT TOTAL(Prize.PrizeMoney) FROM Prize WHERE
(date({DateTimePicker1}) <= date(Prize.DataPrize) AND date({DateTimePicker2}) >= date(Prize.DataPrize)) AND
Prize.id_StrukturnOtdelCO = StrukturnOtdelCO.id
)
-
(
SELECT TOTAL(Fine.FineMoney) FROM Fine WHERE
(date({DateTimePicker1}) <= date(Fine.DataFine) AND date({DateTimePicker2}) >= date(Fine.DataFine)) AND
Fine.id_StrukturnOtdelCO = StrukturnOtdelCO.id
),

StrukturnOtdelCO.id

FROM StrukturnOtdelCO

WHERE

CASE WHEN '{Edit1}'<>'' THEN StrukturnOtdelCO.NameStructOtd LIKE '%{Edit1}%' ELSE 1=1 END

И вроде бы все считает , до тех пор пока не меняешь период отбора, при открытии формы отчета выскакивает ошибка (см.скриншот), но как только обновляешь (перевыбираешь в форме отчета Report - ы , снова все считает и так до следующей смены периода отчета ) ?


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

(
SELECT TOTAL(Prize.PrizeMoney) FROM Prize WHERE
(date({DateTimePicker1}) <= date(Prize.DataPrize) AND date({DateTimePicker2}) >= date(Prize.DataPrize)) AND
Prize.id_StrukturnOtdelCO = StrukturnOtdelCO.id
)
-
(
SELECT TOTAL(Fine.FineMoney) FROM Fine WHERE
(date({DateTimePicker1}) <= date(Fine.DataFine) AND date({DateTimePicker2}) >= date(Fine.DataFine)) AND
Fine.id_StrukturnOtdelCO = StrukturnOtdelCO.id
),

итоговой суммы если она = 0 за указанный период , то вывод информации в отчет (либо таблицу) не производился. Т.е. в текущем отчете осуществляется поиск и вычисление суммы премий и штрафов, которые выписали структурные отделы, так вот если за указанный период отдел не штрафовал и не премировал ни кого , то и в отчете (либо в таблице) его быть не должно.
Надеюсь, ситуацию обрисовал понятно ))
За ранее спасибо !

yanikmi wrote:

А что если Яндекс диск установпить прилдожение на ПК - ПК яндекс должен распознать как свой диск

База замечательно будет работать через "облачный диск" Droopbox или Яндекс диск. Создаете папку, закидываете туда базу и предоставляете доступ к данной папке другим пользователям. Предварительно установив у них облачный   диск. Далее в программе указываете путь к базе в синхронизированную папку. Насчет чтения базы - работает без проблем, а вот изменение и внесение новых записей не знаю, не пробовал.

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

Вопрос, снят. Разобрался

Дмитрий,  спасибо большое за подсказку.

Теперь возник еще один вопрос про футер таблицы.
Почему при запросе поиска данных в Grid

SELECT

UserOP.Famyli,
UserOP.Name,
UserOP.Otchestvo,


(
SELECT TOTAL(Fine.FineMoney) FROM Fine WHERE
(date({DateTimePicker1}) <= date(Fine.DataFine) AND date({DateTimePicker2}) >= date(Fine.DataFine)) AND
Fine.id_UserOP = UserOP.id
),

(
SELECT TOTAL(Prize.PrizeMoney) FROM Prize WHERE
(date({DateTimePicker1}) <= date(Prize.DataPrize) AND date({DateTimePicker2}) >= date(Prize.DataPrize)) AND
Prize.id_UserOP = UserOP.id
),



(
SELECT TOTAL(Prize.PrizeMoney) FROM Prize WHERE
(date({DateTimePicker1}) <= date(Prize.DataPrize) AND date({DateTimePicker2}) >= date(Prize.DataPrize)) AND
Prize.id_UserOP = UserOP.id
)
-
(
SELECT TOTAL(Fine.FineMoney) FROM Fine WHERE
(date({DateTimePicker1}) <= date(Fine.DataFine) AND date({DateTimePicker2}) >= date(Fine.DataFine)) AND
Fine.id_UserOP = UserOP.id
),



UserOP.id

FROM UserOP

WHERE

CASE WHEN '{Edit1}'<>'' THEN UserOP.FIO LIKE '%{Edit1}%' ELSE 1=1 END

и последующей попытке вывести суммированное значение столбцов таблицы в футер через скрипт

frmSvodnayaTabl_TableGrid1_OnChange (Sender: string);
var
   i,c, q : integer;
begin
     q := 0;
        c := frmSvodnayaTabl.TableGrid1.RowCount - 1;
     for i := 0 to c do
         if ValidInt(frmSvodnayaTabl.TableGrid1.Cells[3, i]) then q := q + StrToInt(frmSvodnayaTabl.TableGrid1.Cells[3, i]);

     frmSvodnayaTabl.TableGrid1.Columns[3].Footer.Caption := IntToStr(q); // result
 end;

ничего не происходит, футер попросту не отображается. Ошибки при этом никакой не выдает. Где ошибся ?
За ранее спасибо !

DriveSoft wrote:

получить значение из футера в Edit можно так


Form1.Edit1.Text := FloatToStr(Form1.TableGrid1.Columns[0].Footer.FormulaValue);

Дмитрий, это я знаю . А вот как скажем суммировать значения из двух футеров разных гридов

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

Спасибо Дмитрий

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

DriveSoft wrote:

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

Дмитрий, вы  оказались правы. Спасибо за подсказку

Дмитрий, спасибо за исправления, но желаемый результат не достигнут.
Запрос успешно справляется со своей задачей но своеобразно ))
Т.е. есть условия поиска в Grid 'BK' , 'PBK' , 'U' , 'R'  скрипт находит допустим значения BK и U данные с этих строк он отправляет в нужные поля Edit , но если в Grid отсутствуют остальные значения условий поиска PBK и R , то скрипт просто дублирует вывод в поля Edit ранее найденные .

Всем добрый вечер!

Не подскажите где ошибка в запросе

procedure frmOP_OnShow (Sender: string; Action: string);
var
    i,c: integer;
begin
    c := frmOP.TableGrid1.RowCount - 1;
    for i := 0 to c do
begin
        if  Pos('BK', frmOP.TableGrid1.Cells[2,i])>0 then frmOP.TableGrid1.SelectedRow:=i;
    frmOP.EditFB.Text := SQLExecute ('SELECT Famyli FROM UserOP WHERE id='+frmOP.TableGrid1.sqlValue);
    frmOP.EditNB.Text := SQLExecute ('SELECT Name FROM UserOP WHERE id='+frmOP.TableGrid1.sqlValue);
    frmOP.EditOB.Text := SQLExecute ('SELECT Otchestvo FROM UserOP WHERE id='+frmOP.TableGrid1.sqlValue);
    frmOP.EditFIOB.Text := SQLExecute ('SELECT FIO FROM UserOP WHERE id='+frmOP.TableGrid1.sqlValue);
begin
    if  Pos('PBK', frmOP.TableGrid1.Cells[2,i])>0 then frmOP.TableGrid1.SelectedRow:=i;
    frmOP.EditFPB.Text := SQLExecute ('SELECT Famyli FROM UserOP WHERE id='+frmOP.TableGrid1.sqlValue);
    frmOP.EditNPB.Text := SQLExecute ('SELECT Name FROM UserOP WHERE id='+frmOP.TableGrid1.sqlValue);
    frmOP.EditOPB.Text := SQLExecute ('SELECT Otchestvo FROM UserOP WHERE id='+frmOP.TableGrid1.sqlValue);
    frmOP.EditFIOPB.Text := SQLExecute ('SELECT FIO FROM UserOP WHERE id='+frmOP.TableGrid1.sqlValue);
begin
     if  Pos('U', frmOP.TableGrid1.Cells[2,i])>0 then frmOP.TableGrid1.SelectedRow:=i;
    frmOP.EditFU.Text := SQLExecute ('SELECT Famyli FROM UserOP WHERE id='+frmOP.TableGrid1.sqlValue);
    frmOP.EditNU.Text := SQLExecute ('SELECT Name FROM UserOP WHERE id='+frmOP.TableGrid1.sqlValue);
    frmOP.EditOU.Text := SQLExecute ('SELECT Otchestvo FROM UserOP WHERE id='+frmOP.TableGrid1.sqlValue);
    frmOP.EditFIOU.Text := SQLExecute ('SELECT FIO FROM UserOP WHERE id='+frmOP.TableGrid1.sqlValue);
begin
    if  Pos('R', frmOP.TableGrid1.Cells[2,i])>0 then frmOP.TableGrid1.SelectedRow:=i;
    frmOP.EditFR.Text := SQLExecute ('SELECT Famyli FROM UserOP WHERE id='+frmOP.TableGrid1.sqlValue);
    frmOP.EditNR.Text := SQLExecute ('SELECT Name FROM UserOP WHERE id='+frmOP.TableGrid1.sqlValue);
    frmOP.EditOR.Text := SQLExecute ('SELECT Otchestvo FROM UserOP WHERE id='+frmOP.TableGrid1.sqlValue);
    frmOP.EditFIOR.Text := SQLExecute ('SELECT FIO FROM UserOP WHERE id='+frmOP.TableGrid1.sqlValue);
end;
end;
end;
end;
end;


begin

end.

Хотелось бы чтобы при обнаружении в указанном столбце Grid комбинации букв - происходил вывод информации из найденной строки, в определенные поля Edit. Есть несколько условий не знаю как правильно реализовать.
Ну и второй вопрос как вывести из Grid информацию в Edit, если имеется связь между таблицами. Сколько не пытался выводит только ID?
Прилагаю к сообщению тестовый проект с описанными выше вопросами.

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

100

(3 replies, posted in Russian)

DriveSoft wrote:

Компонент Counter в принципе и является полем Edit, какая именно стоит задача?

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