1 (edited by ZBear 2016-01-14 10:36:02)

Topic: Нужна помощь

Не могу вставить значение в ячейку. Ругается на несоответствие форматов, перепробовал уже все варианты. Может я что-то не так делаю

procedure main_mainGrid_OnChange (Sender: string; Action: string);
var
     i, mNow, yNow, c, q, e : integer;
     iRow, iCol : integer;
     k : integer;
     DD, YY, MM: word;
begin

     c := main.mainGrid.RowCount - 1;
     i := main.mainGrid.Columns.Count-1;
     for iRow := 0 to c do
     for iCol := 0 to i do

     begin
     DecodeDate(Now, YY, MM, DD);  // декодируем текущую дату
     mNow := StrToInt ((IntToStr(MM))); // извлекаем месяц
     yNow := StrToInt ((IntToStr(YY))); // извлекаем год
     q := StrToInt (main.mainGrid.Cells[13,iRow]); // определяем квартал поверки
     e := StrToInt (main.mainGrid.Cells[14,iRow]); // определяем год поверки

     if  (mNow >=1) and (mNow <=3)  then k := 1; // определяем текущий квартал
     if  (mNow >=4) and (mNow <=6)  then k := 2;
     if  (mNow >=7) and (mNow <=9)  then k := 3 ;
     if  (mNow >=10) and (mNow <=12)  then k := 4;

     if (e < yNow) then
                     begin
                       main.mainGrid.Cell[iCol,iRow].Color := clRed; // если год меньше текущего
                       main.mainGrid.Cell[15,iRow] := 'Просрочен';   //<= Не работает
                     end;
     if (e = yNow)and (q < k) then main.mainGrid.Cell[iCol,iRow].Color := clRed;  // год совпадает квартал меньше текущего
     if (e = yNow)and (q = k) then main.mainGrid.Cell[iCol,iRow].Color := clYellow; // квартал и год совпадает с текущим
     if (e = yNow)and (q - k = 1) then main.mainGrid.Cell[iCol,iRow].Color := clGreen; // квартал и год совпадает с текущим


           begin
            main.Edit3.Text := 'Списан';
            main.Edit4.Text := 'На списание';
                begin
                main.mainGrid.BestFitColumns(bfBoth); // автоподбор ширины по содержимому ячеек и названия колонок
                end;
           end;
     end;
end;

проект во вложении

в принципе мне нужен просто какой-то идентификатор по условию что-бы осуществлять по нему выборку(поиск)

Re: Нужна помощь

к сожалению ваш проект отсутствует, приложите его как zip файл без exe и dll

Dmitry.

Re: Нужна помощь

отправляю

Post's attachments

Attachment icon SI.zip 203.66 kb, 302 downloads since 2016-01-15 

Re: Нужна помощь

И ещё вопрос.
Добавляю в основную базу поле ИЗОБРАЖЕНИЕ, при открытии формы для редактирования или просмотра записи появляется ошибка - #42S22Unknown column 'SI.foto_filename' in 'field list'
Добавляю в любой справочник - всё нормально

Re: Нужна помощь

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

Dmitry.

Re: Нужна помощь

1. Добавляю поле.
2. Запускаю проект.
3. Открываю прибор через форму редактирования.
4. Появляется ошибка.


По первому вопросу есть какие-нибудь предложения?

Re: Нужна помощь

Попробуйте этот скрипт

procedure main_mainGrid_OnChange (Sender: string; Action: string);
var
     i, mNow, yNow, c, q, e : integer;
     iRow, iCol : integer;
     k : integer;
     DD, YY, MM: word;
