1,276

(10 replies, posted in Russian)

oleg45112 wrote:

Дмитрий, добрый день.
Пытаюсь переделать Ваш код из примера "печать отчёта скриптом" под свои нужды
при выполнении скрипта
на строке
    Form1.frxReport.Clear;
выдается ошибка = Undeclared identifier: 'frxReport' at 37:33
не подскажете в чём может быть дело?
P.S.: что удивительно Ваш пример работает без проблем, а в моей программе выдаёт эту ошибку
стоит версия программы 5.2
Заранее спасибо, Олег

выложите Вашу программу

1,277

(3 replies, posted in General)

VascoMorais wrote:

Hi Dmitry, i still can't use SendMail with Gmail so i had an SMTP relay working , but the problem is that some emails have that SMTP Server banned so i can't send them emails from this relay.
Is there any other way to implement a SendMail function ? like a script or an external SMTP mailer or something?
Is there anyway i can "mess" with the sendmail function settings? like adding SSL or TLS  or using the "allow autenthcation" option etc?
Many thanks

http://myvisualdatabase.com/forum/viewtopic.php?id=5086

1,278

(2 replies, posted in General)

kees.krause wrote:

Is is possible that a particular form is opened when I check a checkbox?

yes

procedure Form1_CheckBox1_OnClick (Sender: TObject);
begin
  if Form1.CheckBox1.Checked=true then form2.Show;
end;

как правильно проверить колличество колонок грида в условии?

думаю что поля b и c  лучше так же заполнять через кнопку save а результаты логики передовать в (скрытые компоненты) полей b и c на форме...

abgroup-artur wrote:

Как открыть окно редактирования записи БД в модальном окне для id из переменной?

не совсем понял вопрос, но возможно это поможет
1)

procedure Form1_TableGrid1_OnCellDoubleClick (Sender: TObject; ACol, ARow: Integer);
var
id:integer = Form1.TableGrid1.dbItemID;
begin
 ShowRecord(Form2, 'ww', id );
end;

 
2) так можно переключаться между окнами

procedure Form2_OnShow (Sender: TObject; Action: string);
begin
 ShowRecord(Form2, 'ww', Form1.TableGrid1.dbItemID );
end;

procedure Form1_TableGrid1_OnCellDoubleClick (Sender: TObject; ACol, ARow: Integer);
begin
  Form2.Show;
end;

1,282

(1 replies, posted in Russian)

как добавить переменную7

SQLExecute(
    'CREATE TRIGGER IF NOT EXISTS my_lis_insert AFTER INSERT ON servise '+
    'BEGIN '+
    '    INSERT INTO logiUsers(login, action, date) VALUES ("'+sU+'",''New Service Klient  ID: ''  "'+sT+'", datetime(''now'',''localtime'')); '+
    'END;'
    );

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

// запрет  открытия окна по двойному клику
  Form1.TableGrid1.dbPopupMenu.Items[0].Enabled := False;

1,284

(4 replies, posted in FAQ)

procedure Form1_OnShow (Sender: TObject; Action: string);
begin
  sM:=TWindowsMediaPlayer.create(form1);
  sM.OnClick := @WMOnClick;
  sM.OnDoubleClick := @WMOnDoubleClick;
  With sM do
    begin
        TabOrder:= 1;
        Align:= alclient;
        Parent:= Form1.Panel1;
        Visible:= true;
     end;
  sM.uiMode:= 'none';
end;

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

sM.uiMode:= 'none';

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

vit007 wrote:

Спасибо

для удаления, кроме галочки, надо было еще добавить обновление основной таблицы.

Объясните как в этом запросе получить название, а не цифру:

frmNew.Edit3.Text := SQLExecute('SELECT id_group FROM client WHERE id='+frmNew.ComboBox2.sqlValue);

вообще так..

frmNew.Edit3.Text := SQLExecute('SELECT set1 FROM groupN LEFT OUTER JOIN client ON groupN.id=client.id_groupN   WHERE client.id='+frmNew.ComboBox2.sqlValue);

Взять значение из поля set  таблицы group объеденонной с таблицей client  по условию groupN.id=client.id_groupN  где  client.id='+frmNew.ComboBox2.sqlValue

я так понимаю, что имена set и group зарезевированны (поменяйте эти имена во всех таблицах)

Дмитрий, может все таки возможно сделать вывод записей в грид более чем со 2 уровня таблицы без скриптов , Это решило-бы многие вопросы..
к примеру сделать возможность выводить записи из таблиц , по направлению их связей.. типа:
company.id_request.id_client

frmNew.Edit1.Text := frmNew.Edit1.Text + frmClient.TableGrid1.Cells[ACol,ARow];

