1,601

(8 replies, posted in Russian)

procedure frmAdmin_bStartSQLiteServer_OnClick (Sender: TObject; var Cancel: boolean);
var
    s: string;
    ini:TInifile;
begin
    s := '';
    SelectDirectory('Caption', '', s);
    ini:= TIniFile.Create(ExtractFilePath (ParamStr (0))+'settings.ini');
    if ini.WriteString ('Options', 'server', s) AND ini.WriteString ('Options', 'DBMS','sqlite' ) then begin
    ini.Free;
    showmessage('Подключение выполнен успешно, программа будет перезагружена.');
    frmLogin.Close;
    OpenFile('start.bat');
    end else
    showmessage('Ошибка, Подключение не выполнено.');
end;

что не так

 if ini.WriteString ('Options', 'server', s) AND ini.WriteString ('Options', 'DBMS','sqlite' ) then begin

1,602

(1 replies, posted in Russian)

очистить таблицу

SQLExecute('DELETE FROM servise WHERE 1');

а как очистить всю базу?

1,603

(1 replies, posted in Russian)

     if DeleteFile('sqlite.db') then
ShowMessage('Файл удален успешно.')
else
ShowMessage('Ошибка: файл не был удален.');

как я понимаю мне с начало нужно отключится от

sqlite.db

1,604

(15 replies, posted in Russian)

проблема решена

добавил ComboBox id_client в качастве связывающего эллемента двух таблиц

1,605

(15 replies, posted in Russian)

ну вот и наткнулся на самую не понятную проблему

записывает и отображает все записи

SQLExecute('INSERT INTO servise (dateInServise, id_status, id_Company, id_TypeOfEquipment, id_manufacturer, model, serialNamber, equipment, externalStatus, descriptionATCsWords, id_clCompanyOrApp, record_count) VALUES ("'+tDate+'", "'+tStatusName+'", "'+tNameCompany+'", "'+ tNameTypeOfEquipment + '", "'+tNameManufacturer+'", "'+frmReceivinOgEquipment.eModel.Text+'", "'+frmReceivinOgEquipment.eSerialNamber.Text+ '", "'+frmReceivinOgEquipment.eEquipment.Text+ '", "'+ frmReceivinOgEquipment.mDescriptionATCsWords.Text+ '", "'+ frmReceivinOgEquipment.mExternalStatus.Text+ '", "'+tCompanyOrApp+'", "'+tCount+'")');

записывает но запись таблицы client не отображается хотя в самой таблице запись есть

 SQLExecute('INSERT INTO client (firstNameClient, twoNameClient, lastNameClient, adresClient, telephonClient) VALUES ("'+frmNewApplication.eFirstNameClient.Text+'", "'+frmNewApplication.eTwoNameClient.Text+'", "'+frmNewApplication.eLastNameClient.Text + '", "'+ frmNewApplication.eAdresClient.Text + '", "'+ frmNewApplication.eTelephonClient.Text + '")');
      SQLExecute('INSERT INTO servise (descriptionATCsWords, id_status, dateApplcation, timeApplication, dateInServise, id_clCompanyOrApp) VALUES ("'+ frmNewApplication.mDescriptionOfTheProblem.Text + '", "'+wStatusName+'", "'+wDate+'", "'+wTime+'", "'+qDate+'", "'+wCompanyOrApp+'");');
     

ShowRecord повесил пока в OnShow

запись в строчках от  324 по 429

вывод записи в строчках от 29 по 64


я думаю,что дело в отсутствии связывающего элемента

1,606

(15 replies, posted in Russian)

нашел у себя еще одну ошибку
у меня сохранение происходит в 2-е таблицы
A B
таблица

A

связана с таблицей

 B

в скрипте сохранение происходило с начало в

A

потом в

B

, в результате таблица

A

не понимала с чем ей связываться...

1,607

(1 replies, posted in Russian)

Если вдруг  кому нибудь понадобится:
Батник позволяет выполнять код с правами администратора

первый вариант

Получаем значение параметра  server из файла settings.ini
к значению дабавляем папку liteServerSQL
капируем в нее бд sqlite.db
назначаем папке liteServerSQL общий доступ

@echo off
rem **********************************************************************************
rem прототип кода https://ss64.com/vb/syntax-elevate.html                            *
rem **********************************************************************************
setlocal
>nul 2>&1 net session&&goto run
if /i "%~1"=="yes" goto run
if /i "%~1"=="" set "args=noparam"
set "file=%~f0"
set "args=%* %args%"
set file=""%file:"=%""
set args=%args:"=""%
>"%temp%\uac.vbs" echo set objShell=CreateObject^("Shell.Application"^)
>> "%temp%\uac.vbs" echo objShell.ShellExecute "cmd", "/c ""%file% ""yes"" %args%""", , "runas", 1
cscript /nologo /e:vbscript "%temp%\uac.vbs"
exit /b

