Re: Прошу помощи!

DriveSoft wrote:

andrey.yugay

Дмитрий, доброго,
да, это то, что нужно.

1) есть какая нибудь реализация по автозавершению слов именно в тектовом поле?
Пример по огранизации, польз-ль начинает вводить и ему предлагаю варианты.... По комбобокс не подходит, т.к. там будут вводить новые организации
2) В форме редактирования скриптов пропали +.... данных много, раньше все сваричивалось, сейчас приходится искать по тексту.
3) Еще вопрос, как с вами связаться на счет покупки?

с УВ. Андрей.


1. Автозаврешение слов есть только в ComboBox, для этого установите его свойство Style = csDropDown
Затем поместите на форму компонент Edit, а для компонента ComboBox создайте событие

procedure Form2_ComboBox1_OnChange (Sender: string);
begin
    Form2.Edit1.Text :=  Form2.ComboBox1.Text;
end;

procedure Form2_OnShow (Sender: string; Action: string);
begin
    Form2.ComboBox1.Text := Form2.Edit1.Text;
end;

таким образом информация из CombBox будет дублироваться в Edit, компонент Edit сделайте невидимым, но данные в базу данных сохраняйте именно с компонента Edit

проект с примером приложил к сообщению


2. Нажмите правой кнопкой мыши в окне скриптов и поставьте галочку "Code folding"


3. support@drive-software.com
страница покупки
http://myvisualdatabase.com/purchase_ru.html

Дмитрий, доброго.
Да, получилось. но немного доработал, спасибо огромное.

в принципе этот проект содержит в себе многие функции, которые есть на сайте - авторизация, формулы, sql запросы, (отчеты тут не нужны, есть отчетная ввкладка), связи, иморт, выгрузка в excel, если вдруг кому будет нужен , могу скинуть.

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

на счет закупок, выслал нашим специалистам

с Ув. Андрей

с Ув. Андрей

Re: Прошу помощи!

delphinsl wrote:

Дмитрий, в версии 3.6 ошибку больше не выдает, но при этом при выполнении SQL запроса значение vedisp.cashstage выдается с запятой (тип REAL), а значение vedisp.NDS выдается с точкой (тип REAL). Я думаю тут нет ошибок ни в SQL запросе ни в скрипте, поскольку там скрипт работает только по раскраске ячеек. Но с чем связана данная ситуация остается загадкой.

delphinsl wrote:

При выполнении данного SQL запроса, появляется вот такая ошибка. Началось с версии 3.3

select
SoispDog.num_dog,
strftime('%d.%m.%Y',SoispDog.date_dog),
soispdog.shifr_dog,
SoispDog.name_dog,
vedisp.numstage,                       
vedisp.namestage,
vedisp.ONTD,
strftime('%d.%m.%Y',vedisp.startstage),
strftime('%d.%m.%Y',vedisp.endstage)as dateend,
vedisp.trud,
vedisp.cashstage,
vedisp.NDS,
vedisp.vidcash,
Glisp.nameGi,
Soisp.nameisp,
vedisp.Zakl_OC,
vedisp.Zakl_TFC,
vedisp.udost,
(case when vedisp.otmstage=1 then 'да' else 'нет' end),
soispdog.id,               
soispdog.id_GLisp,
soispdog.id_soisp

from vedisp, soispdog, Glisp, soisp

where vedisp.id_soispdog=soispdog.id and soispdog.id_soisp=soisp.id and soispdog.id_Glisp=GLisp.id
and strftime('%m.%Y',vedisp.endstage)= strftime('%m.%Y',{DateTimePicker1}) and vedisp.otmstage='0'
order by dateend

Пожалуйста создайте отдельную тему для вопроса, также приложите проект.

Dmitry.

Re: Прошу помощи!

Дмитрий, доброго времени суток,
подскажите пожалуйста в чем может быть проблема
     if sLastActionForm = 'NewRecord' then sOperation := 'Новая запись';
     if sLastActionForm = 'ShowRecord' then sOperation := 'Изменение записи';

операция не заносится в логи.
как буд-то не определяет, что пользователь делал

с Ув. Андрей

*полный код; все данные нормально сохраняются