не верный запрос
и у вас для этого есть combobox2... на форме frmNew.. Выего не привязали....
у Вас много не нужных элементов на формах (меня это путает)
и еще отображение информации в таблице без приминения скриптов возможно только от 1 ко 2 уровеню далее только скриптом

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

vit007 wrote:

Спасибо за пример.

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

Блин, что нет скрипта, под клавишей сохранить, чтоб сохраняло и в другую таблицу...
Или добавить в стандартные настройки доп. функционал... Хех...

Может Дмитрий, что-то еще подсоорудит smile

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

Данный вариант считаю самым правильным

если скапировать или вырезать элемент на форме, то в буфере получаем такое:

<?xml version="1.0"?>
<clipboard><TdbImage Name="Image1" Left="16" Top="40" Width="161" Height="137" dbAnchors="2211" dbEnabled="True" dbVisible="True" Cursor="crDefault" BiDiMode="bdLeftToRight" Hint="" ShowHint="False" dbFileName="media\SC.png" Proportional="True" Stretch="False" Transparent="False" AutoSize="False" Center="False"/></clipboard>

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

1,292

(28 replies, posted in Russian)

Andrei wrote:

Здравствуйте.
Есть переменные

sUser: string = '';
   idUser: integer;
   idDepartament: integer;
   isAdmin: boolean = False;

Заполнение
idDepartament := SQLExecute('SELECT IFNULL(id_departament, 0) FROM users WHERE id = '+IntToStr(idUser));

Подскажите как в ComboBox в событии формы OnShow вывести только одно значение (не отображались другие записи)  из связанной таблицы?
Как правильно написать?

procedure FrmAddSch_OnShow (Sender: TObject; Action: string);
begin
  FrmAddSch.ComboBox2.dbsqlexecute (select KOD from departament where='idDepartament');
  end;
begin
end.

по какому условию Вы хотите получить id?
 
select KOD from departament where='idDepartament'
запрос не имеет смысла

sM:TWindowsMediaPlayer;

procedure Form1_OnShow (Sender: TObject; Action: string);
begin
  sM:=TWindowsMediaPlayer.create(form1.Panel1);
  With sM do
    begin
        TabOrder:= 1;
        Align:= alclient;
        Parent:= Form1.Panel1;
        Visible:= true;
     end;
  sM.uiMode:= 'none';
end;

как перехватить двойной клик по динамическому объекту?

1,295

(0 replies, posted in FAQ)

Инструкция
файлы
  autoUpdate.bat - обновление после завершения работы
  autoUpdate_r.bat  - обновление и перезагрузка программы
в bat файлах настройте Ваши директории
              пример
                      %~dp0autoUpdate  - где %~dp0 корень а autoUpdate папка в карне
   
в проекте настройте адрес проверки версии программы

 NewV:=TIniFile.Create(ExtractFilePath (ParamStr (0))+'..\updateOut\autoUpdate.ini'); // файл с новой версией

где ExtractFilePath (ParamStr (0))+'..\updateOut\autoUpdate.ini - относителный путь к файлу
или

 NewV:=TIniFile.Create('C:\updateOut\autoUpdate.ini'); // файл с новой версией

где C:\updateOut\autoUpdate.ini - обсолютный путь к файлу
   
в файле проверки версии программы
укажите директорию  из которой будут капироваться файлы
    dir=..\updateOut\update

   
 
ВНИМАНИЕ! в директории из которой будут капироваться файлы
обязателен файл no.txt (для защиты от случайности)
в данном файле содержатся имена файлов запрещенных к капированию (sqlite.db, sqlite3.dll, no.txt )
если файла не будет на месте, то bat не сработает..
 
далее можно нафантазировать разных вариантов )))
 
 
Параметры батника :
источник : обязательный параметр. Определяет расположение и имена файлов которые вам нужно скопировать. Данный параметр должен включать устройство или путь.

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

/w : отображает сообщение "Press any key to begin copying file(s)" и ждет вашего ответа прежде чем начать копирование файлов.

/p : будет выдавать запрос перед созданием каждого файла.

/c : игнорирование ошибок.

/v : проверяет каждый файл после их записи на идентичность исходным. В Windows XP он не используется. Оставлен для совместимости с MS-DOS файлами

/q : тихий режим. Не выводит сообщения во время работы.

/f : отображает имена файлов при копировании.

/l : отобразить имена файлов которые будут копироваться.

/g : Копирование зашифрованных файлов в целевой каталог, не поддерживающий шифрование.

/d[:mm-dd-yyyy] : копировать файлы которые изменены позже указаной даты, включаю указанную. Если не указать значение mm-dd-yyyy (месяц-день-год), xcopy будет копировать файлы которые более новые чем в папке назначения. Вообщем эта команда позволяет обновить файлы, которые изменились.