:run
>nul 2>&1 del "%temp%\uac.vbs"
cd /d "%~dp0"
title %cd%
shift
if "%~1"=="noparam" shift

rem Тестовый блок проверки параметров [в боевых условиях блок можно уничтожить]
echo.param_full=[%*]     - [test_param %%*]
echo.param_1=[%1]             - [test_param %%1]
echo.param_2=[%2]             - [test_param %%2]
echo.param_3=[%3]             - [test_param %%3]
echo.param_4=[%4]             - [test_param %%4]
echo.param_5=[%5]             - [test_param %%5]
rem ... и т.д.
rem Конец тестового блока

rem ***************************** основной блок кода / начало*****************************

set "fz=settings.ini"
set "z=server"
set "fcp=sqlite.db"
set "dsh=liteServerSQL"

setlocal enabledelayedexpansion
 <"%fz%" (for /f "delims=" %%a in ('find /i "%z%"') do @set "%%a")
 if not exist "!%z%!%dsh%" md "!%z%!%dsh%"
 net share %dsh%="!%z%!%dsh%"
 cmd /c takeown /f "!%z%!%dsh%" /r /d y && icacls "!%z%!%dsh%" /grant Administrators:F /t
 copy "%fcp%" "!%z%!%dsh%"
endlocal
rem ***************************** основной блок кода / конец *****************************

pause

второй вариант

создает в корне папку liteServerSQL
переносит в нее бд sqlite.db
назначает папке  liteServerSQL общий доступ

@echo off
rem **********************************************************************************
rem прототип кода https://ss64.com/vb/syntax-elevate.html                            *
rem **********************************************************************************
setlocal
>nul 2>&1 net session&&goto run
if /i "%~1"=="yes" goto run
if /i "%~1"=="" set "args=noparam"
set "file=%~f0"
set "args=%* %args%"
set file=""%file:"=%""
set args=%args:"=""%
>"%temp%\uac.vbs" echo set objShell=CreateObject^("Shell.Application"^)
>> "%temp%\uac.vbs" echo objShell.ShellExecute "cmd", "/c ""%file% ""yes"" %args%""", , "runas", 1
cscript /nologo /e:vbscript "%temp%\uac.vbs"
exit /b

:run
>nul 2>&1 del "%temp%\uac.vbs"
cd /d "%~dp0"
title %cd%
shift
if "%~1"=="noparam" shift

rem Тестовый блок проверки параметров [в боевых условиях блок можно уничтожить]
echo.param_full=[%*]     - [test_param %%*]
echo.param_1=[%1]             - [test_param %%1]
echo.param_2=[%2]             - [test_param %%2]
echo.param_3=[%3]             - [test_param %%3]
echo.param_4=[%4]             - [test_param %%4]
echo.param_5=[%5]             - [test_param %%5]
rem ... и т.д.
rem Конец тестового блока

rem ***************************** основной блок кода / начало*****************************
MD %~dp0liteServerSQL
move %~dp0sqlite.db %~dp0liteServerSQL\sqlite.db
net share liteServerSQL="%~dp0liteServerSQL"
cmd/c takeown /f "%~dp0liteServerSQL" /r /d y && icacls "%~dp0liteServerSQL" 
rem ***************************** основной блок кода / конец *****************************

pause

1,608

(15 replies, posted in Russian)

есть таблицы
             a                       b                        c               
        ----------             ----------              ----------
             aa                      bb                       cc
             aaa                   id_a                     ccc
             aaaa                 id_c                     cccc

запись происходит либо в b.a  либо в  b.c
в гриде отображается таблица b
мне нужно двойным кликом по гриду паказать запись скриптом в отдельной форме

либо
b
aa
aaa
aaaa
либо
b
cc
ccc
cccc

не знаю как проще это объяснить

1,609

(15 replies, posted in Russian)

DriveSoft wrote:

На форме frmServiceCen, грид (tgList) заполняется данными из таблицы servise, таким образом

frmServiceCen.tgList.sqlValue

вы получаете id из таблицы servise



Но как видно в данном скрипте, вы используете id записи из таблицы servise для поиска записи из таблицы client, что неправильно.

procedure clientServiseList_OnShow (Sender: TObject; Action: string);
begin
     frmClientServiсeList.efirstNameClient.Text := SQLExecute('SELECT firstNameClient FROM client WHERE id='+ frmServiceCen.tgList.sqlValue);

