1 (edited by kunar80 2014-11-29 10:10:27)

Topic: Импорт и журнал действий. Как связать?

Это запись кода импорта данных через файл CSV в моём проекте:

//============== ИМПОРТ_1 =================================================
procedure frmChoice_bImportNAF_OnClick (Sender: string; var Cancel: boolean);
var
   OpenDialog: TOpenDialog;
   sl: TStringList;
   arrStr: array of string;

   i,c: integer;

   sid_sked: string; //опись
   sid_type: string; //тип дела
   sDocNum: string; //номер дела
   sDocName: string; //название
   sid_year: string; //год формирования
   sBeginDate: string; //начато
   sEndDate: string; //окончено
   sid_period: string; //срок хранения
   sPages: string; //количество страниц
   sid_room: string; //комната
   sid_scaff: string; //стеллаж
   sid_rack: string; //полка
   sNote: string; //примечание

   YY, MM, DD: string;
begin
     OpenDialog := TOpenDialog.Create(frmChoice);
     OpenDialog.InitialDir := 'd:\Archive 1.01 Import\ImportCSV';
     if OpenDialog.Execute then
     begin
          sl := TStringList.Create;
          sl.LoadFromFile (OpenDialog.FileName); ///открытие файла

          c := sl.Count - 1;
          for i := 1 to c do
          begin
               arrStr := SplitString(sl[i], ';');

               //0 sid_sked
               if arrStr[0] <> '' then
               begin
                    sid_sked := SQLExecute ('SELECT id FROM sked WHERE sked LIKE "' + arrStr[0] +'"');
                    if sid_sked = '' then
                    begin
                         SQLExecute ('INSERT INTO sked (sked) VALUES ("'+ arrStr[0] +'");');
                         sid_sked := IntToStr(Last_Insert_id('sked'));
                         if sid_sked = '-1' then sid_sked := 'NULL';
                    end;
               end else sid_sked := 'NULL';

              //1 sid_type
               if arrStr[1] <> '' then
               begin
                    sid_type := SQLExecute ('SELECT id FROM type WHERE type LIKE "' + arrStr[1] +'"');
                    if sid_type = '' then
                    begin
                         SQLExecute ('INSERT INTO type (type) VALUES ("'+ arrStr[1] +'");');
                         sid_type := IntToStr(Last_Insert_id('type'));
                         if sid_type = '-1' then sid_type := 'NULL';
                    end;
               end else sid_type := 'NULL';

               //2 sDocNum
               if arrStr[2]<>'' then sDocNum := '"'+arrStr[2]+'"' else sDocNum := 'NULL';

               //3 sDocName
               if arrStr[3]<>'' then sDocName := '"' +  ReplaceStr(arrStr[3], '"', '') + '"' else sDocName := 'NULL';

               //4 sid_year
               if arrStr[4] <> '' then
               begin
                    sid_year := SQLExecute ('SELECT id FROM year WHERE year LIKE "' + arrStr[4] +'"');
                    if sid_year = '' then
                    begin
                         SQLExecute ('INSERT INTO year (year) VALUES ("'+ arrStr[4] +'");');
                         sid_year := IntToStr(Last_Insert_id('year'));
                         if sid_year = '-1' then sid_year := 'NULL';
                    end;
               end else sid_year := 'NULL';

               //5 sBeginDate
               if arrStr[5]<>'' then
                  sBeginDate := '"'+ FormatDateTime('yyyy-MM-DD 00:00:00.000', StrToDate(arrStr[5])) + '"'
                  else sBeginDate := 'NULL';

               //6 sEndDate
               if arrStr[6]<>'' then
                  sEndDate := '"'+ FormatDateTime('yyyy-MM-DD 00:00:00.000', StrToDate(arrStr[6])) + '"'
                  else sEndDate := 'NULL';

               //7 sid_period
               if arrStr[7] <> '' then
               begin
                    sid_period := SQLExecute ('SELECT id FROM period WHERE period LIKE "' + arrStr[7] +'"');
                    if sid_period = '' then
                    begin
                         SQLExecute ('INSERT INTO period (period) VALUES ("'+ arrStr[7] +'");');
                         sid_period := IntToStr(Last_Insert_id('period'));
                         if sid_period = '-1' then sid_period := 'NULL';
                    end;
               end else sid_period := 'NULL';

               //8 sPages
               if arrStr[8]<>'' then sPages := '"'+arrStr[8]+'"' else sPages := 'NULL';

               //9 sid_room
               if arrStr[9] <> '' then
               begin
                    sid_room := SQLExecute ('SELECT id FROM room WHERE room LIKE "' + arrStr[9] +'"');
                    if sid_room = '' then
                    begin
                         SQLExecute ('INSERT INTO room (room) VALUES ("'+ arrStr[9] +'");');
                         sid_room := IntToStr(Last_Insert_id('room'));
                         if sid_room = '-1' then sid_room := 'NULL';
                    end;
               end else sid_room := 'NULL';

               //10 sid_scaff
               if arrStr[10] <> '' then
               begin
                    sid_scaff := SQLExecute ('SELECT id FROM scaff WHERE scaff LIKE "' + arrStr[10] +'"');
                    if sid_scaff = '' then
                    begin
                         SQLExecute ('INSERT INTO scaff (scaff) VALUES ("'+ arrStr[10] +'");');
                         sid_scaff := IntToStr(Last_Insert_id('scaff'));
                         if sid_scaff = '-1' then sid_scaff := 'NULL';
                    end;
               end else sid_scaff := 'NULL';

               //11 sid_rack
               if arrStr[11] <> '' then
               begin
                    sid_rack := SQLExecute ('SELECT id FROM rack WHERE rack LIKE "' + arrStr[11] +'"');
                    if sid_rack = '' then
                    begin
                         SQLExecute ('INSERT INTO rack (rack) VALUES ("'+ arrStr[11] +'");');
                         sid_rack := IntToStr(Last_Insert_id('rack'));
                         if sid_rack = '-1' then sid_rack := 'NULL';
                    end;
               end else sid_rack := 'NULL';

               //12 sNote
               if arrStr[12]<>'' then sNote := '"'+arrStr[12]+'"' else sNote := 'NULL';

               SQLExecute ('INSERT INTO one (id_sked, id_type, [docNum], [docName], id_year, [beginDate], [endDate], id_period, [pages], id_room, id_scaff, id_rack, [note]) VALUES ('+
               sid_sked +','+
               sid_type +','+
               sDocNum +','+
               sDocName +','+
               sid_year +','+
               sBeginDate +','+
               sEndDate +','+
               sid_period +','+
               sPages +','+
               sid_room +','+
               sid_scaff +','+
               sid_rack +','+
               sNote +
               ');');

