1,176

(2 replies, posted in Talks about all)

ошибка
http://myvisualdatabase.com/forum/misc.php?action=pun_attachment&item=5578&download=0

1,177

(68 replies, posted in Russian)

Vyvern wrote:

Здравствуйте!
Возникла необходимость в повторении однотипного кода. Чтобы не нагружать скрипт, планирую выделить необходимый код в отдельную функцию, чтобы потом просто вызвать ее. Однако не могу понять, как правильно осуществить вызов.

   procedure Hide_Components (Sender: TObject);
var
    i: integer;
    lr,lrd,lrpc: TLabel;
    er: TEdit;

begin
    for i:= 1 to 10 do 
    begin
        lr:=TLabel(Form2.FindComponent('LRes'+IntToStr(i)));
        lrd:=TLabel(Form2.FindComponent('LResDelta'+IntToStr(i)));
        lrpc:=TLabel(Form2.FindComponent('LRespc'+IntToStr(i)));
        er:=TEdit(Form2.FindComponent('ERes'+IntToStr(i)));
        lr.Enabled:=false;
        lrd.Enabled:=false;
        lrpc.Enabled:=false;
        er.Enabled:=false;
        er.Text:='';
    end;
end;

Должно получиться нечто вроде

procedure Form2_Button1_OnClick(Sender: TObject);
begin
    if .... rhen
    .......
    Hide_Components ();
end;

Я не прошу писать за меня готовое решение - понимаю, что работы и помимо этого навалом. Но, возможно, Вы точно знаете, где можно подсмотреть пример для моего случая? Возможно, решение есть в известных Вам проектах. На сторонних форумах, которые я изучал, по подобным вопросам в основном приводятся примеры с простейшими математическими вычислениями (типа а+в), что мне не подходит.
Заранее благодарю за любую помощь.

(Sender: TObject); - (просит Вас что-то передать)
тоесть тут Hide_Components (НУЖНО ЧТО_ ТО ПЕРЕДАТЬ );

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

1,178

(2 replies, posted in Russian)

а возможно-ли установить таймаут в  цикле?

for i:=0 to c do
  begin
   http.send('password=???&idapp='+list[i]+'&firstnameapp='+sqlexecute('SELECT firstname FROM app WHERE id='+list[i])+'&lastnameapp'+sqlexecute('SELECT lastname FROM app WHERE id='+list[i])'');
  end;
Andrei wrote:
DriveSoft wrote:

Проверьте, правильно ли выглядит расшифрованный пароль

ShowMessage( DecryptRC5('826C589632S1385AD207EEC08E12FC501B7C12030E446286F249643030000', 'keytoencrypt') );

Да правильно.
Проверить вы не могли, я изменил несколько знаков.

Вот пример с "password", тоже не работает.
frmWait.Show;
     Application.ProcessMessages;
     {$MySQL disable_connectdialog}
     frm_login.MySQLConnection.Server := '198.168.0.5';
     frm_login.MySQLConnection.Port := 3306;
     frm_login.MySQLConnection.Username := 'root';
     frm_login.MySQLConnection.Password := DecryptRC5('74805FB15BCB1F96607B45FCA0532D5BE446286F2496430300000000', 'keytoencrypt');
     frm_login.MySQLConnection.Database := 'kart';

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

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

1,180

(2 replies, posted in Russian)

vovka3003 wrote:

Исходя из того, что указано в "Content-Type", - очевидно в формате "application/x-www-form-urlencoded" внутри Send. Хотя если данных много, то наверное лучше использовать "multipart/form-data"...

вот что я имел в виду

var
http: variant;


procedure Form1_Button2_OnClick (Sender: TObject; var Cancel: boolean);
var
i,c:integer;
list:TStringList;
url: string = 'https://url.php';

