26 (edited by andrey_gb10 2015-04-20 12:02:05)

Re: Сделал проект (нужна помощь)

У меня реально не понятный глюк происходит (еще одну ерунду заметил в процессе) - вижу в гриде по услугам виды услуг заполнены- ну сохранены и выбраны... а когда вновь базу открываю - то вижу что они есть в гриде, а когда нажимаю исправить то в форме ввода в комбобоксе запись по видам услуг пустая... нажимаю сохранить так и сохраняет пустой... как быть? настройки сделаны нормальные в связи со справочником!???

Это скорее дело в платформе. Действий с настройками я не производил!

с уважением,
Андрей Александрович.

Re: Сделал проект (нужна помощь)

andrey_gb10
Пришлите пожалуйста ваш проект на support@drive-software.com

Dmitry.

Re: Сделал проект (нужна помощь)

Завтра с утра сразу как приеду на службу вышлю! Спасибо за встречные действия! Приятно иметь дело!

с уважением,
Андрей Александрович.

29 (edited by wertyby 2015-04-22 14:18:21)

Re: Сделал проект (нужна помощь)

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

В обоих случаях используется событие OnClick - может по этому не работает. Может можно попробовать разнести  по разным событиям или там все намного сложнее.?

Re: Сделал проект (нужна помощь)

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


допустим два скрипта

скрипт1:

procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);
var
   a: integer;
begin
   a := 1;
   ShowMessage(a);
end;

скрипт2:

procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);
var
   s: string;
begin
   s := 'Hello';
   ShowMessage(s);
end;


объеденены

procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);
var
   a: integer;
   s: string;
begin
   a := 1;
   ShowMessage(a);

   s := 'Hello';
   ShowMessage(s);
end;
Dmitry.

31 (edited by wertyby 2015-04-22 15:17:04)

Re: Сделал проект (нужна помощь)

Вот это я как бы и предполагал. Но как записать ну совсем не соображу.

// ПРОЦЕДУРА ОБРАБОТКИ ДЕЙСТВИЯ КНОПКИ УДАЛЕНИЯ МАТЕРИАЛА
procedure OTKAZNIE_MATERIALI_DELETE_OM_OnClick (Sender: string; var Cancel: boolean);
  var
  sYesNo: string;

begin

     sDeletedVidMat := OTKAZNIE_MATERIALI.REZULTAT.Cells[1, OTKAZNIE_MATERIALI.REZULTAT.SelectedRow];  //присваиваем переменной значение колонки 1 грида
     sDeletedMaterial := OTKAZNIE_MATERIALI.REZULTAT.Cells[2, OTKAZNIE_MATERIALI.REZULTAT.SelectedRow]; //присваиваем переменной значение колонки 2 грида
     sDeletedGod := OTKAZNIE_MATERIALI.REZULTAT.Cells[3, OTKAZNIE_MATERIALI.REZULTAT.SelectedRow];      //присваиваем переменной значение колонки 3 грида
     sDeletedFio := OTKAZNIE_MATERIALI.REZULTAT.Cells[5, OTKAZNIE_MATERIALI.REZULTAT.SelectedRow];      //присваиваем переменной значение колонки 5 грида
     sDeletedSluzbi := OTKAZNIE_MATERIALI.REZULTAT.Cells[6, OTKAZNIE_MATERIALI.REZULTAT.SelectedRow];   //присваиваем переменной значение колонки 6 грида
     sDeletedPrimechanie := OTKAZNIE_MATERIALI.REZULTAT.Cells[7, OTKAZNIE_MATERIALI.REZULTAT.SelectedRow]; //присваиваем переменной значение колонки 7 грида

     sDeletedDataVidachi := SQLExecute ('SELECT DATA_VIDACHI FROM OTKAZNIE WHERE id = ' + IntToStr(OTKAZNIE_MATERIALI.REZULTAT.dbItemID) ); //присваиваем переменной значение колонки с датой

     sDeletedID := IntToStr(OTKAZNIE_MATERIALI.REZULTAT.dbItemID);//присваиваем переменной значение идентификатора

     sDeletedNavsegda := SQLExecute ('SELECT NAVSEGDA FROM OTKAZNIE WHERE id = ' + IntToStr(OTKAZNIE_MATERIALI.REZULTAT.dbItemID) ); //присваиваем переменной знаяение чек бокса в колонке
        if sDeletedNavsegda then sYesNo :='1' else sYesNo := '0'; //приводим переменную к типу string
     sDeletedNavsegda :=sYesNo;                                   //присваиваем переменной полученное значение чек бокса типа string  (ИНОГО РЕШЕНИЯ ПОКА НЕ ПРИДУМАЛОСЬ)

end;

это основной код. А вот код который необходимо вставить в этот блок . Код с событием OnAfterClick кнопки удаления я думаю трогать не надо?


var
   i,c: integer;
   iColumn: integer;