////////////////////////////////////////////////
//////     frmChoice.bEditNAF.Click;
//////     frmDocProcessingNAF.bOK1.Click;
////////////////////////////////////////////////

               frmChoice.Label8.Caption := IntToStr(i) + ' з ' + IntToStr(c);
               Application.ProcessMessages;
          end;

          sl.Free;
          UpdateDatabase('sked');
          UpdateDatabase('type');
          UpdateDatabase('year');
          UpdateDatabase('period');
          UpdateDatabase('room');
          UpdateDatabase('scaff');
          UpdateDatabase('rack');
          frmChoice.TableGrid1.dbUpdate;
     end;
     OpenDialog.Free;
begin
     frmChoice.bSearch1.Click;  ////!!!!!Нажатие на кнопку ПОИСК (при этом видимые записи таблицы обновляются)
end;

end;
//====================================================================

Хочется, чтобы вновь добавленные импортом записи попадали ещё и в журнал действий со статусом "Добавлено", как при добавлении по одной через кнопку "Добавить". Попытаюсь объяснить, зачем мне это всё. После редактирования записи, сделанной через кнопку "Добавить", в журнале есть первоначальные данные (статус "Добавлено") и изменённые данные (статус "Изменено"). Т.е. имеется возможность определить, что же конкретно изменилось в этой записи. После редактирования записи, сделанной импортом, такой возможности нет, так как в журнале отсутствует первоначальная запись.
Думаю, что скорее всего идею можно реализовать через кнопку редактирования записи. В код добавил (в коде импорта выделено):

     frmChoice.bEditNAF.Click;
     frmDocProcessingNAF.bOK1.Click;

