mikhail_a wrote:

Никакой системы нет. Может при открытии формы, может при закрытии. Но именно в момент обращения к базе. Происходит редко, 1-2 раза в день. И похоже, что не на всех ПК.  Может это сетевые проблемы или связано с типом операционки

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

vovka3003 wrote:

sibprogsistem, эффектно... Но к сожалению это не ответ на вопрос:

mikhail_a wrote:

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

вы предлагаете копипастить DateTimePicker1..100500 ?

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

тагда я предлагаю так

var
i:integer;
function checkedDT(d:TdbDateTimePicker; r: string):string;
begin
  if d.checked then begin
    if r= 'date' then result:='dd.mm.yy' else
    if r= 'time' then result:='hh:mm' else
   end else result:='.';
end;

procedure Form1_DateTimePicker1_OnChange (Sender: TObject);
begin
  Form1.DateTimePicker1.Format:= checkedDT(Form1.DateTimePicker1,'date');
end;
procedure Form1_DateTimePicker2_OnChange (Sender: TObject);
begin
  Form1.DateTimePicker2.Format:= checkedDT(Form1.DateTimePicker2,'time');
end;

begin
  for i:=0 to Form1.ComponentCount-1 do
     if Form1.Components[i].ClassName = 'TdbDateTimePicker' then
     with TdbDateTimePicker(Form1.Components[i]) do
     begin
       TdbDateTimePicker(Form1.Components[i]).Format:= '.';
     end;
end.
function checkedDT(d:TdbDateTimePicker; r: string):string;
begin
  if d.checked then begin
    if r= 'date' then result:='dd.mm.yy' else
    if r= 'time' then result:='hh:mm' else
   end else result:='.';
end;

procedure Form1_DateTimePicker1_OnChange (Sender: TObject);
begin
  Form1.DateTimePicker1.Format:= checkedDT(Form1.DateTimePicker1,'date');
end;
procedure Form1_DateTimePicker2_OnChange (Sender: TObject);
begin
  Form1.DateTimePicker2.Format:= checkedDT(Form1.DateTimePicker2,'time');
end;

при любом обращении или к конкретным данным?

сделайт просто проверку на заполнение

procedure Form1_Button1_OnClick (Sender: TObject; var Cancel: boolean);
begin
  if form1.DateTimePicker1.Checked = False then begin
  ShowHint(form1.DateTimePicker1,'Дата не выбрана');
  CANCEL:=TRUE;
  end;
end;

1,131

(1 replies, posted in Russian)

.

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

1,133

(15 replies, posted in Russian)

вроде бы так

CREATE TRIGGER `delete_cities` BEFORE INSERT ON `countries`
FOR EACH ROW BEGIN
  INSERT INTO salaries ( date) VALUES  ( SYSDATE());
END

1,134

(1 replies, posted in Russian)

приложите Ваш проек и добайте больше описания

1,135

(15 replies, posted in Russian)

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

SQLExecute(
    'CREATE TRIGGER IF NOT EXISTS my_equipment_insert AFTER INSERT ON equipment '+
    'BEGIN '+
    '    INSERT INTO logiUsers(action, date) VALUES (''New equipment'', datetime(''now'',''localtime'')); '+
    'END;'
    );

1,136

(15 replies, posted in Russian)

Удалите из таблицы уже созданные тригеры или вообще очистите БД
тригер нужно проверять на (есть нет) или просто удалять его по закрытию программы
потому как вы постояно пытаетесь создать то, что уже есть..

ну а так программа работает ...

1,137

(9 replies, posted in Script)

.

1,138

(10 replies, posted in Russian)

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

1,139

(10 replies, posted in Russian)

newusr wrote:

Добрый день.
А можно по подробней описать алгоритм взаимодействия в данной схеме?
клиент MVDB на локальном АРМ --- удалённая MySQL БД --- форма на сайте (на одном хостинге с MySQL или не принципиально?)

набор файлов из папки (ккроме папки programm) размещете на любам хостинге  (естественно с поддержкой php)
обращаетесь к php как есть по их адресу
если Вы решили полностью изменить положение папок или файлов по отношению к друг другу то нужно внести изминения

require '../rb/rb-mysql.php'; // загрузка redbeanphp
require 'db_connect.php';// загрузка параметров подключения
require 'passwor_autorisation.php';//загрузка паролей авторизации

где ../ означает - на одну папку вверх(назад)

в файле

db_connect.php меняете настройки подключения к БД где

