ошибка
1,176 2019-06-17 10:43:39
Topic: тег i (ошибка форума) (2 replies, posted in Talks about all)
1,177 2019-06-17 09:31:34
Re: Вопросы от неразбирающегося (68 replies, posted in Russian)
Здравствуйте!
Возникла необходимость в повторении однотипного кода. Чтобы не нагружать скрипт, планирую выделить необходимый код в отдельную функцию, чтобы потом просто вызвать ее. Однако не могу понять, как правильно осуществить вызов.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 2019-06-14 15:28:18
Re: передать все записи (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;
1,179 2019-06-14 10:44:35
Re: API или прямое соединение с базой данных (10 replies, posted in Russian)
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 2019-06-13 19:05:48
Re: передать все записи (2 replies, posted in Russian)
Исходя из того, что указано в "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 2019-06-13 10:58:37
Re: Авторизация через MD5 (7 replies, posted in Russian)
MySQL Workbench — инструмент для визуального проектирования баз данных
я так понимаю что на изображении представленна вазможнасть подклечения к удаленной БД по ssl...
1,182 2019-06-13 10:25:26
Re: Авторизация через MD5 (7 replies, posted in Russian)
sibprogsistem wrote:на сколько я понимаю то только с помошью ssl сертификата
http://myvisualdatabase.com/forum/viewtopic.php?id=4274Насколько я понимаю сертификаты тоже будут доступны пользователю. С помощью сертификата подключиться через MySQL Workbench разве не получится?...
для каждой дазы создается свой сертификат, как я понимаю одинаковых нет, на стороне базы отстается ключ расшифровки а у вас ключ шифрования,тоесть перехватить можно будет только сам шифр, не думаю,что его можно так просто поломать ..
про MySQL Workbench не знаю..
1,183 2019-06-13 09:35:07
Re: Авторизация через MD5 (7 replies, posted in Russian)
Здравствуйте.
Подскажите как закрыть возможность использования/просмотра явно заданного пароля для сетевой авторизации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,185 2019-06-12 08:03:46
Topic: данные в memo (2 replies, posted in Russian)
как вывести данные таблицы в мемо?
form1.Memo1.text:=(sqlexecute('SELECT aa FROM A'));
так я только первую запись получаю
1,186 2019-06-10 16:05:55
Topic: передать все записи (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 2019-06-10 13:37:59
Re: Фильтр в ComboBox (3 replies, posted in Russian)
Не, так не пойдет, потому что прийдется всю базу перелопачивать.
Как это отфильтровать с помощью скрипта. Ни как сообразить не могу...
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,189 2019-06-08 16:07:42
Re: Главное меню на другой форме (11 replies, posted in Russian)
ув. sibprogsistem! можете пример проекта приложить?
да, конечно
1,190 2019-06-07 16:24:18
Re: Главное меню на другой форме (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 2019-06-07 14:12:01
Re: колличество строк в таблице (5 replies, posted in Russian)
Добавляйте столько строк, сколько вам нужно, прямо в цикле:
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);
тоесть каждый раз добовляет по одной строке
1,192 2019-06-06 22:20:48
Re: скрыть колонку таблицы [решено] (1 replies, posted in Russian)
Form.TableGrid.Columns[0].Visible := False;
1,193 2019-06-06 22:15:53
Topic: скрыть колонку таблицы [решено] (1 replies, posted in Russian)
в общем в динамичеки созданной таблице есть колонка с номером id пользователя веб сервиса, этот id нужен для дольнейшей работы с этим пользователем но данная колонка не должна отображться..
1,194 2019-06-06 10:51:59
Re: translation help (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,196 2019-06-05 15:03:37
Re: колличество строк в таблице (5 replies, posted in Russian)
Это?
//ограничение кол.выводимых записей//
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 2019-06-05 13:31:19
Topic: колличество строк в таблице (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 2019-06-04 20:03:49
Re: json (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 2019-06-04 13:28:34
Re: json (3 replies, posted in Russian)
Неудивительно. Вы ведь этот 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 2019-06-04 08:43:23
Re: json (3 replies, posted in Russian)
JsonArray:=TJSONArray(JSONObject.GetPairByName('').JsonValue);
Разве массив не "products"?
А вообще с помощью jscript проще парсить (имхо).
я из-за вот этой части запутался
{"1":