где bEditNAF - кнопка редактирования записи,  frmDocProcessingNAF - форма добавления/редактирования. bOK1 изменяет выбранную запись и записывает в журнал (для неё создано соответствующее событие). Вставил именно в это место кода потому, что процедура записи одной строки завершилась и запись следующей строки ещё не началась.
Код для записи в журнал записан так:

//==== Новая запись =====================================================
procedure frmDocProcessingNAF_bOK1_OnAfterClick (Sender: string);
var
   sCurrentDate: string;
   sUser: string;
   sForm: string;
   sOperation: string;

   sSked: string;
   sType: string;
   sDocNum: string;
   sDocName: string;
   sYear: string;
   sBeginDate: string;
   sEndDate: string;
   sPeriod: string;
   sPages: string;
   sRoom: string;
   sScaff: string;
   sRack: string;
   sNote: string;
   sFileYes: string;

begin
     sCurrentDate := '"' + FormatDateTime('yyyy-MM-DD hh:nn:ss.000', now) + '"';
     sUser  := '"'+frmDocProcessingNAF.user.Text+'"';
     sForm  := '"'+frmDocProcessingNAF.form.Text+'"';

     sSked   := '"'+frmDocProcessingNAF.cBoxSked.Text+'"';
     sType   := '"'+frmDocProcessingNAF.cBoxType.Text+'"';
     sDocNum  := '"'+frmDocProcessingNAF.edNum.Text+'"';
     sDocName  := '"'+frmDocProcessingNAF.edName.Text+'"';
     sYear  := '"'+frmDocProcessingNAF.cBoxYear.Text+'"';
     sPeriod  := '"'+frmDocProcessingNAF.cBoxPeriod.Text+'"';
     sPages  := '"'+frmDocProcessingNAF.edPages.Text+'"';
     sRoom  := '"'+frmDocProcessingNAF.cBoxRoom.Text+'"';
     sScaff  := '"'+frmDocProcessingNAF.cBoxScaff.Text+'"';
     sRack  := '"'+frmDocProcessingNAF.cBoxRack.Text+'"';
     sNote  := '"'+frmDocProcessingNAF.mNote.Text+'"';
     sFileYes  := '"'+frmDocProcessingNAF.DBFileNAF.Text+'"';

     if frmDocProcessingNAF.dtpBegin.Checked then
          sBeginDate  := '"' + FormatDateTime('DD.MM.yyyy', frmDocProcessingNAF.dtpBegin.Date) + '"'
          else sBeginDate := 'NULL';

     if frmDocProcessingNAF.dtpEnd.Checked then
          sEndDate  := '"' + FormatDateTime('DD.MM.yyyy', frmDocProcessingNAF.dtpEnd.Date) + '"'
          else sEndDate := 'NULL';

     if sLastActionForm = 'NewRecord' then sOperation := '"Додано"';
     if sLastActionForm = 'ShowRecord' then sOperation := '"Змінено"';

     SQLExecute ('INSERT INTO logNAF (date, user, form, operation, sked, type, docNum, docName, year, beginDate, endDate, period, pages, room, scaff, rack, note, FileYes)' +
     'VALUES ('+sCurrentDate+', '+sUser+', '+sForm+','+sOperation+','+sSked+','+sType+','+sDocNum+','+sDocName+', '+sYear+', '+sBeginDate+', '+sEndDate+', '+sPeriod+', '+sPages+', '+sRoom+', '+sScaff+', '+sRack+', '+sNote+', '+sFileYes+')');
     frmActions.tgActions.dbUpdate;
end;

Проблема: для frmChoice.bEditNAF.Click нужно сначала выбрать запись. Как сфокусировать действие этого кода на каждой вновь записанной строке?
Т.е., попросту говоря, мне нужно объединить в моём проекте вот эти два тестовые проекта:
http://myvisualdatabase.com/forum/misc. … download=1
http://myvisualdatabase.com/forum/misc. … download=1

Не боги горшки лепят!

Re: Импорт и журнал действий. Как связать?

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