procedure frmContracts_Button1_OnAfterClick (Sender: string);
begin
  frmcontracts.DateTimePicker1.Checked := False;
  frmContracts.ComboBox6.Text := frmContracts.Edit1.Text;

     sCurrentDate := '"' + FormatDateTime('yyyy-MM-DD hh:nn:ss', now) + '"';
     sID := IntToStr(frmContracts.Button1.dbGeneralTableID);
     sDate := '"' + FormatDateTime('yyyy-MM-DD hh:nn:ss', frmContracts.DateTimePicker1.Date) + '"';
     sAgent := '"'+frmContracts.Edit1.Text+'"';
     sST := '"'+frmContracts.Edit14.Text+'"';
     sCodeST := '"'+frmContracts.ComboBox4.Text+'"';
     sCemType := '"'+frmContracts.ComboBox1.Text+'"';
     sPack := '"'+frmContracts.ComboBox2.Text+'"';
     sTonn := '"'+frmContracts.Edit4.sqlValue+'"';
     sCost := '"'+frmContracts.Edit5.sqlValue+'"';
     sTotal := '"'+frmContracts.Edit6.sqlValue+'"';
     sContract := '"'+frmContracts.Edit7.Text+'"';
     sF1 := '"'+frmContracts.Edit8.sqlValue+'"';
     sF2 := '"'+frmContracts.Edit9.sqlValue+'"';
     sF3 := '"'+frmContracts.Edit10.sqlValue+'"';
     sF4 := '"'+frmContracts.Edit11.sqlValue+'"';
     if sSAP = 'NULL' then sSap := '' else sSap := '"'+frmContracts.Edit13.Text+'"';
     sBroker := '"'+frmContracts.Edit12.Text+'"';
     sAddit := '"'+frmContracts.Edit3.Text+'"';
     if frmContracts.CheckBox1.sqlValue = '1' then sAnn := 'Да' else sAnn := 'Нет';

     if sLastActionForm = 'NewRecord' then sOperation := 'Новая запись';
     if sLastActionForm = 'ShowRecord' then sOperation := 'Изменение записи';

     SQLExecute ('INSERT INTO logs (w_date, plant, operation, username, id_rec, date, agent, st, stcode, cemtype, pack, tonn, cost, total, contract, f1, f2, f3, f4, sap, broker, addit, ann)' +
     'VALUES ('+ sCurrentDate +' , "ШЦ", "'+ sOperation +'", '+ sUserName +', '+ sID +','+ sDate +', '+ sAgent +', '+ sST +', '+ sCodeST +', '+ sCemType +', '+ sPack +', '+ sTonn +', '+ sCost +', '+ sTotal +', '+ sContract +', '+ sF1 +', '+ sF2 +', '+ sF3 +', '+ sF4 +', '+ sSAP +', '+ sBroker +', '+ sAddit +', "'+ sAnn +'")');


     frmLog.Logs.dbUpdate;
end;

с Ув. Андрей

Re: Прошу помощи!

andrey.yugay
рассмотрите возможность логгирования данных более простым и универсальным способом:
http://myvisualdatabase.com/forum/viewtopic.php?id=3642

Dmitry.

30 (edited by andrey.yugay 2017-09-18 12:00:58)

Re: Прошу помощи!

DriveSoft wrote:

andrey.yugay
рассмотрите возможность логгирования данных более простым и универсальным способом:
http://myvisualdatabase.com/forum/viewtopic.php?id=3642

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

есть связи с таблицами, как мне их прописать в коде?
пример

'BEGIN '+
    '    INSERT INTO logs(w_date, plant, operation, username, id_rec, date, agent, st, stcode)  VALUES (datetime(''now'', ''localtime''), ''SHC'', ''DELETE RECORD'', '+sUserName+', NEW.id, NEW.shc_data, NEW.shc_agent, NEW.id_st, NEW.id_st)

NEW.id_st ссылается на другую таблицу... если я оставляю так, то в логах появится только номер записи... как мне предопределить, что там на основании ID выберется другое значение, к примеру, stname (наименование станции)


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

код только такой
procedure frmContracts_ComboBox4_OnChange (Sender: string; Action: string);
begin
    if   frmContracts.ComboBox4.text ='' then
         frmContracts.Edit14.text := ''
    else frmContracts.Edit14.text := SQLExecute('SELECT stname FROM st WHERE stCode = '+frmContracts.ComboBox4.text );