R::setup( 'mysql:host=адрес БД (если на одном хостинге с БД то не менять);dbname= имя БД;charset=utf8',
        'пользователь БД', 'парольБД' );

если БД и файлы расположенны на разных хостингах, то может понадобиться разрешение для внешнего  соединения (настройки самого хостинга)

далее все по вашему желанию - можете сами выбрать как у Вас будет происходить обмен данными...

лично в маем случае настроенно так:

tablea                             tamleb
q                                        q
w                                         w
1                                         0
где 1 - говорит что данные нужно либо записать в  удаленную БД либо обновить данные в самой программе..

соединие (получение сессии)- проверка на 1 в программе - если есть передать в БД -получить от БД(записано - изменить 1 на 0)
если нет( попытаться получить данные от БД)  - если данные получены сверить и записать (если записанно - передать БД ок - в БД 1 меняется на 0)..

файл рандомного набора символов можете не использовать - это не обязательно (я просто показал пример)..


 $data = $_POST; - вс полученные от программы данне POST помещаем в масив data
далее обращаемся так $data['login']
$iduser = R::findOne('user', 'login= ?  AND idservice = ? ' , array($data['login'],$data['sservice']));  - поиск одной записи где
$переменная = R::findOne('таблица', 'строка= ?  AND строка = ? ' , array(с чем сравниваем]))

if ( $iduser ) - если да// if ( ! $iduser ) -если нет

if (password_verify($data['pass'], $iduser->password)) - если сравнивается зашиврованные пароль
if ($data['pass'], $iduser->password) - если сравнивается не зашиврованные пароль
где  $iduser - это 
$iduser = R::findOne('user', 'login= ?  AND idservice = ? ' , array($data['login'],$data['sservice']));

далее в файлах есть описание в моем же случае я всегда использую сессию соединения и данными манипулирую применяя эту сессию

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

1,140

(4 replies, posted in Russian)

как (принудительно) указать раскладку клавиатуры (язык) для поля edit?
как проверить на ввод email?

1,141

(10 replies, posted in Russian)

http://myvisualdatabase.com/forum/viewt … 667#p31667

1,142

(3 replies, posted in FAQ)

Используя скрипты или их части из этого примера Вам будет на много проще реализовать ваши проекты по работе
с удаленной БД.. В PHP файлах представленны различные варианты работы с БД (автомотическое создание таблиц, полей, связей. Создание, удаление, редактирование, сравнение, паиск, вывод масива данных. email сообщения.).. это я сделал (не зная) php, так что многие смогут реализовать на много большее. В работе с БД использовались REDBEANPHP и PHPMAILER.
  в архиве находятся

  .programm // собственно сама программа
    ..libeay32.dll - библиотека для работы с https
    ..libssl32.dll - библиотека для работы с https
    ..//остальные файлы описания не требуют
    .mail //PHPMAILER
    .www //сайт БД
    ..index.php //страница сайта
    ..logout.php //завершение сессии
    ..client_tab.php //таблица клиентов
    ..users_tab.php //таблица пользователей
    .api
    ..data_in.php // скрипт получает списки клиентов и записывает их в БД
    ..data_out.php // скрипт возвращает списки клиентов для обновления данных
    ..data_out_ok.php // скрипт получает запрос о том, что данные обновлены и отмечает это
    ..db_connect.php // скрипт соединения с БД
    ..delete_user.php // скрипт удаления пользователя
    ..edit_user.php // скрипт редактирования пользователя
    ..login.php // скрипт создания соединения
    ..logout.php // скрипт разрыва соединения
    ..mew_id.php // скрипт нового ID Service
    ..new_user.php // скрипт создания нового пользователя
    ..online.php //возвращает данные (сколько дней осталось и список пользователей) 
    ..passwor_autorisation.php //пароли и иные настройки
    ..random_idService.php //скрипт создания id для сервиса (рандомно)
    ..remind_id.php //скрипт напоминания по email
    .rb // REDBEANPHP
как только реализую работу с данными через мабильные устройства выложу исходники..
 
Видео пример работы  https://youtu.be/jWMABkBJTzs

1,143

(4 replies, posted in Russian)

DriveSoft wrote:

В SQLite один из вариантов хранения даты, является текстовый формат, для MySQL на сколько я помню, дата сохраняется исключительно как текст. Так и должно быть.

ясно
как мне в таком варианте вытащить дату и время?