//============== ИМПОРТ_1 =================================================
procedure frmChoice_bImportNAF_OnClick (Sender: string; var Cancel: boolean);
var
   OpenDialog: TOpenDialog;
   sl: TStringList;
   arrStr: array of string;

   i,c: integer;

   sid_sked: string; //опись
   sid_type: string; //тип дела
   sDocNum: string; //номер дела
   sDocName: string; //название
   sid_year: string; //год формирования
   sBeginDate: string; //начато
   sEndDate: string; //окончено
   sid_period: string; //срок хранения
   sPages: string; //количество страниц
   sid_room: string; //комната
   sid_scaff: string; //стеллаж
   sid_rack: string; //полка
   sNote: string; //примечание

   YY, MM, DD: string;



   sCurrentDate: string;
   sForm: string;
   sOperation: string;

   sSked: string;
   sType: string;
   sYear: string;
   sPeriod: string;
   sRoom: string;
   sScaff: string;
   sRack: string;
   sFileYes: string;

begin
     OpenDialog := TOpenDialog.Create(frmChoice);
     OpenDialog.InitialDir := 'd:\Archive 1.01\ImportCSV';
     if OpenDialog.Execute then
     begin
          sl := TStringList.Create;
          sl.LoadFromFile (OpenDialog.FileName); ///открытие файла

          c := sl.Count - 1;
          for i := 1 to c do
          begin
               arrStr := SplitString(sl[i], ';');

               //0 sid_sked
               if arrStr[0] <> '' then
               begin
                    sid_sked := SQLExecute ('SELECT id FROM sked WHERE sked LIKE "' + arrStr[0] +'"');
                    if sid_sked = '' then
                    begin
                         SQLExecute ('INSERT INTO sked (sked) VALUES ("'+ arrStr[0] +'");');
                         sid_sked := IntToStr(Last_Insert_id('sked'));
                         if sid_sked = '-1' then sid_sked := 'NULL';
                    end;
               end else sid_sked := 'NULL';

              //1 sid_type
               if arrStr[1] <> '' then
               begin
                    sid_type := SQLExecute ('SELECT id FROM type WHERE type LIKE "' + arrStr[1] +'"');
                    if sid_type = '' then
                    begin
                         SQLExecute ('INSERT INTO type (type) VALUES ("'+ arrStr[1] +'");');
                         sid_type := IntToStr(Last_Insert_id('type'));
                         if sid_type = '-1' then sid_type := 'NULL';
                    end;
               end else sid_type := 'NULL';

               //2 sDocNum
               if arrStr[2]<>'' then sDocNum := '"'+arrStr[2]+'"' else sDocNum := 'NULL';

               //3 sDocName
               if arrStr[3]<>'' then sDocName := '"' +  ReplaceStr(arrStr[3], '"', '""') + '"' else sDocName := 'NULL';

               //4 sid_year
               if arrStr[4] <> '' then
               begin
                    sid_year := SQLExecute ('SELECT id FROM year WHERE year LIKE "' + arrStr[4] +'"');
                    if sid_year = '' then
                    begin
                         SQLExecute ('INSERT INTO year (year) VALUES ("'+ arrStr[4] +'");');
                         sid_year := IntToStr(Last_Insert_id('year'));
                         if sid_year = '-1' then sid_year := 'NULL';
                    end;
               end else sid_year := 'NULL';

               //5 sBeginDate
               if arrStr[5]<>'' then
                  sBeginDate := '"'+ FormatDateTime('yyyy-MM-DD 00:00:00.000', StrToDate(arrStr[5])) + '"'
                  else sBeginDate := 'NULL';

               //6 sEndDate
               if arrStr[6]<>'' then
                  sEndDate := '"'+ FormatDateTime('yyyy-MM-DD 00:00:00.000', StrToDate(arrStr[6])) + '"'
                  else sEndDate := 'NULL';

               //7 sid_period
               if arrStr[7] <> '' then
               begin
                    sid_period := SQLExecute ('SELECT id FROM period WHERE period LIKE "' + arrStr[7] +'"');
                    if sid_period = '' then
                    begin
                         SQLExecute ('INSERT INTO period (period) VALUES ("'+ arrStr[7] +'");');
                         sid_period := IntToStr(Last_Insert_id('period'));
                         if sid_period = '-1' then sid_period := 'NULL';
                    end;
               end else sid_period := 'NULL';

               //8 sPages
               if arrStr[8]<>'' then sPages := '"'+arrStr[8]+'"' else sPages := 'NULL';

               //9 sid_room
               if arrStr[9] <> '' then
               begin
                    sid_room := SQLExecute ('SELECT id FROM room WHERE room LIKE "' + arrStr[9] +'"');
                    if sid_room = '' then
                    begin
                         SQLExecute ('INSERT INTO room (room) VALUES ("'+ arrStr[9] +'");');
                         sid_room := IntToStr(Last_Insert_id('room'));
                         if sid_room = '-1' then sid_room := 'NULL';
                    end;
               end else sid_room := 'NULL';

               //10 sid_scaff
               if arrStr[10] <> '' then
               begin
                    sid_scaff := SQLExecute ('SELECT id FROM scaff WHERE scaff LIKE "' + arrStr[10] +'"');
                    if sid_scaff = '' then
                    begin
                         SQLExecute ('INSERT INTO scaff (scaff) VALUES ("'+ arrStr[10] +'");');
                         sid_scaff := IntToStr(Last_Insert_id('scaff'));
                         if sid_scaff = '-1' then sid_scaff := 'NULL';
                    end;
               end else sid_scaff := 'NULL';

               //11 sid_rack
               if arrStr[11] <> '' then
               begin
                    sid_rack := SQLExecute ('SELECT id FROM rack WHERE rack LIKE "' + arrStr[11] +'"');
                    if sid_rack = '' then
                    begin
                         SQLExecute ('INSERT INTO rack (rack) VALUES ("'+ arrStr[11] +'");');
                         sid_rack := IntToStr(Last_Insert_id('rack'));
                         if sid_rack = '-1' then sid_rack := 'NULL';
                    end;
               end else sid_rack := 'NULL';

               //12 sNote
               if arrStr[12]<>'' then sNote := '"'+arrStr[12]+'"' else sNote := 'NULL';




               SQLExecute ('INSERT INTO one (id_sked, id_type, [docNum], [docName], id_year, [beginDate], [endDate], id_period, [pages], id_room, id_scaff, id_rack, [note]) VALUES ('+
               sid_sked +','+
               sid_type +','+
               sDocNum +','+
               sDocName +','+
               sid_year +','+
               sBeginDate +','+
               sEndDate +','+
               sid_period +','+
               sPages +','+
               sid_room +','+
               sid_scaff +','+
               sid_rack +','+
               sNote +
               ');');




                 sCurrentDate := '"' + FormatDateTime('yyyy-MM-DD hh:nn:ss.000', now) + '"';
                 sForm  := '"NULL"';
                 sSked   := '"'+arrStr[0]+'"';
                 sType   := '"'+arrStr[1]+'"';
                 sYear  := '"'+arrStr[4]+'"';
                 sPeriod  := '"'+arrStr[7]+'"';
                 sPages  := '"'+frmDocProcessingNAF.edPages.Text+'"';
                 sRoom  := '"'+arrStr[9]+'"';
                 sScaff  := '"'+arrStr[10]+'"';
                 sRack  := '"'+arrStr[11]+'"';
                 sNote  := '"'+frmDocProcessingNAF.mNote.Text+'"';
                 sFileYes  := '"NULL"';
                 sOperation := '"Додано"';


                 SQLExecute ('INSERT INTO logNAF (date, user, form, operation, sked, type, docNum, docName, year, beginDate, endDate, period, pages, room, scaff, rack, note, FileYes)' +
                 'VALUES ('+sCurrentDate+', "'+sUser+'", '+sForm+','+sOperation+','+sSked+','+sType+','+sDocNum+','+sDocName+', '+sYear+', '+sBeginDate+', '+sEndDate+', '+sPeriod+', '+sPages+', '+sRoom+', '+sScaff+', '+sRack+', '+sNote+', '+sFileYes+')');






               frmChoice.Label8.Caption := IntToStr(i) + ' з ' + IntToStr(c);
               Application.ProcessMessages;
          end;

          sl.Free;
          UpdateDatabase('sked');
          UpdateDatabase('type');
          UpdateDatabase('year');
          UpdateDatabase('period');
          UpdateDatabase('room');
          UpdateDatabase('scaff');
          UpdateDatabase('rack');
          frmChoice.TableGrid1.dbUpdate;
          frmActions.tgActions.dbUpdate;
     end;
     OpenDialog.Free;
     frmChoice.bSearch1.Click;  ////!!!!!Нажатие на кнопку ПОИСК (при этом видимые записи таблицы обновляются)