begin
    c := main.mainGrid.RowCount - 1;
    i := main.mainGrid.Columns.Count-1;
    for iRow := 0 to c do
    begin
        if (not ValidInt(main.mainGrid.Cells[13,iRow])) or (not ValidInt(main.mainGrid.Cells[14,iRow])) then continue;
        for iCol := 0 to i do
        begin
            q := StrToInt (main.mainGrid.Cells[13,iRow]); // определяем квартал поверки
            e := StrToInt (main.mainGrid.Cells[14,iRow]); // определяем год поверки

            DecodeDate(Now, YY, MM, DD);  // декодируем текущую дату
            mNow := StrToInt ((IntToStr(MM))); // извлекаем месяц
            yNow := StrToInt ((IntToStr(YY))); // извлекаем год

            if  (mNow >=1) and (mNow <=3)  then k := 1; // определяем текущий квартал
            if  (mNow >=4) and (mNow <=6)  then k := 2;
            if  (mNow >=7) and (mNow <=9)  then k := 3 ;
            if  (mNow >=10) and (mNow <=12)  then k := 4;

            if (e < yNow) then main.mainGrid.Cell[iCol,iRow].Color := clRed; // если год меньше текущего
            if (e = yNow)and (q < k) then main.mainGrid.Cell[iCol,iRow].Color := clRed;  // год совпадает квартал меньше текущего
            if (e = yNow)and (q = k) then main.mainGrid.Cell[iCol,iRow].Color := clYellow; // квартал и год совпадает с текущим
            if (e = yNow)and (q - k = 1) then main.mainGrid.Cell[iCol,iRow].Color := clGreen; // квартал и год совпадает с текущим

            main.Edit3.Text := 'Списан';
            main.Edit4.Text := 'На списание';
            main.mainGrid.BestFitColumns(bfBoth); // автоподбор ширины по содержимому ячеек и названия колонок
         end;
     end;
end;

я добавил проверку чисел в ячейках, что они являются числами, ведь там может быть и пустое значение, что вызывает ошибку
if (not ValidInt(main.mainGrid.Cells[13,iRow])) or (not ValidInt(main.mainGrid.Cells[14,iRow])) then continue;

Dmitry.

Re: Нужна помощь

ZBear wrote:

1. Добавляю поле.
2. Запускаю проект.
3. Открываю прибор через форму редактирования.
4. Появляется ошибка.


По первому вопросу есть какие-нибудь предложения?

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


открой проект в данной версии, затем удалите поле foto и снова его создайте.

Dmitry.

9 (edited by ZBear 2016-01-19 06:05:20)

Re: Нужна помощь

Спасибо, ошибки с изображением больше нет. Скрипт тоже стал более стабилен (иногда были ошибки).
Не работает такой момент:

                 begin
                       main.mainGrid.Cell[iCol,iRow].Color := clRed; // если год меньше текущего
                       main.mainGrid.Cell[15,iRow] := 'Просрочен';   //<= Не работает
                     end;

Хотелось что бы при определённом условии (в данном случае истёкший срок) заполнялось поле в таблице для осуществления поиска по этому идентификатору.


Всё, не актуально. Сделал просто поиск по дате с фильтром.

Re: Нужна помощь

Изображение вынес в отдельную таблицу-справочник.
Теперь при добавлении возникает такая ошибка (во вложении).

Post's attachments

Attachment icon SI.rar 1.13 mb, 308 downloads since 2016-01-19 

Re: Нужна помощь

ZBear wrote:

Изображение вынес в отдельную таблицу-справочник.
Теперь при добавлении возникает такая ошибка (во вложении).

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

Dmitry.

Re: Нужна помощь

В принципе с ошибкой решил. Переработал всю структуру базы.
Появился новый вопрос. Существует таблица:
Тип СИ                      Модель              Номер    и   т.д.
Манометр                 МП-4                     123              .....                     
Манометр                 МП-4                     145              .....
Манометр                 МП-3                      321            ........
Датчик давления    Метран-150          231            ..........

Необходимо подсчитать и вывести в отдельной таблице количество каждых Тип-Модель
В таком виде

Тип СИ                    Модель                Кол-во
Манометр                 МП-4                      2  шт.         
Манометр                 МП-3                      1 шт.
Датчик давления    Метран-150          1 шт.

Re: Нужна помощь

ZBear
Можно, необходимо использовать SQL запрос с группировкой (GROUP BY), пример:

SELECT
category.catname,
COUNT(employees.id_category)

FROM employees

LEFT OUTER JOIN category ON category.id=employees.id_category

GROUP BY employees.id_category

также можете скачать проект с примером, нажмите кнопку "Show by categories" в данном проекте

Post's attachments

Attachment icon Employees - group by category.zip 53.04 kb, 291 downloads since 2016-01-22 

Dmitry.

Re: Нужна помощь

Спасибо за помощь.
Нашёл ещё ошибку (или я что-то не так делаю smile ), сделал связанные списки, на SQLite работает, на MySQL выходят ошибки главной таблици