Лучше объясните общими словами, какую проблему вы пытаетесь решить таким образом? Возможно я смогу предложить что-то попроще.

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

то есть мне нужно вывести запись из связвнных таблиц где

id = id_client.servise  т д

1,610

(15 replies, posted in Russian)

записал видео моих действий так думаю будет понятней

https://yadi.sk/i/QVTZomNG6wFMuw

1,611

(15 replies, posted in Russian)

я не могу понять почему при создании первой записи через форму

frmReceivinOgEquipment

  либо

frmNewApplication

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

1,612

(15 replies, posted in Russian)

пологаю что что-то не так в связи таблиц или же в самой записи..

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

1,613

(15 replies, posted in Russian)

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

реньше все работало ок..  Иду пока путем исключения того что делал.. .

1,614

(15 replies, posted in Russian)

хотя нет...  Проверил без подключения ко второй базе происходит тоже самое

а именно..

при отображении карточки оборудования не все поля заполнены.
при первом заполнении формы приема оборудования или заявки в карточке отображаются все параметры но при втором заполнении начинаются глюги ...   

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

Не могу найти где именно я ошибся..


https://yadi.sk/d/VHZkBV7PZXBfsg

для перехода к карточке оборудования нужно дважду кликнуть пи записи в гриде

скрипт..