begin
 list:=TStringList.Create;
 list.Text:= SQLExecute( 'SELECT group_concat(id, char(13) || char(10)) FROM app WHERE ss=1' );
 c:=list.Count-1;
 http:=createoleobject('WinHttp.WinHttpRequest.5.1');
 http.open('POST', url, True);
 http.SetRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
 for i:=0 to c do
  begin
   http.send('password=???&idapp='+list[i]+'&firstnameapp='+sqlexecute('SELECT firstname FROM app WHERE id='+list[i])+'&lastnameapp'+sqlexecute('SELECT lastname FROM app WHERE id='+list[i])'');
  end;
end;

в мемо выводит как задумано ))...
позже попробую на php  -- надеюсь это правельно

1,181

(7 replies, posted in Russian)

MySQL Workbench — инструмент для визуального проектирования баз данных
я так понимаю что на изображении представленна вазможнасть подклечения к удаленной БД по ssl...

1,182

(7 replies, posted in Russian)

Andrei wrote:
sibprogsistem wrote:

на сколько я понимаю то только с помошью ssl сертификата
http://myvisualdatabase.com/forum/viewtopic.php?id=4274

Насколько я понимаю сертификаты тоже будут доступны пользователю. С помощью сертификата подключиться через MySQL Workbench разве не получится?...

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

1,183

(7 replies, posted in Russian)

Andrei wrote:

Здравствуйте.
Подскажите как закрыть возможность использования/просмотра явно заданного пароля для сетевой авторизации

procedure frmlogin_OnShow (Sender: string; Action: string);
begin
     frmWait.Show;
     Application.ProcessMessages;

     {$MySQL disable_connectdialog}
     frm_login.MySQLConnection.Server := '192.168.0.5;
     frm_login.MySQLConnection.Port := 3306;
     frm_login.MySQLConnection.Username := 'root';
     frm_login.MySQLConnection.Password := 'P@ssw0rd';
     frm_login.MySQLConnection.Database := 'kart';
.....

цель - не возможность использовать данный пароль в оснастках типа MySQL Workbench и подобных.
Можно предлагать танцы с бубном для пользователя (прописанного в авторизации) и пароля.
Как вариант шифрование MD5 для пользователя root (или любого пользователя имеющего права update), но чтоб отображаемый ХЕШ не давал доступа к базе данных.

на сколько я понимаю то только с помошью ssl сертификата
http://myvisualdatabase.com/forum/viewtopic.php?id=4274

1,184

(2 replies, posted in Russian)

работает, спасибо!

1,185

(2 replies, posted in Russian)

как вывести данные таблицы в мемо?

form1.Memo1.text:=(sqlexecute('SELECT aa FROM A'));


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

1,186

(2 replies, posted in Russian)

мне нужно взять из таблицы все записи где есть  onl =1
и передать их  в php..

procedure userall;
var
   url:string;
begin
      url:='https://url.php';
      http.open('POST', url, true);
      http.SetRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
      http.send('password=**');   
      timerAu:=TTimer.create(frmLogin);
      timerAu.Enabled:=True;
      timerAu.Interval:=1000;
      timerAu.OnTimer:=@DUAll;
end;

как принять их со стороны php примерно догадываюсь ))))..
а вот как их передать?

1,187

(3 replies, posted in Russian)

max1779signal wrote:

Не, так не пойдет, потому что прийдется всю базу перелопачивать.
Как это отфильтровать с помощью скрипта. Ни как сообразить не могу...

procedure Form1_ComboBox1_OnChange (Sender: TObject);
begin
 if form1.ComboBox1.dbItemID<>-1 then form1.ComboBox2.dbSQLExecute('SELECT bb FROM B LEFT OUTER JOIN A ON B.id_A=A.id  WHERE A.id ='+ Form1.ComboBox1.sqlValue)else
 form1.ComboBox2.dbSQLExecute('SELECT bb FROM B '); // иначе вывести все записи
Form1.ComboBox2.dbUpdate;
end;

1,188

(3 replies, posted in Russian)

поробуйте

1,189

(11 replies, posted in Russian)

ivan wrote:

ув. sibprogsistem! можете пример проекта приложить?

да, конечно

1,190