begin
     iColumn :=OTKAZNIE_MATERIALI.REZULTAT.Columns.Count-1; 

     c := OTKAZNIE_MATERIALI.REZULTAT.RowCount - 1; 
     for i :=0 to c do
         if OTKAZNIE_MATERIALI.REZULTAT.Selected[i] then 
            SQLExecute('DELETE FROM otkaznie  WHERE id = ' + OTKAZNIE_MATERIALI.Cells[iColumn, i]); //otkaznie это имя таблицы в данном случае

    OTKAZNIE_MATERIALI.REZULTAT.dbUpdate;
end;

Код ниже оставляем как есть. Так ведь?

begin
     OTKAZNIE_MATERIALI.Options := OTKAZNIE_MATERIALI.Options + goMultiSelect;
end.


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

Re: Сделал проект (нужна помощь)

К сожалению по данным кускам кода не смогу точно подсказать, что и как должно быть.

Dmitry.

Re: Сделал проект (нужна помощь)

Ладно. Спасибо. Обойдемся и удалением одной записи :-). Не буду все усложнять.

34 (edited by wertyby 2015-04-23 09:41:35)

Re: Сделал проект (нужна помощь)

Дмитрий тогда может подскажете как переделать код проекта создания дубликата записи в таблице, с условием,  что в БД. присутвует поле "счетчик" и в грид выводится номер записи.
Вот пример вашего кода, но допустим что имеется столбец №4 и это "Couter ". При такой записи происходит просто создание полностью идентичного дубля, а  интересует возможность увеличения +1 к максимальному номеру.

procedure Form1_Button6_OnClick (Sender: string; var Cancel: boolean);
begin
      if Form1.GridEmployees.dbItemID<>-1 then //dbItemID вернет ид записи
    begin
        SQLExecute ('INSERT INTO employees (lastname, firstname, dateofbirth) SELECT lastname, firstname, dateofbirth FROM employees WHERE id='+Form1.GridEmployees.sqlValue );
        Form1.GridEmployees.dbUpdate; // Update TableGrid
        Form1.GridEmployees.dbItemID := Last_Insert_id('employees'); // select new record in TableGrid
    end;
end;

Вот так пытался я , но это неправильно:
/

procedure OTKAZNIE_MATERIALI_duplikate_OnClick (Sender: string; var Cancel: boolean);
     //begin
     //if OTKAZNIE_MATERIALI.REZULTAT.dbItemID<>-1 then
            //begin
            //SQLExecute ('INSERT INTO OTKAZNIE (MATERIAL, GOD, DATA_VIDACHI, FIO, PRIMECHANIE, id_SLUZBA, id_VIDMATERIALA, NAVSEGDA, record_count ) SELECT MATERIAL, GOD, DATA_VIDACHI, FIO, PRIMECHANIE, id_SLUZBA, id_VIDMATERIALA, NAVSEGDA, record_count FROM OTKAZNIE WHERE id='+OTKAZNIE_MATERIALI.REZULTAT.sqlValue,  );
            // OTKAZNIE_MATERIALI.REZULTAT.dbUpdate; // Update TableGrid
            // OTKAZNIE_MATERIALI.REZULTAT.dbItemID := Last_Insert_id('OTKAZNIE'); // select new record in TableGrid
            //end;
    //end;

Re: Сделал проект (нужна помощь)

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

procedure Form1_Button6_OnClick (Sender: string; var Cancel: boolean);
begin
      if Form1.GridEmployees.dbItemID<>-1 then //dbItemID вернет ид записи
    begin
        SQLExecute ('INSERT INTO employees (record_count, lastname, firstname, dateofbirth) SELECT ( SELECT MAX(record_count)+1 FROM employees), lastname, firstname, dateofbirth FROM employees WHERE id='+Form1.GridEmployees.sqlValue );
        Form1.GridEmployees.dbUpdate; // Update TableGrid
        Form1.GridEmployees.dbItemID := Last_Insert_id('employees'); // select new record in TableGrid
    end;
end;
Dmitry.

Re: Сделал проект (нужна помощь)

Спасибо работает. И снова благодарю за наилучшую поддержку.

Re: Сделал проект (нужна помощь)

Дмитрий а более общий вопрос:
1. имеем таблицу с полем счетчик для учета общего количества помещенных записей, без учета удаленных строк.
2. написаны скрипты для экспорта из CSV файла, где данное поле включено в запись базы. Проверка работоспособности проверялась при помощи экспортируемых в exceл записей из грида. (т.е. позиция по счетчику внесена в файл CSV) (без данной колонки в последующем после экспорта невозможно отредактировать запись, т.к. = ОШИБКА)
3. сейчас приходит понимание, что это наверное не совсем верно, т.к. в случае экспорта например сторонних данных нужно в ручную будет в   CSV файле прописывать нумерацию согласно данных счетчика внесенных в базу.
4. Также прописаны скрипты ведения логов базы данных, и при удалении записи из грида в данный момент удаляется и информация из позиции счетчика, т.к. данная позиция вынесена в грид для возможности экспорта в Exel (а он забирает автоматически только те колонки что перечислены в гриде),  и соответственно значение по счетчику минусуется каждый раз на -1. 