form1.Memo1.Lines.add('date: ' + sqlexecute('SELECT date FROM h WHERE id=1')
form1.Memo1.Lines.add('time: ' + sqlexecute('SELECT time FROM h WHERE id=1')
(


(
 SELECT 
  TOTAL(Amount_delivery)
  FROM Amount_delivery   
  LEFT OUTER JOIN Amount_Shipment
   ON Amount_delivery.lot=Amount_Shipment.lot
  WHERE Amount_delivery.id_goods=goods.id
       AND Amount_delivery.id_client=client.id  
 
 ) -              
 (
 SELECT 
  TOTAL(Amount_shipment) 
  FROM Amount_shipment 
  WHERE Amount_shipment.id_goods=goods.id
      AND  Amount_shipment.id_client=client.id 

) 
                                                                                                                                                                                       
)
(
(
 (SELECT TOTAL(Amount_delivery) FROM Amount_delivery WHERE Amount_delivery.id_goods=goods.id)+
 (SELECT TOTAL(Amount_delivery) FROM Amount_delivery WHERE Amount_delivery.id_client=client.id)+
 (SELECT TOTAL(Amount_delivery) FROM Amount_delivery LEFT OUTER JOIN Amount_Shipment ON Amount_delivery.lot=Amount_Shipment.lot WHERE Amount_delivery.id_client=Amount_Shipment.id)
 ) -
 (
 (SELECT TOTAL(Amount_shipment) FROM Amount_shipment WHERE Amount_shipment.id_goods=goods.id) +
 (SELECT TOTAL(Amount_shipment) FROM Amount_shipment WHERE Amount_shipment.id_client=client.id)
) 
)  

какие именно поля нужны?

1,147

(4 replies, posted in Russian)

vovka3003 wrote:

А в чем вопрос-то..?

Тип данных текст
и везде дата и время записаны

1,148

(4 replies, posted in Russian)

2019-06-27 00:00:00.000
1899-12-30 22:40:22.000
вот так записываются дата и время , грид паказывает как положенно

http://myvisualdatabase.com/forum/misc.php?action=pun_attachment&item=5607&download=0

1,149

(11 replies, posted in Russian)

разобрался кадирует... это php проблему создает

1,150

(9 replies, posted in Russian)

Petr wrote:

Ок. Подробнее.
Например: есть таблица "приход" со столбцами "дата", "поставщик", "вес".
Добавляем строку и после нажатия кнопки с функцией "сохранить запись" на телефон уходит смс содержащая "поставщик" и "вес".

ясно,вот нечто подобное из моего проекта...
надеюсь поможет

//***********************************************************************************************
//передача смс сообщения в зависимости от выбора смс оператора***********************************
//***********************************************************************************************
    function Switchsms(smessage, SMS: string): boolean;
var
    ini : TInifile;
    ClickatellCom :TClickatellCom;
    TurboSmsUa :TTurboSmsUa;
    s, sResult, sLog, SMSPhone, SMSMessage,r: string;
    xml: string;
    slParam: TStringList;
begin
    ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sms.ini');
    SMSLogin:=ini.ReadString('senderlog','SMSLogin','');  // получаем логин
    SMSPassword:=ini.ReadString('senderlog','SMSPassword','');  // получаем пароль
    SMSAPI_ID:=ini.ReadString('senderlog','SMSAPI_ID','');  // получаем  required
    SMSSender:=ini.ReadString('senderlog','SMSSender','');  // получаем подпись отправителя
    SMSPhone:=SQLEXecute('SELECT telephonClient FROM servise WHERE id=' +frmServiceCen.tgList.sqlValue);  // получаем номер
    SMSMessage:= smessage;  // получаем сообщение
    try
      //если выбран смс оператор epochta
      if SMS = 'epochta' then
        begin
            sResult := SendSMS(SMSLogin, SMSPassword, SMSSender, SMSPhone, SMSMessage); // авторизация и отправка смс
            showmessage(sresult);
        end;
      //если выбран смс оператор turbosms
      if SMS = 'turbosms' then
         begin
            TurboSmsUa := TTurboSmsUa.Create;
            sLog := TurboSmsUa.Auth(SMSLogin, SMSPassword);  // авторизация
            sLog := TurboSmsUa.SendSMS(SMSSender, SMSPhone, SMSMessage); // отправка смс
            showmessage(sLog);
         end;
       //если выбран смс оператор turbosms  
       if SMS = 'Clickatel' then
          begin
           ClickatellCom := TClickatellCom.Create;
           s := ClickatellCom.SendSMS(SMSLogin, SMSPassword, SMSAPI_ID, SMSPhone, SMSMessage);// авторизация и отправка смс
           showmessage(s);
          end;
    finally
        ini.Free;
        ClickatellCom.Destroy;
        TurboSmsUa.Destroy;
    end;
end;

//***********************************************************************************************
//выбор смс сообщения в соотвествии с настройками************************************************
//***********************************************************************************************
function smstr(str: string): string;
var
ini,langIni,inir:TiniFile;
s,t,strshow,sS,sDl,sNM,sAM:string;
sFirstName:string = SQLEXecute('SELECT firstNameClient FROM servise WHERE id=' +frmServiceCen.tgList.sqlValue);
sTwoName:string = SQLEXecute('SELECT twoNameClient FROM servise WHERE id=' +frmServiceCen.tgList.sqlValue);
sLastName:string = SQLEXecute('SELECT lastNameClient FROM servise WHERE id=' +frmServiceCen.tgList.sqlValue);
sModel:string = SQLEXecute('SELECT model FROM servise WHERE id=' +frmServiceCen.tgList.sqlValue);
sSN:string = SQLEXecute('SELECT serialNamber FROM servise WHERE id=' +frmServiceCen.tgList.sqlValue);
sTO:string = SQLEXecute('SELECT nameTypeOfEquipment FROM TypeOfEquipment LEFT OUTER JOIN servise ON TypeOfEquipment.id=servise.id_TypeOfEquipment WHERE servise.id=' +frmServiceCen.tgList.sqlValue);
begin
  ini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sms.ini');
  inir :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sov.ini');
  strshow:=inir.ReadString('lang','directlang', '');
  langIni:=TIniFile.Create(ExtractFilePath (ParamStr (0))+ strshow);
  sS:= SQLExecute('SELECT IFNULL(SUM(sumInPrice.inPrice),0) FROM sumInPrice LEFT OUTER JOIN servise ON servise.id=sumInPrice.id_servise WHERE servise.id='+ frmServiceCen.tgList.sqlValue);
  sDl:= IntToStr(SQLExecute('SELECT IFNULL(SUM(listWorkOff.priceWorkOff * listWorkOff.klVoWorkOff),0)-"'+sS+'" FROM listWorkOff LEFT OUTER JOIN servise ON servise.id=listWorkOff.id_servise WHERE servise.id='+ frmServiceCen.tgList.sqlValue));
  sAM:=inir.ReadString('othersetting','AdressMas','');
  sNM:=inir.ReadString('othersetting','NameMas','');
  try
   //если нажата кнопка отправки сообщения в форме frmServiceCen
   if (str='frmServiceCen') then begin
         //загрузить статус оборудования
         t:=SQLEXecute('SELECT id_status FROM servise WHERE id=' +frmServiceCen.tgList.sqlValue);
              //если статус оборудования * и сообщение включно то вернуть в результат текст сообщения %0:s
              if (t='1')  then begin
                         if (ini.ReadString('smstr','et','')='1')  then  result:= Format (langIni.ReadString('smstr','et',''),[sFirstName,sTwoName,sLastName,sModel,sSN,sDl,sNM,sAM,sNM,sTO] )else
                           MessageBox(mess31, mess32, MB_OK+MB_ICONINFORMATION);
                         end;
              if (t='2')  then begin
                         if (ini.ReadString('smstr','etd','')='1')  then  result:=Format (langIni.ReadString('smstr','etd',''),[sFirstName,sTwoName,sLastName,sModel,sSN,sDl,sAM,sNM,sTO] ) else
                           MessageBox(mess31, mess32, MB_OK+MB_ICONINFORMATION);
                         end;
              if (t='3')  then begin
                         if (ini.ReadString('smstr','dr','')='1')  then  result:=Format (langIni.ReadString('smstr','dr',''),[sFirstName,sTwoName,sLastName,sModel,sSN,sDl,sAM,sNM,sTO] ) else
                           MessageBox(mess31, mess32, MB_OK+MB_ICONINFORMATION);
                         end;
              if (t='4')  then begin
                         if (ini.ReadString('smstr','epae','')='1')  then  result:=Format (langIni.ReadString('smstr','epae',''),[sFirstName,sTwoName,sLastName,sModel,sSN,sDl,sAM,sNM,sTO] ) else
                           MessageBox(mess31, mess32, MB_OK+MB_ICONINFORMATION);
                         end;
              if (t='5')  then begin
                         if (ini.ReadString('smstr','eur','')='1')  then  result:=Format (langIni.ReadString('smstr','eur',''),[sFirstName,sTwoName,sLastName,sModel,sSN,sDl,sAM,sNM,sTO] ) else
                           MessageBox(mess31, mess32, MB_OK+MB_ICONINFORMATION);
                         end;
              if (t='6')  then begin
                         if(ini.ReadString('smstr','eaatic','')='1')  then  result:=Format (langIni.ReadString('smstr','eaatic',''),[sFirstName,sTwoName,sLastName,sModel,sSN,sDl,sAM,sNM,sTO] )else
                           MessageBox(mess31, mess32, MB_OK+MB_ICONINFORMATION);
                         end;
            end;
     //если нажата кнопка отправки сообщения в форме frmMasterWork
     if (str='frmMasterWork') then begin
         //загрузить статус оборудования
         t:=SQLEXecute('SELECT id_status FROM servise WHERE id=' +IntToStr(frmMasterWork.tgListServise.dbItemID));
              //если статус оборудования * и сообщение включно то вернуть в результат текст сообщения
if (t='1')  then begin
                         if (ini.ReadString('smstr','et','')='1')  then  result:=Format (langIni.ReadString('smstr','et',''),[sFirstName,sTwoName,sLastName,sModel,sSN,sDl,sAM,sNM,sTO] ) else
                           MessageBox(mess31, mess32, MB_OK+MB_ICONINFORMATION);
                         end;
              if (t='2')  then begin
                         if (ini.ReadString('smstr','etd','')='1')  then  result:=Format (langIni.ReadString('smstr','etd',''),[sFirstName,sTwoName,sLastName,sModel,sSN,sDl,sAM,sNM,sTO] ) else
                           MessageBox(mess31, mess32, MB_OK+MB_ICONINFORMATION);
                         end;
              if (t='3')  then begin
                         if (ini.ReadString('smstr','dr','')='1')  then  result:=Format (langIni.ReadString('smstr','dr',''),[sFirstName,sTwoName,sLastName,sModel,sSN,sDl,sAM,sNM,sTO] ) else
                           MessageBox(mess31, mess32, MB_OK+MB_ICONINFORMATION);
                         end;
              if (t='4')  then begin
                         if (ini.ReadString('smstr','epae','')='1')  then  result:=Format (langIni.ReadString('smstr','epae',''),[sFirstName,sTwoName,sLastName,sModel,sSN,sDl,sAM,sNM,sTO] ) else
                           MessageBox(mess31, mess32, MB_OK+MB_ICONINFORMATION);
                         end;
              if (t='5')  then begin
                         if (ini.ReadString('smstr','eur','')='1')  then  result:=Format (langIni.ReadString('smstr','eur',''),[sFirstName,sTwoName,sLastName,sModel,sSN,sDl,sAM,sNM,sTO] ) else
                           MessageBox(mess31, mess32, MB_OK+MB_ICONINFORMATION);
                         end;
              if (t='6')  then begin
                         if(ini.ReadString('smstr','eaatic','')='1')  then  result:=Format (langIni.ReadString('smstr','eaatic',''),[sFirstName,sTwoName,sLastName,sModel,sSN,sDl,sAM,sNM,sTO] )else
                           MessageBox(mess31, mess32, MB_OK+MB_ICONINFORMATION);
                         end;
            end;
      finally
    end;
ini.free;
inir.free;
LangIni.free;

end;

//***********************************************************************************************
//кнопка передачи смс сообщения******************************************************************
//***********************************************************************************************
procedure frmServiceCen_bsmsout_OnClick (Sender: TObject; var Cancel: boolean);
var
smsini:TInifile;
smsmessage: string;
begin
smsini :=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\sms.ini');
//если смс оператор выбран
   if smsini.ReadString('sender', 'sendersms', '') <> '' then begin
    //вызвать функцию smstr и получить текст смс сообщения
    smsmessage:=smstr('frmServiceCen');
     // если есть текст в смс сообщении
     showmessage(smsmessage);
     if smsmessage<>'' then begin
       //передать в функцию Switchsms текст смс и имя оператора
       if smsini.ReadString('sender', 'sendersms', '') = 'epochta' then Switchsms (smsmessage,'epochta') else
       if smsini.ReadString('sender', 'sendersms', '') = 'turbosms' then Switchsms (smsmessage,'turbosms') else
       if smsini.ReadString('sender', 'sendersms', '') = 'Clickatel' then Switchsms (smsmessage,'Clickatel');
    end;
  //если смс оператор не выбран
  end else  MessageBox(mess33, mess32, MB_OK+MB_ICONINFORMATION);
end;