(11 replies, posted in Russian)

Вот Вам пример меню из моего проекты.. можно хоть на всех формах проекта запускать..

//------------------------------- выподающее меню  ----------------------------------------------
//***********************************************************************************************
//***********************************************************************************************
//Выпадающее меню работает в трех формах frmAdmin, frmMasterWork и frmServiceCen*****************
//переменная mur содержит имя формы в которой должно отображаться выподающее меню****************
//***********************************************************************************************
procedure SwitchMenu (Sender, r: string);
var
   fiLang,reporfile:TStringList;
   i,s,t,c: integer;
   subfiLangi,mnFilereport,subfiLangiEdit,subfiLangirepor,subfiLangiDel,subfiLangiPrint: TMenuItem;
   subfiLangipdf,mnFile,mnfiLangi,subFileNextUser,subFileClose,mnDictionary,subDictionaryPriceList : TMenuItem;
   subDictionaryDash1,subDictionaryDash2,subDictionaryDash3,subDictionaryDash4,subDictionaryDash5,subDictionaryDash6: TMenuItem;
   subDictionaryStatusEquipment,subDictionaryCompany,subDictionaryEquipment,subDictionaryBrand : TMenuItem;
   subDictionaryAccessories,subabout,subFilereport,mnActivities,subEvents,subDonations, mnSetting, subTelMask,subKey : TMenuItem;
   rta:TMainMenu;
   mur:TForm;
begin
  // если открыта форма * то переменная содежит имя этой формы
  if sender = 'frmAdmin' then mur:=frmAdmin;
  if sender = 'frmMasterWork' then mur:=frmMasterWork;
  if sender = 'frmServiceCen' then mur:=frmServiceCen;
  if r = '1' then rta.free;