//**************************** Карточка оборудования компании ***********************//
procedure frmComServiceList_OnShow (Sender: TObject; Action: string);
begin

     frmComServiceList.eNameCompany.Text := SQLExecute('SELECT NameCompany FROM company WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmComServiceList.eStreetCompany.Text := SQLExecute('SELECT streetCompany FROM company WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmComServiceList.eHouseCompany.Text := SQLExecute('SELECT houseCompany FROM company WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmComServiceList.eFractionCompany.Text := SQLExecute('SELECT fractionCompany FROM company WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmComServiceList.eOfficeCompany.Text := SQLExecute('SELECT officeCompany FROM company WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmComServiceList.eTelCompany.Text := SQLExecute('SELECT telCompany FROM company WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmComServiceList.eNameTypeOfEquipment.Text := SQLExecute('SELECT nameTypeOfEquipment FROM TypeOfEquipment WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmComServiceList.eNameManufacturer.Text := SQLExecute('SELECT nameManufacturer FROM manufacturer WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmComServiceList.eModel.Text := SQLExecute('SELECT Model FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmComServiceList.eSerialNamber.Text := SQLExecute('SELECT SerialNamber FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmComServiceList.eEquipment.Text := SQLExecute('SELECT Equipment FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmComServiceList.mDescriptionATCsWords.Text := SQLExecute('SELECT DescriptionATCsWords FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmComServiceList.mExternalStatus.Text := SQLExecute('SELECT ExternalStatus FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmComServiceList.mDiagnostics.Text := SQLExecute('SELECT Diagnostics FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmComServiceList.cbStatusName.DbItemID := SQLExecute('SELECT id_status FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
     // отбираем список выполненных работ через счетчик записей, для этого передаем record_count в строку eSearchListWork
     frmComServiceList.eSearchListWork.Text := SQLExecute('SELECT record_count FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
     //клик кнопку поиска
     frmComServiceList.bSearchListWork.Click;
end;
//**************************** Карточка оборудования клиента ***********************//
procedure clientServiseList_OnShow (Sender: TObject; Action: string);
begin
     frmClientServiсeList.efirstNameClient.Text := SQLExecute('SELECT firstNameClient FROM client WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmClientServiсeList.etwoNameClient.Text := SQLExecute('SELECT twoNameClient FROM client WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmClientServiсeList.elastNameClient.Text := SQLExecute('SELECT lastNameClient FROM client WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmClientServiсeList.eAdresClient.Text := SQLExecute('SELECT adresClient FROM client WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmClientServiсeList.ePassportSeriesClient.Text := SQLExecute('SELECT passportNamberClient FROM client WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmClientServiсeList.ePassportNamberClient.Text := SQLExecute('SELECT passportSeriesClient FROM client WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmClientServiсeList.eTelephonClient.Text := SQLExecute('SELECT telephonClient FROM client WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmClientServiсeList.eNameTypeOfEquipment.Text := SQLExecute('SELECT nameTypeOfEquipment FROM TypeOfEquipment WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmClientServiсeList.eNameManufacturer.Text := SQLExecute('SELECT nameManufacturer FROM Manufacturer WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmClientServiсeList.eModel.Text := SQLExecute('SELECT Model FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmClientServiсeList.eSerialNamber.Text := SQLExecute('SELECT SerialNamber FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmClientServiсeList.eEquipment.Text := SQLExecute('SELECT Equipment FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmClientServiсeList.mDescriptionATCsWords.Text := SQLExecute('SELECT DescriptionATCsWords FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmClientServiсeList.mExternalStatus.Text := SQLExecute('SELECT ExternalStatus FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmClientServiсeList.mDiagnostics.Text := SQLExecute('SELECT Diagnostics FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmClientServiсeList.cbStatusName.DbItemID := SQLExecute('SELECT id_status FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
     // отбираем список выполненных работ через счетчик записей, для этого передаем record_count в строку eSearchListWork
     frmClientServiсeList.eSearchListWork.Text := SQLExecute('SELECT record_count FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
     //клик кнопку поиска
     frmClientServiсeList.bSearchListWork.Click;
end;
 //**************************** Карточка заявки ***********************//
procedure frmAppl_OnShow (Sender: TObject; Action: string);
begin
     frmAppl.cbNameClient.DbItemID := frmServiceCen.tgList.DbItemID;
     frmAppl.eNameClient.Text := frmAppl.cbNameClient.Text;
     frmAppl.eAdresClient.Text := SQLExecute('SELECT adresClient FROM client WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmAppl.eTelephonClient.Text := SQLExecute('SELECT telephonClient FROM client WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmAppl.mDescriptionATCsWords.Text := SQLExecute('SELECT DescriptionATCsWords FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmAppl.dtpDateApplcation.Text := SQLExecute('SELECT dateApplcation FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
     frmAppl.dtmTimeApplication.Text := SQLExecute('SELECT timeApplication FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
     // отбираем список выполненных работ через счетчик записей, для этого передаем record_count в строку eSearchListWork
     frmClientServiсeList.eSearchListWork.Text := SQLExecute('SELECT record_count FROM servise WHERE id='+ frmServiceCen.tgList.sqlValue);
     //клик кнопку поиска
     frmClientServiсeList.bSearchListWork.Click;
end;

1,615

(15 replies, posted in Russian)

как правельно подключить вторую SQLite  или конфликт не избежен?

SQLExecute('ATTACH DATABASE ''setting\sqlite.db'' as ''SETTING''');

1,616

(2 replies, posted in Russian)

как сбросить выбранные значения в ComboBox MultiSelect ?

1,617

(8 replies, posted in Russian)

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

План №2
сравнивать с

SHOW processlist

, вот и все, этот вариант думаю на много проще...

1,618

(8 replies, posted in Russian)

[Script]
Enabled=1
[Options]
DBMS= [b]sqlite  или  mysql[/b]
server=G:\Рабочий стол\Script_fixed\sqlite.db  [b]если sqlite не в корневой папке[/b]
[mysql]
[b]параметры подключения к mysql[/b]
host=
port=3306
username=
database=
savepassword=0

за место скрипта подключения можно поменять  sqlite  или  mysql, думаю так будет проще.
но в этом случае мне все равно нужен скрипт создания таблиц?
в моем проекте пользователь может выбирать какую  БД он будет использовать

1,619

(3 replies, posted in Russian)

Расшарил


@echo off
MD %~dp0liteServerSQL
move %~dp0sqlite.db %~dp0liteServerSQL\sqlite.db
net share liteServerSQL="%~dp0liteServerSQL"
cmd/c takeown /f "%~dp0liteServerSQL" /r /d y && icacls "%~dp0liteServerSQL" 
pause>nul

как запустить этот bat с правами администратора?
сейчас я сделал ярлык на bat  файл и назначил администратора ярлыку...

1,620

(17 replies, posted in Russian)

form.TableGrid.dbFilter := '';
у меня эта часть кода полностью блокирует все остольные фильтры и у Вас видимо то же смое

отчет видимо определяет  как string а не integer
попробуйте преобразовать тип данных https://docs.microsoft.com/ru-ru/sql/t- … erver-2017

1,622

(3 replies, posted in Russian)

есть -ли возможность  скриптом открыть общий доступ к папке?

в Вашем проекте попытался по разному получить отчет и каждый раз одно и тоже

не может ли это возникнуть из-за разных версий ... или может быть поля amountMINUS и amountPLUS с начало были текстовыми а в итоге вы перевели их в челое число

попробуйте сделать у себя простой проект с простым отчетом типа такого

специально запелил тестовый проект, что бы проверить

все работает... может ошибка не в самом отчете

особо не вник... дел много..   Но может костыль....

в поле сумировать.... а потом в отчет ? 

у меня везде костыли)))