end;

прошу помочь

с Ув. Андрей

Post's attachments

Attachment icon Contractsv1.5.2.zip 1.35 mb, 389 downloads since 2017-09-18 

с Ув. Андрей

Re: Прошу помощи!

andrey.yugay

загвоздка вот в чем

есть связи с таблицами, как мне их прописать в коде?
пример

'BEGIN '+
    '    INSERT INTO logs(w_date, plant, operation, username, id_rec, date, agent, st, stcode)  VALUES (datetime(''now'', ''localtime''), ''SHC'', ''DELETE RECORD'', '+sUserName+', NEW.id, NEW.shc_data, NEW.shc_agent, NEW.id_st, NEW.id_st)

NEW.id_st ссылается на другую таблицу... если я оставляю так, то в логах появится только номер записи... как мне предопределить, что там на основании ID выберется другое значение, к примеру, stname (наименование станции)

я так понимаю это триггер срабатывает на удаление? тогда почему вы пишите NEW вместо OLD?

вместо NEW.id_st думаю можно написать подзапрос

(SELECT st.stName FROM st WHERE st.id=OLD.id_st)


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


В настройках кнопки Сохранить запись (Button1) удалите компонент ComboBox3, который вы видимо внесли туда по ошибке.

Dmitry.

Re: Прошу помощи!

Дмитри,
Спасибо огромное, все помогло

с Ув. Андрей

с Ув. Андрей

Re: Прошу помощи!

Дмитрий. доброго времени!
приобрели программу.
подскажите пожалуйста, что не так?:

procedure fMain_Button1_OnClick (Sender: string; var Cancel: boolean);
         
            //1// № вагона
            if arrStr[1] = '' then arrStr[1] := 'NULL';
           
            //2// Станция дислокации
            if arrStr[2] = '' then arrStr[2] := 'NULL';
           
            //3// индекс поезда
            if arrStr[3] = '' then arrStr[3] := 'NULL';
           
            //4// дата дислокации // приводим дату к формату, который необходим для записи в БД
            if arrStr[4]<>'' then // если данные есть
            sDate1 := '"'+ FormatDateTime('yyyy-MM-DD 00:00:00.000', StrToDate(arrStr[4])) + '"'
            else sDate1 := 'NULL'; // иначе значение NULL
           
            //5// операция
            if arrStr[5] = '' then arrStr[5] := 'NULL';
           
            //6// Станция назначения
            if arrStr[6] = '' then arrStr[6] := 'NULL';
           
            //7// код грузополучателя
            if arrStr[7] <> '' then arrStr[7] := ''''+ ReplaceStr(arrStr[7], '''', '''''') + ''''
            else arrStr[7] := 'NULL';

            //8// наименование грузополучателя
            if arrStr[8] <> '' then arrStr[8] := ''''+ ReplaceStr(arrStr[8], '''', '''''') + ''''
            else arrStr[8] := 'NULL';

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

            //11// груз
            if arrStr[11] = '' then arrStr[11] := 'NULL';
           
            //12// собственник
            if arrStr[12] = '' then arrStr[12] := 'NULL';
           
            //13// род
            if arrStr[13] <> '' then arrStr[13] := ''''+ ReplaceStr(arrStr[13], '''', '''''') + ''''
            else arrStr[13] := 'NULL';
           
            //14// № накладной
            if arrStr[14] = '' then arrStr[14] := 'NULL';
           
            //15// состояние
            if arrStr[15] = '' then arrStr[15] := 'NULL';

            //16// парк
            if arrStr[16] = '' then arrStr[16] := 'NULL';
           
            //17// код неисправности
            arrStr[17] := ReplaceStr(arrStr[17], ',', '.');
            if arrStr[17] = '' then arrStr[17] := 'NULL';
           
            //18// вес груза
            arrStr[18] := ReplaceStr(arrStr[18], ',', '.');
            if arrStr[18] = '' then arrStr[18] := 'NULL';
           
            //19// грузоподъемность вагона
            arrStr[19] := ReplaceStr(arrStr[19], ',', '.');
            if arrStr[19] = '' then arrStr[19] := 'NULL';

    // проверяем, для избежания дубликатов, данная проверка не обязательна, и зависит от вашей ситуации
    //sval := SQLExecute('SELECT id FROM currency WHERE (date = ' + sDate + ') AND (id_valute = ' +  ValuteID + ') AND (value = ' + arrStr[2] + ') ;');
    //if sval = '' then // если в переменной sval - пусто, значит SQL запрос ничего не вернул, и дубликата данных нет
   
    // с помощью SQL запрос вставляем данные в БД
    SQLExecute ('INSERT INTO t_data (num_wag, st_dislok, index_poezda, d_dislok, oper, st_naznach, code_poluchatelya, name_poluchatelya, st-otprav, d_otpravleniya, gruz, sobstven, rod, naklad, sostoyanie, park, neispr_code, ves, gruzopod) VALUES ('+ arrStr[1] +', '+ arrStr[2] +', '+ arrStr[3] +', '+ sDate1 +', '+ arrStr[5] +', '+ arrStr[6] +', '+ arrStr[7] +', '+ arrStr[8] +', '+ arrStr[9] +', '+ sDate2 +', '+ arrStr[11] +', '+ arrStr[12] +', '+ arrStr[13] +', '+ arrStr[14] +', '+ arrStr[15] +', '+ arrStr[16] +', '+ arrStr[17] +', '+ arrStr[18] +', '+ arrStr[19] +');');
   
    // выводим в компонент надписи, какое количество строк с данными обработано
    fMain.Label1.Caption := 'Загружено строк ' + IntToStr(i) + ' из ' + IntToStr(c);
   
    // необходимо, чтобы надпись в Label один обновилась
    Application.ProcessMessages;
     end;
          sl.Free; // уничтожаем объект, после работы с ним
          fMain.TableGrid1.dbUpdate; // заставляем TableGrid обновить данные
     end;
     OpenDialog.Free; // уничтожаем объект, после работы с ним