end;
//====================================================================


также можете скачать проект, в который я добавил данное изменение
https://www.dropbox.com/s/9cah43ts9yeyo … l.zip?dl=0

Dmitry.

Re: Импорт и журнал действий. Как связать?

Извиняюсь, запутался уже в этих проектах )
https://www.dropbox.com/s/pncndbsl1hk72 … 5.zip?dl=0

Dmitry.

Re: Импорт и журнал действий. Как связать?

Работает! В том, что прислали ранее, в скрипте изменения не были прописаны. Записал и начало работать.

Не боги горшки лепят!

5 (edited by kunar80 2014-12-01 11:59:59)

Re: Импорт и журнал действий. Как связать?

Что это может означать? Шесть строчек в файле CSV, шесть раз выскакивает это сообщение. Импорт проходит, записей в журнале нет.
Скрипт записи в журнал такой:

                 sCurrentDate := '"' + FormatDateTime('yyyy-MM-DD hh:nn:ss.000', now) + '"';
                 sForm  := '"Тривалого"';
                 sDept   := '"'+arrStr[0]+'"';
                 sActNum   := '"'+arrStr[1]+'"';
                 if arrStr[2]<>'' then sActDate := '"'+ FormatDateTime('DD.MM.yyyy', StrToDate(arrStr[2])) + '"' else sActDate := 'NULL';
                 sDocNum   := '"'+arrStr[3]+'"';
                 if arrStr[4]<>'' then sDocDate := '"'+ FormatDateTime('DD.MM.yyyy', StrToDate(arrStr[4])) + '"' else sDocDate := 'NULL';
                 sDocName   := '"'+arrStr[5]+'"';
                 sType   := '"'+arrStr[6]+'"';
                 sIndexNum  := '"'+arrStr[7]+'"';
                 sIndexName  := '"'+arrStr[8]+'"';
                 sFolderNum  := '"'+arrStr[9]+'"';
                 sInternalNum  := '"'+arrStr[10]+'"';
                 sPages  := '"'+arrStr[11]+'"';
                 sYear  := '"'+arrStr[12]+'"';
                 sPeriod  := '"'+arrStr[13]+'"';
                 sRoom  := '"'+arrStr[15]+'"';
                 sScaff  := '"'+arrStr[16]+'"';
                 sRack  := '"'+arrStr[17]+'"';
                 sNote  := '"'+arrStr[18]+'"';
                 sOperation := '"Додано"';


     SQLExecute ('INSERT INTO logNAF (date, user, form, operation, type, docNum, docDate, docName, year, period, dept, actNum, actDate, indexNum, indexName, folderNum, internalNum, pages, room, scaff, rack, note)' +
     'VALUES ('+sCurrentDate+', '+sUser+', '+sForm+', '+sOperation+', '+sType+', '+sDocNum+', '+sDocDate+', '+sDocName+', '+sYear+', '+sPeriod+', '+sDept+', '+sActNum+', '+sActDate+', '+sIndexNum+', '+sIndexName+', '+sFolderNum+', '+sInternalNum+', '+sPages+', '+sRoom+', '+sScaff+', '+sRack+', '+sNote+')');