/u : копировать только те файлы которые уже есть в папке назначения. Т.е. обновить их.

/i : если источник это директория или содержит wildcards ( ну типа * ) и целевой_объект не указан, то xcopy предполагает что целевой_объект это директория и создает ее. По умолчанию xcopy запрашивает у вас целевой_объект это директория или файл.

/s : директории и поддиректории в которых нет файлов будут пропущены. Если опустить этот параметр, xcopy работает внутри одной директории.

/e : копировать все поддиректории, даже если они пустые. Эквивалентен сочетанию ключей /s /e. Совместим с ключом /t.

/t : Создание структуры каталогов без копирования файлов. Пустые каталоги и подкаталоги не включаются в процесс копирования. Для создания пустых каталогов и подкаталогов используйте сочетание ключей /t /e.

/k : при копировании сохраняется атрибут "только для чтения". По умолчанию он сбрасывается.

/r : перезапись файлов, предназначенных только для чтения.

/h : копировать скрытые и системные файлы. По умолчанию xcopy не копирует эти файлы.

/a : копировать файлы у которых имеется атрибут архива. Сам атрибут при этом сохраняется. Для установки этого атрибута можно использовать команду attrib.

/m : почти тоже что и с ключем /a, только в данном случае атрибут архива будет сбрасываться у исходных файлов.

/n : делает имена файлов и папок короткими. Может понадобиться в случае копирования с FAT на NTFS. Потомучто FAT ( 8.3 символа ) не поддерживает длинные имена как NTFS.

/o : копируется информация о пользователе файла и информация DACL (discretionary access control list).

/x : копирование параметров аудита файлов и информация SACL (подразумевает ключ /o).

/exclude:файл1[+[файл2]][+[файл3]]... : список файлов, содержащих строки с критериями для исключения файлов и папок из процесса копирования. Каждая строка должна располагаться в отдельной строке файла. Если какая-либо из строк совпадает с любой частью абсолютного пути к копируемому файлу, такой файл исключается из операции копирования. Например, указав строку \obj\ или .obj, можно исключить все файлы из папки obj или все файлы с расширением OBJ соответственно.

/y : чтобы не спрашивал когда нужно перезаписать уже существующий файл.

/-y : противоположность ключу /y .

/z : копировать по сети в возобновляемом режиме.

/? : вывести помощь. Подсказки по параметрам команды.

а... просто очередь

о нет не так спросил,  мне нужно сообщить пользователю что копирвание директории с вложенными файлами завершена

1,298

(9 replies, posted in FAQ)

Дмитрий, спасибо за напоминание по PHP!
 
И так в архиве два проекта,  отправка писем и регистрация на мыло через php на вашем хостинге
фал php также имеет  пароль для доступа..
что касается работы на  https то тут Вам к хозяину хостинга, по умолчанию http
 
серверная часть сделана на PHPMailer  он так же есть в архиве (папка PHP)
перед заливкай на сервер поменяйте пароль доступа в файле sendMail.php

$pol_shifr = '1230';// пороль страницы

не забудьте изменить пароль в самом проекте

function mailerphp (Host,Username,Password,SMTPSecure,Port,mailFrom,mailTo,Subject,mailMessage: string ): string;
var
    slParam: TStringList;
    pass:string;
begin
    pass:='1230';  // пороль страницы
    slParam := TStringList.Create;
    slParam.Add('pass='+pass);
    slParam.Add('Host='+Host);
    slParam.Add('Username='+Username);
    slParam.Add('Password='+Password);
    slParam.Add('SMTPSecure='+SMTPSecure);
    slParam.Add('Port='+Port);
    slParam.Add('setFrom='+mailFrom);
    slParam.Add('addAddress='+mailTo);
    slParam.Add('Subject='+Subject);
    slParam.Add('mmessage='+mailMessage);

    HTTPPost('http://Ваш_url/sendmail.php', slParam);
end;

соответственно нужно указать Ваш адрес файла sendmail.php
     
загрузку файлов реализовать не получилось, кто осилит скиньте пример..

DirectoryCopy( newV.ReadString('version','dir', ''),'autoUpdate' )

как проверить скапировалась ли директория?

1,300

(1 replies, posted in FAQ)

В связи с тем, что не у всех работают порты 587, 25, 465.. а у некоторых как выяснилось вообще провайдеры блакируют работу портов (не знаю как) .. telnet не всегда работает одекватно.. Я переделал проект с регитрацией через почту. Теперь письмо отправляется через зарание подготовленную веб форму..
Пусть проект так и называется mailSerialWeb

инструкция по настройке (на скорую руку) https://yadi.sk/i/yS-gl4S9qRIxoQ