//************ создаем выподающее меню ***************************
       //меню файл
   mnFile := TMenuItem.Create (mur);
   mnFile.Caption := pupmFa;

       subFileNextUser := TMenuItem.Create (mur);
       subFileNextUser.Caption := pupmnuser;
       subFileNextUser.OnClick := @MenuClick1;

       subFileClose := TMenuItem.Create (mur);
       subFileClose.Caption := pupmex;
       subFileClose.OnClick := @MenuClick2;
       //меню словари
   mnDictionary := TMenuItem.Create (mur);
   mnDictionary.Caption := pupmlib;

       subDictionaryPriceList := TMenuItem.Create (mur);
       subDictionaryPriceList.Caption := pupmpr;
       subDictionaryPriceList.OnClick := @MenuClick3;

       subDictionaryDash1:= TMenuItem.Create (mur);
       subDictionaryDash1.Caption := '-';
       subDictionaryDash1.Enabled:= False;

       subDictionaryStatusEquipment := TMenuItem.Create (mur);
       subDictionaryStatusEquipment.Caption := pupmst;
       subDictionaryStatusEquipment.OnClick := @MenuClick5;

       subDictionaryDash2:= TMenuItem.Create (mur);
       subDictionaryDash2.Caption := '-';
       subDictionaryDash2.Enabled:= False;

       subDictionaryCompany := TMenuItem.Create (mur);
       subDictionaryCompany.Caption := pupmco;
       subDictionaryCompany.OnClick := @MenuClick6;

       subDictionaryEquipment := TMenuItem.Create (mur);
       subDictionaryEquipment.Caption := pupmeq;
       subDictionaryEquipment.OnClick := @MenuClick7;

       subDictionaryBrand := TMenuItem.Create (mur);
       subDictionaryBrand.Caption := pupmbr;
       subDictionaryBrand.OnClick := @MenuClick8;

       subDictionaryDash3:= TMenuItem.Create (mur);
       subDictionaryDash3.Caption := '-';
       subDictionaryDash3.Enabled:= False;

       subDictionaryAccessories := TMenuItem.Create (mur);
       subDictionaryAccessories.Caption := pupmeex;
       subDictionaryAccessories.OnClick := @MenuClick9;
      // Меню настройки
   mnSetting := TMenuItem.Create (mur);
   mnSetting.Caption := pupmms;

       subTelMask := TMenuItem.Create (mur);
       subTelMask.Caption := pupmtm;
       subTelMask.OnClick := @MenuClick12;
      // меню помощь
   mnActivities := TMenuItem.Create (mur);
   mnActivities.Caption := pupmhe;

       subEvents := TMenuItem.Create (mur);
       subEvents.Caption := pupmsi;
       subEvents.OnClick := @MenuClick10;

       subDictionaryDash4:= TMenuItem.Create (mur);
       subDictionaryDash4.Caption := '-';
       subDictionaryDash4.Enabled:= False;

       subDonations := TMenuItem.Create (mur);
       subDonations.Caption := pupmab;
       subDonations.OnClick := @MenuClick11;

       subKey := TMenuItem.Create (mur);
       subKey.Caption := 'Регистрация ';
       subKey.OnClick := @MenuClick13;

      // меню отчет
 mnFilereport := TMenuItem.Create (mur);
 mnFilereport.Caption := pupmreport;

         subFilereport:= TMenuItem.Create (mur);
         subFilereport.Caption := pupmreportnew;
         subFilereport.OnClick := @clicknew;

         subDictionaryDash5:= TMenuItem.Create (mur);
         subDictionaryDash5.Caption := '-';

 mnfiLangi := TMenuItem.Create (mur);
 mnfiLangi.Caption := pupmlang;

   // выводим выподающее меню
   rta:=TMainMenu.Create(mur);
   rta.Items.Add(mnFile);
       mnFile.Add(subFileNextUser);
       mnFile.Add(subFileClose);

   rta.Items.Add(mnDictionary);
        mnDictionary.Add(subDictionaryPriceList);
        mnDictionary.Add(subDictionaryDash1);
        mnDictionary.Add(subDictionaryStatusEquipment);
        mnDictionary.Add(subDictionaryDash2);
        mnDictionary.Add(subDictionaryCompany);
        mnDictionary.Add(subDictionaryEquipment);
        mnDictionary.Add(subDictionaryBrand);
        mnDictionary.Add(subDictionaryDash3);
        mnDictionary.Add(subDictionaryAccessories);
 // выводим в выподающем меню список файлов мультиязычности
 rta.Items.Add(mnfiLangi);

 fiLang := TStringList.Create;
 fiLang.Text := GetFilesList('languages','*.ini',False);
 s := fiLang.Count-1;
for i:=0  to s  do
 begin
  subfiLangi:= TMenuItem.Create (mur);
  subfiLangi.Caption := ExtractFileName(fiLang[i]);
  Delete(subfiLangi.Caption, Length(subfiLangi.Caption) -3 , 4);
  subfiLangi.Hint := (fiLang[i]);
  mnfiLangi.Add(subfiLangi);
  subfiLangi.OnClick := @clicklang;
  end;

 // выводим в выподющем меню список фалов отчетов
rta.Items.Add(mnFilereport);
   mnFilereport.Add(subFilereport);
   mnFilereport.Add(subDictionaryDash5);