Post's attachments

Attachment icon 2014-12-01_134332.jpg 7.36 kb, 361 downloads since 2014-12-01 

Не боги горшки лепят!

Re: Импорт и журнал действий. Как связать?

kunar80
Пришлите пожалуйста проект, с файлом, который пытаетесь импортировать )
посмотрю, где ошибка.

Dmitry.

Re: Импорт и журнал действий. Как связать?

Отправил в личку. Проблема на второй вкладке (файл importLong&Short)

Не боги горшки лепят!

Re: Импорт и журнал действий. Как связать?

Исправьте данный участок кода:

SQLExecute ('INSERT INTO logNAF (date, user, form, operation, type, docNum, docDate, docName, year, period, dept, actNum, actDate, indexNum, indexName, folderNum, internalNum, pages, room, scaff, rack, note)' +
     'VALUES ('+sCurrentDate+', "'+sUser+'", '+sForm+', '+sOperation+', '+sType+', '+sDocNum+', '+sDocDate+', '+sDocName+', '+sYear+', '+sPeriod+', '+sDept+', '+sActNum+', '+sActDate+', '+sIndexNum+', '+sIndexName+', '+sFolderNum+', '+sInternalNum+', '+sPages+', '+sRoom+', '+sScaff+', '+sRack+', '+sNote+')');