Вопрос -  как логично перенастроить все данные, чтобы возможность экспорта в excel с колонкой "счетчика" осталась, и при этом убрать информацию о счетчике  из грида, чтобы данная ячейка  не удалялась при удалении записи и всегда считалась +1.

Немного сумбурно конечно, но по другому не придумал как описать :-)

Re: Сделал проект (нужна помощь)

wertyby
К сожалению не смогу помочь с данным вопросом.

Dmitry.

Re: Сделал проект (нужна помощь)

Опять я. Дмитрий а как реализовать функцию которая могла бы добавить новую строку в таблице в определенном месте? Сегодня заметил что пропустил одну запись которые идут строго по порядку и пришлось около 20 строк удалять и переписывать заново, но уже с добавлением пропущенной. Спасибо за ответ.

Re: Сделал проект (нужна помощь)

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

Dmitry.

Re: Сделал проект (нужна помощь)

т.е. из базы никак? только программами типа SQLiteStudio если записей очень много и половину из них нужно сдвинуть вниз на 1 позицию освободив одно Id?

Re: Сделал проект (нужна помощь)

Боюсь никак, такая операция в принципе не применима к записям БД, видимо у вас что то неверно задумано в проекте.

Dmitry.

Re: Сделал проект (нужна помощь)

Дмитрий тогда такой вопрос - если в грид не выводится значение поля счетчик, и запись удаляется (именно через меню грид, удалить запись), то тогда получается строка в таблице базы данных (не гриде) все равно остается? т.к. значение поля не удалено, и отсчет продолжается, или у Вас данная функция реализована иным образом.
(вопрос связан с тем, что если строка остается, то база постоянно растет, даже и при удалении каких либо записей.)

Re: Сделал проект (нужна помощь)

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

Dmitry.

Re: Сделал проект (нужна помощь)

Дмитрий а может знаете как можно реализовать при вводе даты в компоненте DateTimePicker (вручную), автоматический переход между позициями дд.мм.гггг (т.е. ввел значение даты курсор переместился на месяц а затем на год)?
(это млин привычка к таким базам и не хочется переключаться на мышь для выбора даты)

Поле Edit совсем ни как нельзя настроить для помещения в базу информации с датой?

Re: Сделал проект (нужна помощь)

wertyby wrote:

Дмитрий а может знаете как можно реализовать при вводе даты в компоненте DateTimePicker (вручную), автоматический переход между позициями дд.мм.гггг (т.е. ввел значение даты курсор переместился на месяц а затем на год)?
(это млин привычка к таким базам и не хочется переключаться на мышь для выбора даты)

Поле Edit совсем ни как нельзя настроить для помещения в базу информации с датой?

Update - в принципе вопрос наверное не корректен. Нашел что TextBox у Вас совсем дату не принимает.

Тогда вопрос можно ли сделать так чтобы DateTimePicker отображал только информацию аналогичную TextBox с маской ввода. (отключить чекбокс и возможность выбора даты через компонент), т.е. чтобы она вводилась только вручную?

Re: Сделал проект (нужна помощь)

wertyby wrote:

Дмитрий а может знаете как можно реализовать при вводе даты в компоненте DateTimePicker (вручную), автоматический переход между позициями дд.мм.гггг (т.е. ввел значение даты курсор переместился на месяц а затем на год)?
(это млин привычка к таким базам и не хочется переключаться на мышь для выбора даты)

Поле Edit совсем ни как нельзя настроить для помещения в базу информации с датой?

в принципе он перемещается автоматически, после ввода даты, нажмите точку.


DateTimePicker к сожалению не может быть как компонент Edit с маской ввода.



В принципе с помощью скрипта можно организовать ввод дату в компонент Edit с маской: 00.00.0000;0;_
для этого на событии OnClick у кнопки сохранения записи
необходимо преобразовать значение текста в дату (EncodeDate)
затем эту дату присвоить невидимому компоненту DateTimePicker, с которого уже и будет сохраняться дата в базу.

Dmitry.

Re: Сделал проект (нужна помощь)

Спасибо, вчера весь день почти шерстил интернет по данному вопросу, и даже в паре мест видел о преобразовании с помощью (EncodeDate), поэтому буду дальше рыть в этом направлении.

Re: Сделал проект (нужна помощь)

Не подчиняется мне данная возможность. Два вечера в никуда :- ((((. Уже и просит стесняюсь, но если будет минутка может кто сможет набросать  насчет присвоения значения в виде даты компоненту DateTimePicker. Дмитрия и отвлекать не сильно хочется.

Re: Сделал проект (нужна помощь)

wertyby wrote:

Не подчиняется мне данная возможность. Два вечера в никуда :- ((((. Уже и просит стесняюсь, но если будет минутка может кто сможет набросать  насчет присвоения значения в виде даты компоненту DateTimePicker. Дмитрия и отвлекать не сильно хочется.

Сделал пример для вас.

Post's attachments

Attachment icon Employees date in TextBox.zip 6.31 kb, 476 downloads since 2015-05-05 

Dmitry.