reporfile := TStringList.Create;
    reporfile.Text := GetFilesList( 'Report\','*.fr3',True); //ExtractFilePath(Application.ExeName) +

     t := reporfile.Count-1;
     for i:=0  to t  do
     begin
         subfiLangirepor:= TMenuItem.Create (mur);
         subfiLangirepor.Caption := ExtractFileName(reporfile[i]);
         subfiLangirepor.Hint := (reporfile[i]);
         mnFilereport.Add(subfiLangirepor);

         Delete(subfiLangirepor.Caption, Length(subfiLangirepor.Caption) -3 , 4);

         subfiLangiEdit := TMenuItem.Create(mur);
         subfiLangiEdit.Caption := pupmreportedit;
         subfiLangiEdit.Hint := (reporfile[i]);
         subfiLangiDel := TMenuItem.Create(mur);
         subfiLangiDel.Caption := pupmreportdel;
         subfiLangiDel.Hint := (reporfile[i]);
         subfiLangipdf := TMenuItem.Create(mur);
         subfiLangipdf.Caption := 'PDF';
         //subfiLangipdf.Hint := (fiLang[i]);
         subfiLangiPrint := TMenuItem.Create(mur);
         subfiLangiPrint.Caption := pupmreportprint;
         subfiLangiPrint.Hint := (reporfile[i]);

         subfiLangiEdit.OnClick := @clickEdit;
         subfiLangiDel.OnClick := @clickDel;
         subfiLangiPrint.OnClick := @clickPrint;
         subfiLangipdf.OnClick := @clickpdf;
    
         subfiLangirepor.Add(subfiLangiEdit);
         subfiLangirepor.Add(subfiLangiDel);
         subfiLangirepor.Add(subfiLangipdf);
         subfiLangirepor.Add(subfiLangiPrint);
     end;

   rta.Items.Add(mnSetting);
        mnSetting.Add(subTelMask);

   rta.Items.Add(mnActivities);
        mnActivities.Add(subEvents);
        mnActivities.Add(subDictionaryDash4);
        mnActivities.Add(subDonations);
        mnActivities.Add(subKey);
end;

в свойствах формы OnShow обращаетесь к процедуре

1,191

(5 replies, posted in Russian)

k245 wrote:

Добавляйте столько строк, сколько вам нужно, прямо в цикле:


for i := 0 to JsonArray.Size-1  do 
begin
  JSONObjProp := TJSONObject( TJSONObject(JsonArray.Get(i)));
  JSONString := TJSONString(JSONObjProp.GetPairByName('password').JsonValue);
  frmAdmin.tgUserApp.AddRow;
  frmAdmin.tgUserApp.Cells[0,frmAdmin.tgUserApp.LastAddedRow] := JSONString.Value;
end;

да я просто не мог понять почему

frmAdmin.tgUserApp.AddRow(i);

не срабатывает, а потом дошло, что нужно

frmAdmin.tgUserApp.AddRow(1); 

тоесть каждый раз добовляет по одной строке

Form.TableGrid.Columns[0].Visible := False; 

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

1,194

(3 replies, posted in General)

2..
use script to connect to mysql 
 

procedure Form1_OnShow (Sender: string; Action: string);
begin
     frmWait.Show;
     Application.ProcessMessages;

     {$MySQL disable_connectdialog}
     Form1.MySQLConnection.Server := '127.0.0.1';
     Form1.MySQLConnection.Port := 3306;
     Form1.MySQLConnection.Username := 'root';
     Form1.MySQLConnection.Password := '';

     //Form1.MySQLConnection.Database := 'mvd';

     try
         Form1.MySQLConnection.Connect;
     except
         frmWait.Close;
         ShowMessage('Can''t connect to database.');
         Form1.Close;
     end;

     if Form1.MySQLConnection.Connected then
     begin

//CREATE DATABASE
SQLExecute('CREATE DATABASE IF NOT EXISTS `DBName`;');
         SQLExecute('USE `DBName`;');


         //UpdateDatabase(''); // to fill ComboBoxes
         //Form1.GridEmployees.dbUpdate; // if you have TableGrid on first form with option "Enable auto execution", you should call method dbUpdate manually
     end;
     frmWait.Close;
end;

if you connect to the database using a script, then the tables need to be created by a script ..

P/S Google translator

1,195

(11 replies, posted in Russian)

вот

1,196

(5 replies, posted in Russian)

kovalenko wrote:

Это?
//ограничение кол.выводимых записей//
      procedure frmOrder_Button34_OnClick (Sender: TObject; var Cancel: boolean);
begin
    frmOrder.GridOrder.SelectedRow := frmOrder.GridOrder.RowCount-1;
    frmOrder.GridOrder.dbLimit := frmOrder.GridOrder.dbLimit + 20;
    frmOrder.GridOrder.dbUpdate;
end;

нет колличество строк не извесно - их может быть и 20 и 40 и 2
в принцепе так
frmAdmin.tgUserApp.AddRow(i+1);
работает , только одна колонка лишняя получается..

1,197

(5 replies, posted in Russian)

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

procedure DUAll;
var
NxTextColumn: TNxTextColumn;
JSONObject, JSONObjProp: TJSONObject;
JSONString: TJSONString;
JsonArray, JsonArrayCoord: TJSONArray;
i:integer;
begin
  try
    if http.Status() = 200 then
      begin
        JSONObject:=TJSONObject(TJSONObject.ParseJSONValue(http.responsetext));
          if JSONObject <> nil then begin
            JSONString:=TJSONString(JSONObject.GetPairByName('success').JsonValue);
              if Pos('not session', JSONString.Value) > 0  then begin
                timerAu.Enabled:=False;
                frmAdmin.bAutorization.Caption:='Ошибка авторизации'; end else
                  if Pos('1', JSONString.Value) > 0  then begin
                    JSONString:=TJSONString(JSONObject.GetPairByName('days').JsonValue);
                    frmAdmin.bDays.Caption:='Осталось '+JSONString.Value+' дней';

                    frmAdmin.tgUserApp.Columns.Clear;
                      try
                        frmAdmin.tgUserApp.Columns.Add(TNxTextColumn);
                      except
                      end;
                      try
                        frmAdmin.tgUserApp.Columns.Add(TNxTextColumn);
                      except
                      end;
                      try
                        frmAdmin.tgUserApp.Columns.Add(TNxTextColumn);
                      except
                      end;
                      try
                        frmAdmin.tgUserApp.Columns.Add(TNxTextColumn);
                      except
                      end;

                    frmAdmin.tgUserApp.Columns[0].Color := clWhite;
                    frmAdmin.tgUserApp.Columns[1].Color := clWhite;
                    frmAdmin.tgUserApp.Columns[2].Color := clWhite;
                    frmAdmin.tgUserApp.Columns[3].Color := clWhite;
                    frmAdmin.tgUserApp.AddRow(6);//колличесво строк

                    JsonArray:=TJSONArray(JSONObject.GetPairByName('products').JsonValue);
                      for i := 0 to JsonArray.Size-1  do begin
                        JSONObjProp := TJSONObject( TJSONObject(JsonArray.Get(i)));
                        JSONString := TJSONString(JSONObjProp.GetPairByName('password').JsonValue);
                        frmAdmin.tgUserApp.Cells[0,i] := JSONString.Value;
                      end;
                    timerAu.Enabled:=False;
                 end;
               end;
             end;
        except

    end;
end;

у меня только так получается

for i := 0 to JsonArray.Size-1  do begin
                        frmAdmin.tgUserApp.AddRow(i+1);

но при этом одна лишняя строка

1,198

(3 replies, posted in Russian)

Проверить Ваш пример так и не смог, потому,что в новом объекте теряется сессия..
но мне удалось получить масив вида

{"success":"1","days":"3","products":[
{"id":"1","login":"33","password":"432","firstName":"23423","lastName":"234324","id_user":"1"},
{"id":"2","login":"2222","password":"2333","firstName":"3333","lastName":"34234","id_user":"1"}]}

1,199

(3 replies, posted in Russian)

vovka3003 wrote:

Неудивительно. Вы ведь этот json сами сочинили, верно?

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

{"1":{"id":"1","login":"33","password":"432","firstName":"23423","lastName":"234324","id_user":"1"},"2":{"id":"2","login":"2222","password":"2333","firstName":"3333","lastName":"34234","id_user":"1"}}

phpшники  говорят, что так он и должен фармироваться ((


поробую Ваш пример

1,200

(3 replies, posted in Russian)

vovka3003 wrote:
JsonArray:=TJSONArray(JSONObject.GetPairByName('').JsonValue);

Разве массив не "products"?

А вообще с помощью jscript проще парсить (имхо).

я из-за вот этой части запутался 

{"1":