Это прекрасно, однако не могу зайти на wix.com: перебрасывает на ru.wix.com, а потом соединение сбрасывается
его в России заблочили из-за поддержки Украины, только через VPN..
я потому и перешел на wordpress
My Visual Database → Posts by pavlenko.vladimir.v
Это прекрасно, однако не могу зайти на wix.com: перебрасывает на ru.wix.com, а потом соединение сбрасывается
его в России заблочили из-за поддержки Украины, только через VPN..
я потому и перешел на wordpress
SQLExecute('SELECT COUNT(id) FROM bsm_off WHERE Rezerv =1'); Я все время так делал но все равно к кнопке приходилось привязывать checkbox...
SELECT используется для извлечения информации
UPDATE имя_таблицы SET имя_поля="" - обновление
INSERT INTO имя_таблицы("поле_1","поле_2")VALUES("значение_1", "значение_2") - новая запись
А для checkboxa ?
SQLExecute('SELECT COUNT(id) FROM table_name WHERE file_name<>1'); ?? Как три состояния поймать ?
у чекбокса состояния в таблице выглядит так
1
0
Null
для записи или обновление используется переменная
Form1.CheckBox1.sqlValue
так как я начал разработку нового конструктора, то предоставляю доступ к (коду) рабочего конструктора всем желающим..
этот конструктор был связан с веб сервисом wix.
саму программу и части кода можете использовать по собственному желанию..
https://disk.yandex.ru/d/8z1OChCfkdICHA
так же я предастовляю сверх секретный код бекенд-файла "http-functions.js"
import {notFound, ok, serverError, created } from 'wix-http-functions';
import wixData from 'wix-data';
import wixUsers from 'wix-users-backend';
export function use_GetUserPlans(request) {
return wixUsers.login(request.path[0], request.path[1])
// если пользователь найден
.then( () => {
let options = {
"headers": {
"Content-Type": "application/json"
}
};
// query a collection to find matching items
return wixData.query("usersPLans")
.eq("email", request.path[0])
.find()
.then( (results) => {
// matching items were found
if(results.items.length > 0) {
options.body = {
"items": results.items
};
return ok(options);
}
// no matching items found
options.body = {
"NoPlans": `${request.path[0]} wasn't found`
};
return notFound(options);
} )
// something went wrong
.catch( (error) => {
options.body = {
"NoUser": error
};
return serverError(options);
} );
} )
// если пользователь не найден или иная ошибка
.catch( (error) => {
// создать переменную с данными ошибки
let errorReturnValueObject = {
headers: {
"Content-Type": "application/json"
},
body: { "error":"Not logged"}
};
// вернуть ответ
return serverError(errorReturnValueObject);
});
}
export function post_InsertUserPlans(request) {
let planuser;
let emailuser;
let options = {
"headers": {
"Content-Type": "application/json"
}
};
return request.body.text()
.then((body) => {
const pricePlanObject = JSON.parse(body);
let dataValue = pricePlanObject.data;
for (const [name, value] of Object.entries(dataValue)) {
if (name === "email") {
emailuser = value.slice(0, -1);
}
if (name === "plan") {
planuser = value.slice(0, -1);
}
}
let planInfo = {
"email": emailuser,
"plans": planuser
}
return wixData.insert("usersPLans", planInfo);
})
.then((results) => {
options.body = {
"inserted": results
};
return created(options);
})
.catch((error) => {
options.body = {
"error": error
};
return serverError(options);
});
}
export function post_DeletedUserPlans(request) {
let planuser;
let emailuser;
let options = {
"headers": {
"Content-Type": "application/json"
}
};
return request.body.text()
.then((body) => {
const pricePlanObject = JSON.parse(body);
let dataValue = pricePlanObject.data;
for (const [name, value] of Object.entries(dataValue)) {
if (name === "email") {
emailuser = value.slice(0, -1);
}
if (name === "plan") {
planuser = value.slice(0, -1);
}
}
let planInfo = {
"email": emailuser,
"plan": planuser
}
return wixData.query("usersPLans")
.eq("email", emailuser)
.eq("plans", planuser)
.ascending("plans")
.find()
.then( (results) => {
let firstItem = results.items[0];
if(results.items.length > 0) {
return wixData.remove("usersPLans", firstItem._id)
.then( () => {
options.body = {
"items": "ok"
};
return ok(options);
} )
.catch( (error) => {
options.body = {
"error": error
};
return serverError(options);
} );
}
// no matching items found
options.body = {
"error": `${request.path[0]} ${request.path[1]} wasn't found`
};
return notFound(options);
} )
// something went wrong
.catch( (error) => {
options.body = {
"error": error
};
return serverError(options);
} );
})
.then((results) => {
options.body = {
"inserted": results
};
return created(options);
})
.catch((error) => {
options.body = {
"error": error
};
return serverError(options);
});
}
этот код отвечает за получение и обработку запросов (покупка приложения, проверка покупки приложения, и если была офомлена подписка то и за отмену подписки):
когда пользователь покупает программу или оформляет подписку сервсис посылает вебхук и скрипт записывает в базу данные пользователя и его покупку..
пользователь запускающий программу на своем ПК вводит данные своего аккаунта, программа посылает запрос скрипту, скрипт проверяет пользователя а после возвращает программе данные о всех покупках пользователя.
Моя база данных называлась usersPlans
адреса вебхуков
https://Ваш_сайт/_functions/InsertUserPlans - новая подписка или покупка
https://Ваш_сайт/_functions/DeletedUserPlans - удаления подписки или покупки
Владимир спасибо уже более понятно. А у меня действие происходит не по сохранению а по поиску. Я после нажатия кнопки поиск не могу нажать на первую строчку чтоб дальше уже передать 1 строчку в textbox
После нажатия кнопки Поиска - нужно чтоб именно кликалась 1 запись.
В оконцовке задача стоит чтоб не дать человеку выйти из программы пока у него в таблице checkbox = 0 (я сделал через вычисляемое поле 0 = "ОЖИДАЕТ"
Все бы ничего но именно как понять что у тебя в таблице остались записи которые ОЖИДАЮТ. Когда в ручную кликаешь в таблице то все работает, но ведь этих записей около 1000 как понять остались ли в таблице те которые ОЖИДАЮТ.
Можно сделать сортировку но нужно кликнуть же на первой записи чтоб сработала кнопка реакции....
Form1.TableGrid.SelectedRow:=0; не работает после поиска..
Все работает
procedure Form1_Button3_OnClick (Sender: TObject; var Cancel: boolean);
begin
Form1.TableGrid1.SelectedRow:=0;
Form1.TableGrid1.SetFocus;
if (Form1.TableGrid1.Cells[1,Form1.TableGrid1.SelectedRow] = '1') then
Form1.Button2.Enabled := False else Form1.Button2.Enabled := True;
end;
procedure Form1_OnShow (Sender: TObject; Action: string);
begin
Form1.TableGrid1.SetFocus;
Form1.TableGrid1.SelectedRow:=0;
if (Form1.TableGrid1.Cells[1,Form1.TableGrid1.SelectedRow] = '1') then
Form1.Button2.Enabled := False else Form1.Button2.Enabled := True;
end;
procedure Form1_TableGrid1_OnCellClick (Sender: TObject; ACol, ARow: Integer);
begin
if (Form1.TableGrid1.Cells[1,Form1.TableGrid1.SelectedRow] = '1') then
Form1.Button2.Enabled := False else Form1.Button2.Enabled := True;
end;
Проверку записей можно сделать так ::
SQLExecute('SELECT COUNT(id) FROM table_name WHERE file_name<>1');
вернет колличество записей..
или в настройках самой таблицы
тогда таблица всегда будет показывать только те записи где нужное Вам поле не равняется (1)
Владимир спасибо уже более понятно. А у меня действие происходит не по сохранению а по поиску. Я после нажатия кнопки поиск не могу нажать на первую строчку чтоб дальше уже передать 1 строчку в textbox
После нажатия кнопки Поиска - нужно чтоб именно кликалась 1 запись.
В оконцовке задача стоит чтоб не дать человеку выйти из программы пока у него в таблице checkbox = 0 (я сделал через вычисляемое поле 0 = "ОЖИДАЕТ"
Все бы ничего но именно как понять что у тебя в таблице остались записи которые ОЖИДАЮТ. Когда в ручную кликаешь в таблице то все работает, но ведь этих записей около 1000 как понять остались ли в таблице те которые ОЖИДАЮТ.
Можно сделать сортировку но нужно кликнуть же на первой записи чтоб сработала кнопка реакции....
Form1.TableGrid.SelectedRow:=0; не работает после поиска..
загрузите Ваш проект
sibprogsistem wrote:не могу понять как сделать
не просто выделить а кликнуть скриптом первую запись в таблице...Я вот не могу никак сделать такое условие: Кликаем на кнопку (поиск) показываеться таблица(TableGrid) и в ней нужно узнать если в cell 1 есть надпись ОЖИДАЕТ то мы отключаем кнопку выхода(bExit)
procedure frmBuxgalter_TableGrid_OnCellClick (Sender: TObject; ACol, ARow: Integer);
begin
frmBuxgalter.Edit5.Text := frmBuxgalter.TableGrid.cells[1,arow];
if frmBuxgalter.Edit5.Text = 'ОЖИДАЕТ' then frmBuxgalter.bExit.Visible :=False;
end;Немогу никак после нажатия кнопки поиск кликнуть на 1 строчку чтобы передать в Edit5 ПРИНЯТО....Помогите
procedure Form1_TableGrid1_OnCellClick (Sender: TObject; ACol, ARow: Integer);
begin
if (Form1.TableGrid1.Cells[1,Form1.TableGrid1.SelectedRow] = '1') then
Form1.Button2.Enabled := False else Form1.Button2.Enabled := True;
end;
pavlenko.vladimir.v wrote:procedure addcall_OnShow (Sender: TObject; Action: string); begin addcall.ComboBox2.dbUpdate; end;
This is a false solution for ParentComboBox.
This solution will not allow related records to be displayed.
In addition, when selected in Combo1, Combo2 will be reset.
В данном проекте такая связь - это лишнее
ParentCombobox - предназначен для связей к примеру ::: Страна-Город-Улица или Компания-Имя-Должнасть
тут же нужно выбрать клиента и назначить ему админимстратора
procedure addcall_OnShow (Sender: TObject; Action: string);
begin
addcall.ComboBox2.dbUpdate;
end;
Hello Wladimir
On FormMainBook, with button "Новая книга" (iAdd a book) if i've well translated with google) the goal is to add a new book,
Why behind this button don't you call as Action 'New record' instead of Action 'Show Record'.
Because the form called shows last entry while the fields should be empty ?Maybe I misunderstood the purpose of this button
JB
это просто измененная форма, я забыл выбрать "Новая запись"
it's just a modified form, I forgot to select "New Entry"
А вы проверяли работоспособность грида, если у разных записей ссылка на один объект-картинку? У меня этот момент вызывает сомнение:
frmMainBook.tgListAllBook.Cell[8,i].ObjectReference := imgDel;
Почему-то в других примерах создается отдельный графический объект для каждой строки.
Спасибо!!
for i := 0 to frmMainBook.tgListAllBook.RowCount -1 do
begin
sFile := ExtractFileDir(Application.ExeName) + '\img\favoritesEnabled.png';
fovYes := TPngImage.Create;
fovYes.LoadFromFile(sFile);
sFile := ExtractFileDir(Application.ExeName) + '\img\favoritesDesabled.png';
fovNo := TPngImage.Create;
fovNo.LoadFromFile(sFile);
sFile := ExtractFileDir(Application.ExeName) + '\img\finishReadEnabled.png';
finYes := TPngImage.Create;
finYes.LoadFromFile(sFile);
sFile := ExtractFileDir(Application.ExeName) + '\img\finishReadDesabled.png';
finNo := TPngImage.Create;
finNo.LoadFromFile(sFile);
sFile := ExtractFileDir(Application.ExeName) + '\img\delete.png';
imgDel := TPngImage.Create;
imgDel.LoadFromFile(sFile);
sFile := ExtractFileDir(Application.ExeName) + '\img\edit.png';
imgEdi := TPngImage.Create;
imgEdi.LoadFromFile(sFile);
sFile := ExtractFileDir(Application.ExeName) + '\img\play.png';
imgPla := TPngImage.Create;
imgPla.LoadFromFile(sFile);
if (SQLExecute('SELECT favorites FROM books WHERE id=' + IntToStr(frmMainBook.tgListAllBook.Row[i].ID)) = '1') then
frmMainBook.tgListAllBook.Cell[7,i].ObjectReference := fovYes else
frmMainBook.tgListAllBook.Cell[7,i].ObjectReference := fovNo;
if (SQLExecute('SELECT read FROM books WHERE id=' + IntToStr(frmMainBook.tgListAllBook.Row[i].ID)) = '1') then
frmMainBook.tgListAllBook.Cell[6,i].ObjectReference := finYes else
frmMainBook.tgListAllBook.Cell[6,i].ObjectReference := finNo;
frmMainBook.tgListAllBook.Cell[8,i].ObjectReference := imgDel;
frmMainBook.tgListAllBook.Cell[9,i].ObjectReference := imgEdi;
frmMainBook.tgListAllBook.Cell[10,i].ObjectReference := imgPla;
end;
но почему нужно для каждой строки создавать отдельный набор объектов?
это как-то связано с сылками на эти объекты ? или происходит присвоение объекта конкретному объекту?
.
.
Думал можно будет просто скрыть, но там же колонки на всех поля отображаются (ерунда получится), каюсь )!!!
Решил сделать по другому (заменой картинки) в ячейке, но тут у меня тоже ошибка получается
делал в двух вариантах
// первый вариант **************************************************************************************************************
sFile := ExtractFileDir(Application.ExeName) + '\img\favoritesEnabled.png';
fovYes := TPngImage.Create;
fovYes.LoadFromFile(sFile);
sFile := ExtractFileDir(Application.ExeName) + '\img\favoritesDesabled.png';
fovNo := TPngImage.Create;
fovNo.LoadFromFile(sFile);
sFile := ExtractFileDir(Application.ExeName) + '\img\finishReadEnabled.png';
finYes := TPngImage.Create;
finYes.LoadFromFile(sFile);
sFile := ExtractFileDir(Application.ExeName) + '\img\finishReadDesabled.png';
finNo := TPngImage.Create;
finNo.LoadFromFile(sFile);
sFile := ExtractFileDir(Application.ExeName) + '\img\delete.png';
imgDel := TPngImage.Create;
imgDel.LoadFromFile(sFile);
sFile := ExtractFileDir(Application.ExeName) + '\img\edit.png';
imgEdi := TPngImage.Create;
imgEdi.LoadFromFile(sFile);
sFile := ExtractFileDir(Application.ExeName) + '\img\play.png';
imgPla := TPngImage.Create;
imgPla.LoadFromFile(sFile);
for i := 0 to frmMainBook.tgListAllBook.RowCount -1 do
begin
if (SQLExecute('SELECT favorites FROM books WHERE id=' + IntToStr(frmMainBook.tgListAllBook.Row[i].ID)) = '1') then
frmMainBook.tgListAllBook.Cell[7,i].ObjectReference := fovYes else
frmMainBook.tgListAllBook.Cell[7,i].ObjectReference := fovNo;
if (SQLExecute('SELECT read FROM books WHERE id=' + IntToStr(frmMainBook.tgListAllBook.Row[i].ID)) = '1') then
frmMainBook.tgListAllBook.Cell[6,i].ObjectReference := finYes else
frmMainBook.tgListAllBook.Cell[6,i].ObjectReference := finNo;
frmMainBook.tgListAllBook.Cell[8,i].ObjectReference := imgDel;
frmMainBook.tgListAllBook.Cell[9,i].ObjectReference := imgEdi;
frmMainBook.tgListAllBook.Cell[10,i].ObjectReference := imgPla;
end;
// второй вариант ****************************************************************************************************
for i := 0 to frmMainBook.tgListAllBook.RowCount-1 do
begin
if (SQLExecute('SELECT favorites FROM books WHERE id=' + IntToStr(frmMainBook.tgListAllBook.Row[i].ID)) = '1') then
frmMainBook.tgListAllBook.Cell[7,i].ObjectReference := frmImages.imgFavoritesEnabled.Picture.Graphic else
frmMainBook.tgListAllBook.Cell[7,i].ObjectReference := frmImages.imgFavoritesDesabled.Picture.Graphic;
if (SQLExecute('SELECT read FROM books WHERE id=' + IntToStr(frmMainBook.tgListAllBook.Row[i].ID)) = '1') then
frmMainBook.tgListAllBook.Cell[6,i].ObjectReference := frmImages.imgFinishReadEnabled.Picture.Graphic else
frmMainBook.tgListAllBook.Cell[6,i].ObjectReference := frmImages.imgFinishReadDesabled.Picture.Graphic;
frmMainBook.tgListAllBook.Cell[8,i].ObjectReference := frmImages.imgPlay.Picture.Graphic;
frmMainBook.tgListAllBook.Cell[9,i].ObjectReference := frmImages.imgEdit.Picture.Graphic;
frmMainBook.tgListAllBook.Cell[10,i].ObjectReference := frmImages.imgDelete.Picture.Graphic;
end;
такой момент :: если запись одна то скрипт работает, если записей более одной или (были сделаны множество записей и потом удалены и оставленна одна запись), то изображения добавляются но при переключении (клике на ячейки избранное или прочитанно) возникает ошибка..
если запустить программу и выключить, то то возникае ошибка (окно закрывается а вот процесс работает)..
а вот если применять цвет колонок. то все работает...
for i := 0 to frmMainBook.tgListAllBook.RowCount-1 do
begin
if (SQLExecute('SELECT favorites FROM books WHERE id=' + IntToStr(frmMainBook.tgListAllBook.Row[i].ID)) = '1') then
frmMainBook.tgListAllBook.Cell[7,i].Color := clTeal else
frmMainBook.tgListAllBook.Cell[7,i].Color := clGray;
if (SQLExecute('SELECT read FROM books WHERE id=' + IntToStr(frmMainBook.tgListAllBook.Row[i].ID)) = '1') then
frmMainBook.tgListAllBook.Cell[6,i].Color := clTeal else
frmMainBook.tgListAllBook.Cell[6,i].Color := clGray;
frmMainBook.tgListAllBook.Cell[8,i].Color := $00408000;
frmMainBook.tgListAllBook.Cell[9,i].Color := $000080FF;
frmMainBook.tgListAllBook.Cell[10,i].Color := clRed;
end;
загружаю проект
первый вариант - строка 141
второй вариант - строка 176
третий вариант - строка 190
реакция на клик ячейки - строка 7
Всем привет!
Как я могу обратиться к колонке в слайдере? мне нужно ее скрыть при определенном условии
Получить значение колонки я могу а вот как скрыть ее я не понимаю...
Je comprends que les bénévoles du forum n'ont pas le temps de travailler pour les autres.
c'est pour ca que je n'envoie pas le zip.
Tout aide que je sollicite c'est de savoir comment le faire, après je ferait mes recherches.
Si t'a le temps dit moi comment je peux faire ?
Ou comment je peux chercher la solution.
Нам нужен ваш проект, чтобы понять, куда двигаться.
We need your project so that we can understand where to go.
а не проще по нажатию Сохранить (OnClick) в скрипте запросом вытянуть последний Рекорд + 1
SQLExecute('SELECT IFNULL(Max(record_count), 0) FROM TableName') + 1;
Поместить в Edit...
Form1.EditCounter1.Text := IntToStr(SQLExecute('SELECT IFNULL(Max(record_count), 0) FROM TableName') + 1);
и продолжить процедуру записи автоматом.
k245 wrote:Про триггеры слышали? Вот они как раз для этого.
Или на крайний случай хранимая процедура - её проще отлаживатьПро триггеры слышал что они есть, а вот как их есть - не знаю. Для меня потолок это JOIN и вложенный SELECT.
vovka3003 wrote:DriveSoft wrote:But perhaps I gonna make a web version, but at this stage is just an idea.
Было б зашибись.
Я бы сначала уточнил, что скрывается под этим определением. Современные тренды всех уводят в он-лайн сервисы. То есть веб-версия может оказаться он-лайн сервисом. Или генератором сайта.
если это будет вариант на подобие того как есть у движка (construct) с генерацией десктопных и мобильных приложений, то будет круто..
Выравнивание кода
Сначала может показаться, что форматирование исходного текста придумали зануды, но на самом деле выровненный по определенным правилам текст легче воспринимается, а значит на его изучение тратится меньше времени. А время, как вы знаете – самый ценный ресурс.
спасибо за информацию!!
Good evening
Вы хотите создать поиск по таблице?
Do you want to create a field search in a table?
Привет tov.Mayor
Привет Derek
Я заметил этот вопрос и решил создать скрипт изменения размеров изображения.
Если Вы добавите этот скрипт, то Ваша программа сможет не только проверять размеры изображения, но еще и менять их автоматически
I noticed this issue and decided to create an image resizing script.
If you add this script, then your program can not only check the image dimensions, but also change them automatically
Добрый день всем,
Подскажите пожалуйста, как получить данные с сайта, а конкретнее вот сайт
https://www.nbkr.kg/getservice.jsp?snam … ;lang=RUS,
это сайт центрального банка (хотя это не так важно ) это ссылка на ежедневный автоинформатор курса валюты, мне нужно чтобы по Click.Batton либо при запуске приложения, в приложение в Edit загружался курс на текущую дату.Если есть несложные варианты подскажите!
Заранее благодарен!
XML-файлы для автоматической загрузки:
Перечень котируемых валют в XML формате: https://www.nbkr.kg/XML/CurrenciesReferenceList.xml
Ежедневные официальные курсы по USD, EUR, RUB, KZT (последние значения): https://www.nbkr.kg/XML/daily.xml
Еженедельные официальные курсы иностранных валют (последние значения): https://www.nbkr.kg/XML/weekly.xml
Описание полей XML
скачайте xml файл и разбирите его..
Строка ',' считается числом с плавающей точкой, что на мой взгляд неверно - плавающая точка есть, а числа нет
procedure Form1_Button2_OnClick (Sender: TObject; var Cancel: boolean); begin ShowMessage( ValidFloat(',') ); end;
то есть сама запятая считается частью числа? может, что-то вроди по умолчанию (0,0) ?
Can i ask why do you use twice the Screen.Height??
(Screen.Height<720) AND (Screen.Height<640)
просто вбил любые цифры
I just entered any number
Yew, I know that program, But what if we had the change to make it automatic or giving the option to our customers just with running our software?
That is the reason asking .
может просто маштабировать само приложение, Вам нужно написать свои цифры
can just scale the app itself, you need to write your numbers
if (Screen.Height<720) AND (Screen.Height<640) then
AdjustResolution(Form_Name);
End;
procedure AdjustResolution(oForm:TForm);
var
iPercentage:integer;
begin
iPercentage:=Round(((Screen.Width-640)/640)*100)+100;
oForm.ScaleBy(iPercentage,100);
end;
Hi all. Can we get a message for the screen result if it's lower than 720 X 640? I need it because clients complains.....
if (Screen.Height=720) OR (Screen.Height=640) then
*****
*****
End
My Visual Database → Posts by pavlenko.vladimir.v
Powered by PunBB, supported by Informer Technologies, Inc.
Theme Hydrogen by Kushi