Post's attachments

Attachment icon SI.rar 524.51 kb, 288 downloads since 2016-01-28 

Re: Нужна помощь

ZBear wrote:

Спасибо за помощь.
Нашёл ещё ошибку (или я что-то не так делаю smile ), сделал связанные списки, на SQLite работает, на MySQL выходят ошибки главной таблици

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

Dmitry.

Re: Нужна помощь

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

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

Re: Нужна помощь

ZBear wrote:

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

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


У меня возникает также ошибка в событии procedure main_mainGrid_OnChange (Sender: string; Action: string);
испавьте эту строку

if (not ValidInt(main.mainGrid.Cells[14,iRow])) or (not ValidInt(main.mainGrid.Cells[15,iRow])) then continue;

По поводу второй ошибки, программа не умеет автоматически связывать между собой те таблицы, между которыми нет связи, в вашем случае это таблицы SI и apparats, они связаны через таблицу posit, поэтому вы должны в таблице posit создать вычисляемое поле, в котором будет выведено необходимое значение из таблицы apparats и уже это вычисляемое поле необходимо выводить в грид.


Выч. поле для таблицы posit, которое выводит значение из apparats.apparat

(SELECT apparats.apparat FROM apparats WHERE apparats.id=posit.id_apparats)
Dmitry.

18 (edited by ZBear 2016-02-01 04:17:21)

Re: Нужна помощь

По поводу второй ошибки, программа не умеет автоматически связывать между собой те таблицы, между которыми нет связи, в вашем случае это таблицы SI и apparats, они связаны через таблицу posit, поэтому вы должны в таблице posit создать вычисляемое поле, в котором будет выведено необходимое значение из таблицы apparats и уже это вычисляемое поле необходимо выводить в грид.


Выч. поле для таблицы posit, которое выводит значение из apparats.apparat

(SELECT apparats.apparat FROM apparats WHERE apparats.id=posit.id_apparats)


И ещё вопрос, как связать три таблици SI->posit->apparats->plan_gp ?

Re: Нужна помощь

ZBear

Выч. поле для таблицы posit

(
SELECT plan_gp.plans FROM plan_gp

LEFT OUTER JOIN apparats ON apparats.id_plan_gp=plan_gp.id

WHERE apparats.id=posit.id_apparats
)
Dmitry.

Re: Нужна помощь

Что бы не плодить тем напишу здесь. Как снять ограничение на импорт файлов в базу MySQL? У меня грузит файлы до 4 мб, нужно в пределах 15

Re: Нужна помощь

ZBear wrote:

Что бы не плодить тем напишу здесь. Как снять ограничение на импорт файлов в базу MySQL? У меня грузит файлы до 4 мб, нужно в пределах 15

Пожалуйста опишите используемый вами метод для импорта файла в базу.

Dmitry.

Re: Нужна помощь

Не правильно сформулировал вопрос. Не импорт файла в базу, а сохранение файла в базу.

Re: Нужна помощь

ZBear wrote:

Не правильно сформулировал вопрос. Не импорт файла в базу, а сохранение файла в базу.

Если MySQL установлен на Windows, тогда найдите файл my.ini в папке с установленной MySQL, откройте его в текстовом редакторе, найдите параметр
max_allowed_packet

и отредактируйте его значение, например установив ограничение в 16 мегабайт.

max_allowed_packet=16M

затем чтобы изменения вступили в силу, перезагрузите ПК


для Unix систем, файл находится
/etc/my.cnf или /etc/mysql/my.cnf

Dmitry.

Re: Нужна помощь

Увеличил до 512М. При загрузке файла в 32М выдаёт ошибку как во вложении

Post's attachments

Attachment icon Безымянный.jpg 74.24 kb, 188 downloads since 2016-02-19 

Re: Нужна помощь

ZBear wrote:

Увеличил до 512М. При загрузке файла в 32М выдаёт ошибку как во вложении

Для хранения файлов в MySQL по умолчанию используется тип поля MEDIUMBLOB, который позволяет загружать файлы до 16 мб.


С помощью программ для администрирования MySQL (например MySQL Workbench) вы можете изменить необходимое поле на тип LONGBLOB, что позволит сохранять файл до 4 гб.

Dmitry.