исправил

', '+sUser+',

на

', "'+sUser+'",
Dmitry.

9 (edited by Augsberger 2015-01-06 09:57:16)

Re: Импорт и журнал действий. Как связать?

Помогите со скриптом для импорта csv:

Есть таблица Zapisi в ней имя поля: dataZapisi тип поля: Дата; имя поля: timeZapisi тип поля:Вычисляемое поле(strftime('%H:%M:%S', timeZapisi)) и dataTimeAddZapisi  тип поля:ДАТА/ВРЕМЯ

 //Дата записи
          if arrStr[0]<>'' then // если данные есть
          SdataZapisi := '"'+ FormatDateTime('yyyy-MM-DD 00:00:00.000', StrToDate(arrStr[0])) + '"' // приводим дату к формату, который необходим для записи в БД
          else SdataZapisi := 'NULL'; // иначе значение NULL

//Время  записи
          //if arrStr[1]<>'' then // если данные есть
          //StimeZapisi := '"'+ FormatDateTime('yyyy-MM-DD 00:00:00.000', StrToDate(arrStr[1])) + '"' // приводим Время к формату, который необходим для записи в БД
          //else StimeZapisi := 'NULL'; // иначе значение NULL

          //Дата и  Время  сохранения записи
          //if arrStr[2]<>'' then // если данные есть
          //SdataTimeAddZapisi := '"'+ FormatDateTime('dd.MM.yyyy HH:MM', StrToDate(arrStr[2])) + '"' // приводим Дату и Время к формату, который необходим для записи в БД
          //else SdataTimeAddZapisi := 'NULL'; // иначе значение NULL

а также :

//Длительность записи
          //if arrStr[3]<>'' then // если данные есть
          //SdlitelnostyZapisi := '"'+ FormatDateTime('yyyy-MM-DD 00:00:00.000', StrToDate(arrStr[3])) + '"' // приводим дату к формату, который необходим для записи в БД
          //else SdlitelnostyZapisi := 'NULL'; // иначе значение NULL

Дата записи проходит импорт ,а время записи и остальные нет

Выдает ошибку:        "22:52:34" is not a valid data

И как импортировать тип поля: Да/Нет и Файл (файлы сохраняю не в базе а по ссылке ToCopy)???

Re: Импорт и журнал действий. Как связать?

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

Dmitry.

Re: Импорт и журнал действий. Как связать?

Augsberger
Исправил несколько ошибок, попробуйте так

//Дата записи
          if arrStr[0]<>'' then // если данные есть
          SdataPerexvataZapisi := '"'+ FormatDateTime('yyyy-MM-DD 00:00:00.000', StrToDate(arrStr[0])) + '"' // приводим дату к формату, который необходим для записи в БД
          else SdataZapisi := 'NULL'; // иначе значение NULL

//Время  записи
          //if arrStr[1]<>'' then // если данные есть
          //StimeZapisi := '"'+ FormatDateTime('1899-12-30 hh:nn:ss.000', StrToTime(arrStr[1])) + '"' // приводим Время к формату, который необходим для записи в БД
          //else StimeZapisi := 'NULL'; // иначе значение NULL

          //Дата и  Время  сохранения записи
          //if arrStr[2]<>'' then // если данные есть
          //SdataTimeAddZapisi := '"'+ FormatDateTime('yyyy-MM-DD hh:nn:ss.000', StrToDateTime(arrStr[2])) + '"' // приводим Дату и Время к формату, который необходим для записи в БД
          //else SdataTimeAddZapisi := 'NULL'; // иначе значение NULL