end;

Данные не грузятся, вообще ничего не происходит - кроме обновления таблицы(

с Ув. Андрей

с Ув. Андрей

Re: Прошу помощи!

andrey.yugay
в вашем скрипте я вижу синтаксическую ошибку, а именно отсутствует слово begin после заголовка процедуры.
Если это не поможет, приложите пожалуйста ваш проект.

Dmitry.

35 (edited by andrey.yugay 2017-10-24 11:32:12)

Re: Прошу помощи!

DriveSoft wrote:

andrey.yugay
в вашем скрипте я вижу синтаксическую ошибку, а именно отсутствует слово begin после заголовка процедуры.
Если это не поможет, приложите пожалуйста ваш проект.

Доброго. это я для сокращения текста убрал.
немного переделал, но результата 0.
проект во вложении + файл для загрузки

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

с Ув. Андрей

Post's attachments

Attachment icon Вагоны.7z 32.04 kb, 368 downloads since 2017-10-24 

с Ув. Андрей

Re: Прошу помощи!

Файл 0110170659_disl_cis.csv должен иметь кодировку UTF8, вы можете преобразовать файл в данную кодировку например программой Notepa++ (Меню: Кодировки > Преобразовать в UTF8 без BOM)


также в данном файле дата представлена в формате
22.09.17 12:03
но вы используете функцию StrToDate, которая конвертирует только дату, которая должна быть в формате, который используется в региональных настройках Windows.


Вам необходимо решить проблему с преобразованием текстовой даты в CSV файле.
Это можно сделать взяв символы с данной строки (день, месяц, год), преобразовать их в числа, затем с помощью функции EncodeDate получить из них настоящую дату (переменную типа TDate)



обратите внимание на данный универсальный скрипт импорта/экспорта данных
http://myvisualdatabase.com/forum/viewtopic.php?id=3620
но данный пример не решит проблему с датой, если файл был получен не с помощью данного же скрипта.

Dmitry.

Re: Прошу помощи!

Дмитрий, доброго времени суток.
С новым годом.
подскажите пожалуйста как можно избежать ошибки во вложенном файле
с ув. Андрей

Post's attachments

Attachment icon 2018-01-16_180430.jpg 135.32 kb, 198 downloads since 2018-01-16 

с Ув. Андрей