Для поля с типом Да/Нет

          if arrStr[5]<>'' then // если данные есть
          begin
              if arrStr[5] = 'Да' then sYesNo := '1' // приводим к формату, который необходим для записи в БД
              if arrStr[5] = 'Нет' then sYesNo := '0' // приводим к формату, который необходим для записи в БД
          end else sYesNo := 'NULL'; // иначе значение NULL


для импорта файлов, необходимо в поле fieldfile_filename указать путь к файлу, например если свойство CopyTo равно "photos", то полю fieldfile_filename необходимо присвоить значение например "\photos\file.jpg"

Dmitry.

12 (edited by Augsberger 2015-01-07 21:59:54)

Re: Импорт и журнал действий. Как связать?

Осталось разобраться с типом поля Файл! У меня на компонент DBFile1 идет скрипт:

Add_Zapis.DBFile1.dbCopyTo := 'Zapisi\' +FormatDateTime('yyyy', now)+'\'+FormatDateTime('mmmm', now)+'\'+FormatDateTime('dd', now)+'\Audio';

далее DBFile2    .............. +'\Video; и т.д.
поэтому свойство компонента CopyTo пустое.
нужно когда я буду импортировать csv файл с другого ПК в новых записях я мог открывать и указанные файлы(Audio, Video) (их мне также скопируют в папках, созданных на другом ПК )

Если короче, то нужно чтобы в импортируемых записях (csv) в компоненте DBFile появилась ссылка на файл также скопированный на мой компьютер.

Re: Импорт и журнал действий. Как связать?

Augsberger wrote:

Осталось разобраться с типом поля Файл! У меня на компонент DBFile1 идет скрипт:
.

вам необходимо просто импортировать значение поля fieldfile_filename

//файл
          if arrStr[5]<>'' then // если данные есть
             filename := '"'+arrStr[5]+'"' 
             else filename := 'NULL'; // иначе значение NULL

или в чем именно вопрос? )

Dmitry.

14 (edited by Augsberger 2015-01-07 22:04:28)

Re: Импорт и журнал действий. Как связать?

Я так понимаю новое поле fieldfile_filename в таблице добавлять не надо...так как оно есть но не отображается...(смотрел через SQLlite Studio) но в настройках компонента Table Grid это поле не отображено....
Так и надо чтобы путь который указан в  fieldfile_filename  появился в отчете EXCEL (при экспорте csv) и потом также загрузился в новую базу на другом ПК

Re: Импорт и журнал действий. Как связать?

Да, поле fieldfile_filename просто скрыто, его не нужно дополнительно создавать.


Так в чем конкретно вопрос?
Вы уже сделали скрипт для экспорта? если нет, то каким способом экспортируете записи?

Dmitry.

Re: Импорт и журнал действий. Как связать?

Проблема в том что в Табле Грид не возможно добавить скрытый столбец fieldfile_filename таким образом и открыть этот путь в EXCEL для пиоследующего импорта в csv

Re: Импорт и журнал действий. Как связать?

Есть на форме кнопка открыть в EXCEL и  Table Grid (в настройках компонента таблицы во 2-м пункте: Формирование результата нет возможности выбрать поле fieldfile_filename) поэтому в файле csv в столбце я выбираю поле  с типом Файл которое есть....соответственно оно пустое... и нечего экспортировать

Re: Импорт и журнал действий. Как связать?

Вы уже сделали скрипт для экспорта? если нет, то каким способом экспортируете записи?

Я сделал скрипт для ИМПОРТА.. А экспорт с помощью табле грида и Экселя

Re: Импорт и журнал действий. Как связать?

Теперь понял )
Вы можете сделать это поле видимым с помощью вычисляемого поля, просто создайте выч. поле и напишите туда имя поля
filefield_filename

Dmitry.