powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Хранение клиентских форм (вместе с логикой) в БД. Требуется наводка.
25 сообщений из 66, страница 1 из 3
Хранение клиентских форм (вместе с логикой) в БД. Требуется наводка.
    #38334849
Izya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый вечер.

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

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

Задача в том, что бы такие формы также сохранить в БД. В этом случае, клиентская часть представляет собой программу, которая подключается к БД, загружает данные о формах, строит эти формы "на экране клиента", и через них позволяет работать с данными и использовать логику БД.

Как реализовать хранение и загрузку таких форм? Поскольку задача не новая (тот же MSAccess, 1С, Navision как то такие формы хранzт), есть, наверное, технологии или даже языковые средства. Может есть другие идеи или опробованные методы - все интересно. Спасибо.
...
Рейтинг: 0 / 0
Хранение клиентских форм (вместе с логикой) в БД. Требуется наводка.
    #38334859
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Izya,
Вам нужно готовое решение или хотите самостоятельно заняться разработкой такого?
...
Рейтинг: 0 / 0
Хранение клиентских форм (вместе с логикой) в БД. Требуется наводка.
    #38334866
Izya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafm
"...все интересно...". Я в этой теме человек новый, неопытный, поэтому мне действительно интересны все варианты. Если найдется готовое решение, которое окажется приемлимым, буду его пользовать, не найдется - буду создавать. Меня больше, наверное, название технологий или наводки на описания интересуют, а дальше сам попробую разобраться.
...
Рейтинг: 0 / 0
Хранение клиентских форм (вместе с логикой) в БД. Требуется наводка.
    #38334869
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Izyaiscrafm
"...все интересно...". Я в этой теме человек новый, неопытный, поэтому мне действительно интересны все варианты. Если найдется готовое решение, которое окажется приемлимым, буду его пользовать, не найдется - буду создавать. Меня больше, наверное, название технологий или наводки на описания интересуют, а дальше сам попробую разобраться.
наводка на описание
...
Рейтинг: 0 / 0
Хранение клиентских форм (вместе с логикой) в БД. Требуется наводка.
    #38335050
AlexKB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Izyaiscrafm
"...все интересно...". Я в этой теме человек новый, неопытный, поэтому мне действительно интересны все варианты. Если найдется готовое решение, которое окажется приемлимым, буду его пользовать, не найдется - буду создавать. Меня больше, наверное, название технологий или наводки на описания интересуют, а дальше сам попробую разобраться.

Cache, Ensemble
www.intersystems.ru
...
Рейтинг: 0 / 0
Хранение клиентских форм (вместе с логикой) в БД. Требуется наводка.
    #38335297
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Izya,
"у всех" таких задач Цель - обеспечить на стороне заказчика настройку или конфигурацию таких форм.
Т.е. не сопровождение в виде новых версий ПО, а отдача на откуп заказчику (клиенту).
Оно?
ЗЫ.
Ну, и формы (VIEW) не следуетмешать в БД с данными.
...
Рейтинг: 0 / 0
Хранение клиентских форм (вместе с логикой) в БД. Требуется наводка.
    #38335482
Izya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
еще раз :)

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

БД в MS SQL, сейчас интерфейс на формах Access. Меня такой интерфейс не устраивает по следующим причинам
1) Сам Access в последнее время какой то странный стал :)
2) Число пользоветелей растет, поэтому обновление для клиентов тоже надо как то автоматизировать.

Вижу два варианта
1) чисто языковой. Например создаю форму в какой-нибуть языковой среде и потом ее (вместе с кодом, то есть, наверное, с классом) как то сохраняю в БД. Потом простой клиент такие классы из БД подгружает и создает его объекты (т.е. формы). Хочу понять, есть ли такой язык, как сохранять класс в БД, как его загружать.
2) системный. Есть конструктор, который генерит описание форм, и клиентская часть (типа библиотеки или даже целая апликуха) которая их из БД достает, интерпретирует и строит форму или целый интерфейс.

ЗЫ
Ну пусть это будет даже отдельная БД, с данными об интерфейсе.
...
Рейтинг: 0 / 0
Хранение клиентских форм (вместе с логикой) в БД. Требуется наводка.
    #38335530
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Izya,
OFF
нравится или нет, но обоснование прыжка с Assess на Фреймворк\ERP странное.

Есть ещё вариант - обычная 2-х звенка.
БЛ в хранимках у тебя есть.
VIEW\Морду можна сваять на чём угодно. Хоть на Delphi. Т.к. Access это не ЯП и не программирование.
...
Рейтинг: 0 / 0
Хранение клиентских форм (вместе с логикой) в БД. Требуется наводка.
    #38335547
AlexKB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Izya,
Есть, СУБД Cache!
Вот пример класса, хранимого на сервере, который содержит описание формы, ее компонентов, содержит определенные методы сервера и клиента, содержит SQL-запросы.
Все это хранится в БД на сервере, там же где хранятся и данные.
Клиента писать не надо, используется ВЕБ-браузер.
Возможны и другие варианты, когда Вы самостоятельно пишете некий плеер, который будет запускаться на стороне клиента и подгружать к себе поток данных, описывающий форму.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
348.
349.
350.
351.
352.
353.
354.
355.
356.
357.
358.
359.
360.
361.
362.
363.
364.
365.
366.
367.
368.
369.
370.
371.
372.
373.
374.
375.
376.
377.
378.
379.
/// ZENApp.HelpDesk
/// This is the main page of the Help Desk sample application.
/// Note that this page extends the <class>ZENApp.TemplatePage</class>
/// class; this is a template that provides a standardized 
/// look & feel for the application.
Class ZENApp.HelpDesk Extends ZENApp.TemplatePage
{

/// Class name of application this page belongs to.
Parameter APPLICATION = "ZENApp.SampleApp";

/// Displayed name of this page.
Parameter PAGENAME = "HelpDesk";

/// Domain used for localization.
Parameter DOMAIN = "ZENAPP";

/// This Style block contains page-specific CSS style definitions.
XData Style
{
<style type="text/css">

/* style for menu pane */
#treeMenu {
	height: 20.0em;
	width: 10.0em;
	overflow: auto;
	border: 1px solid darkblue;
	background: #EEEEEE;
}

/* style for message box */
#msgBox {
	height: 8.0em;
	width: 10.0em;
	overflow: auto;
	border: 1px solid darkblue;
	background: white;
}


#navBar .tnbrTable {
	width: 800px;
	border-bottom: none;
}

/* style for table pane */
#table table {
	width: 800px;
}

</style>
}

/// This XML block defines the contents of the menu pane.
XData menuPane [ XMLNamespace = "http://www.intersystems.com/zen" ]
{
<pane xmlns="http://www.intersystems.com/zen">
<dynaTree
	id="treeMenu"
	dataGlobal="%helpDeskMenu"
	showLines="true"
/>
</pane>
}

/// This XML block defines the contents of the message pane.
/// Here we use an HTML component and call a server-method to
/// get the message contents.
/// We use a timer to force periodic updates of the message box.
XData messagePane [ XMLNamespace = "http://www.intersystems.com/zen" ]
{
<pane xmlns="http://www.intersystems.com/zen">
<timer id="timer" 
	ontimeout="zenPage.msgTimer(zenThis);" 
	timeout="5000"/>

<titleBox title="Messages"/>

<html id="msgBox" OnDrawContent="DrawMessage" />
</pane>
}

/// This XML block defines the contents of the table pane.
XData tablePane [ XMLNamespace = "http://www.intersystems.com/zen" ]
{
<pane id="tPane" xmlns="http://www.intersystems.com/zen">
<titleBox title="HelpDesk: Incidents" 
		subtitle="Customer-reported incidents are listed below. Click on a row to edit its details." />
<tableNavigatorBar id="navBar" showPageSize="true" tablePaneId="table" />
<tablePane id="table"
	width="100%"
	useSnapshot="true"
	maxRows="1000"
	pageSize="20"
	tableName="ZENApp_Data.Incident"
	valueColumn="ID"
	onselectrow="zenPage.rowSelected(zenThis);"
	showQuery="false"
	showZebra="true"
	useKeys="false"
	fixedHeaders="true"
	bodyHeight="15.0em"
	headerLayout="headersOnTop"
	>
<column colName="ID" 
		width="50"
		/>
<column colName="Priority"
		width="100"
		id="filterPriority"
		filterType="enum"
		filterEnum="Critical,High,Low"
		filterOp="="
		 />

<column colName="Customer"
		colExpression="Customer->Name" 
		width="200"
		filterType="query"
		filterQuery="SELECT Name FROM ZENApp_Data.Customer ORDER BY Name"
		filterOp="="
		
		/>
<column colName="AssignedTo"  
		colExpression="AssignedTo->Name" 
		width="22%"
		filterType="text"/>
<column colName="CreateDate" 
		width="22%"
		filterType="date"
		filterOp="BETWEEN"
		 />
<condition colName="Priority" 
		predicate="EQ" 
		value="Critical" rowStyle="font-weight: bold;"/>

</tablePane>

<spacer height="10"/>

</pane>
}

/// This XML block defines the contents of the details pane.
XData detailPane [ XMLNamespace = "http://www.intersystems.com/zen" ]
{
<pane xmlns="http://www.intersystems.com/zen">
<fieldSet id="detailGroup" disabled="true" legend="Details">
<form id="detailForm" 
	layout="vertical" 
	labelPosition="top" 
	cellStyle="padding: 2px; padding-left: 5px; padding-right: 5px;"
	onchange="zenPage.detailFormChange(zenThis);" >
<hgroup>
<text id="ID" name="ID" label="ID" readOnly="true" size="5"/>
<spacer width="15"/>
<text id="CreateDate" name="CreateDate" label="Date" readOnly="true" size="8"/>
<spacer width="15"/>
<dataCombo id="Priority" name="Priority" label="Priority"
	size="12"
	dropdownHeight="150px"
	editable="false"
	unrestricted="true"
	sql="SELECT Name FROM ZENApp_Data.Priority ORDER BY Name"/>

<spacer width="15"/>

<dataCombo id="Customer" name="Customer" label="Customer"
	size="24"
	dropdownHeight="150px"
	editable="false"
	unrestricted="true"
	sql="SELECT ID,Name FROM ZENApp_Data.Customer ORDER BY Name"/>

<spacer width="15"/>

<dataCombo id="AssignedTo" name="AssignedTo" label="Assigned To"
	size="24"
	dropdownHeight="150px"
	editable="false"
	unrestricted="true"
	sql="SELECT ID,Name FROM ZENApp_Data.Employee ORDER BY Name"/>
</hgroup>

<textarea id="Comments" name="Comments" label="Comments" rows="3" cols="60"/>
<button id="btnSave" caption="Save" disabled="true" onclick="zenPage.detailFormSave();" />
</form>
</fieldSet>
</pane>
}

/// This class method callback is called just before the server-side page 
/// object is created.
ClassMethod %OnBeforeCreatePage() As %Status
{
	#; Make sure sample data is created for the application
	If '##class(ZENApp.Data.Incident).%ExistsId(1) {
		Do ##class(ZENApp.Data.Incident).BuildData()
	}

	#; Make sure array that defines the menu tree is defined
	#; (use a local and not a global)
	Kill %helpDeskMenu

	#; View items by priority
	For p="All","Low","High","Critical" {
		Set %helpDeskMenu("Priority",p) = "javascript:zenPage.setFilter('filterPriority','"_$S(p="All":"",1:p)_"');"
	}

	#; adjust page size
	For sz = 5,10,20,50,100,500 {
		Set %helpDeskMenu("Options","PageSize",sz) = "javascript:zenPage.setPageSize("_sz_");"
	}

	Set %helpDeskMenu("Options","Zebra") = "javascript:zenPage.setZebra();"

	Set %helpDeskMenu("Other","Chart") = "ZENApp.Chart.cls"

	Set %helpDeskMenu("Reports","Sales") = "ZENApp.MyReport.cls"
	For m = 1:1:12 {
		Set %helpDeskMenu("Reports","Sales","Month " _ $J(m,2)) = "ZENApp.MyReport.cls?MONTH="_m
	}

	Quit $$$OK
}

/// Draw the HTML that will be displayed within the
/// MessageBox
Method DrawMessage(pSeed As %String) As %Status
{
	#; create a random message
	Set tColors = $LB("red","green","blue","black","orange")
	Set tColor = $LG(tColors,$R($LL(tColors))+1)

	Set tMsgs = $LB("Fresh coffee in kitchen!","Company share price has gone up.","The boss is coming!","Customer crisis!","Lunch Time!")
	Set tMsg = $LG(tMsgs,$R($LL(tMsgs))+1)

	&html<#($ZDT($H,11))#<div style="color: #(tColor)#;">#(tMsg)#</div>>
	
	Quit $$$OK
}

/// MessageBox timer has fired.
ClientMethod msgTimer(timer) [ Language = javascript ]
{
	var html = this.getComponentById('msgBox');
	zenASSERT(html,"Unable to find html object",arguments);
	
	// update contents of message box
	html.refreshContents();

	timer.startTimer();
}

/// User selected a row in the table
ClientMethod rowSelected() [ Language = javascript ]
{
	var table = this.getComponentById('table');

	// update details pane using ID value from table
	var id = table.getProperty('value');
	this.ShowDetails(id);
}

/// Set page size for the table
ClientMethod setPageSize(sz) [ Language = javascript ]
{
	var table = this.getComponentById('table');
	table.setProperty('pageSize',sz);
}

/// Toggle zebra striping for the table
ClientMethod setZebra() [ Language = javascript ]
{
	var table = this.getComponentById('table');
	table.setProperty('showZebra',!table.getProperty('showZebra'));
}

/// Update table to new filter value
ClientMethod setFilter(filterId, value) [ Language = javascript ]
{
	var table = this.getComponentById('table');
	var column = this.getComponentById(filterId);
	zenASSERT(column,"Unable to find column object",arguments);

	// update filter value and re-execute query
	column.setProperty('filterValue',value);

	// 'true' means do not change current page for table
	table.executeQuery(true);
}

/// Form changed handler for detail form.
/// This is called whenever the modified state of the form changes.
ClientMethod detailFormChange(form) [ Language = javascript ]
{
	var mod = form.isModified();
	
	// toggle save button
	var btn = zenPage.getComponentById('btnSave');
	btn.setProperty('disabled',!mod);
}

/// Save contents of details panel.
ClientMethod detailFormSave() [ Language = javascript ]
{
	// send form to server and save details
	var form = zenPage.getComponentById('detailForm');
	this.SaveDetails(form);
}

/// ShowDetails:
/// Show contents of details pane.
ClassMethod ShowDetails(id) [ ZenMethod ]
{
	// try to open the object
	Set tObj = ##class(ZENApp.Data.Incident).%OpenId(id)
	If $IsObject(tObj) {
		&js<zenPage.getComponentById('ID').setValue('#(tObj.%Id())#');>
		&js<zenPage.getComponentById('CreateDate').setValue('#(tObj.CreateDateLogicalToDisplay(tObj.CreateDate))#');>
		&js<zenPage.getComponentById('Priority').setValue('#(tObj.PriorityGetObjectId())#','#($ZCVT(tObj.Priority.Name,"O","JS"))#');>
		&js<zenPage.getComponentById('Customer').setValue('#(tObj.CustomerGetObjectId())#','#($ZCVT(tObj.Customer.Name,"O","JS"))#');>
		&js<zenPage.getComponentById('AssignedTo').setValue('#(tObj.AssignedToGetObjectId())#','#($ZCVT(tObj.AssignedTo.Name,"O","JS"))#');>
		&js<zenPage.getComponentById('Comments').setValue('#($ZCVT(tObj.Comments,"O","JS"))#');>

		#; enable form/ clear mod flag
		&js<zenPage.getComponentById('detailGroup').setProperty('disabled',false);>
		&js<zenPage.getComponentById('detailForm').clearModified();>
	}
	Else {
		#; clear & disable form
		&js<zenPage.getComponentById('detailGroup').setProperty('disabled',true);>
		&js<zenPage.getComponentById('detailForm').reset();>
	}
	Quit
}

/// Save contents of details pane.
ClassMethod SaveDetails(form As %ZEN.Component.form) [ ZenMethod ]
{
	#; as we passed form object to server, we can
	#; finds its control values using %page.%GetValueById
	
	Set tID = %page.%GetValueById("ID")

	#; try to open the object (with exclusive lock)
	Set tObj = ##class(ZENApp.Data.Incident).%OpenId(tID,4)
	If $IsObject(tObj) {
		Do tObj.PrioritySetObjectId(%page.%GetValueById("Priority"))
		Do tObj.CustomerSetObjectId(%page.%GetValueById("Customer"))
		Do tObj.AssignedToSetObjectId(%page.%GetValueById("AssignedTo"))
		Set tObj.Comments = %page.%GetValueById("Comments")

		Set tSC = tObj.%Save()
		If $$$ISERR(tSC) {
			&js<alert('Error saving object!');>
		}
		Else {
			#; clear mod flags for form
			&js<zenPage.getComponentById('detailForm').clearModified();>
			
			#; update tablePane with new query
			&js<zenPage.getComponentById('table').executeQuery();>
		}
	}
	Else {
		&js<alert('Unable to save object!');>
	}
	Quit
}

/// This client event, if present, is fired when the page is loaded.
ClientMethod onloadHandler() [ Language = javascript ]
{
	zenPage.setTraceOption('js',false);
}

}
...
Рейтинг: 0 / 0
Хранение клиентских форм (вместе с логикой) в БД. Требуется наводка.
    #38335729
vill_ager
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Izya,
можно еще посмотреть тут
...
Рейтинг: 0 / 0
Хранение клиентских форм (вместе с логикой) в БД. Требуется наводка.
    #38335742
iscrafm__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlexKB, на этом форуме есть такой элемент (Дополнит\spoiler)
большой текстон позволяет оградит читателей от вынужденной перемотки на конец сообщения, если кто-то запостил непонятный текст на несколько страниц
...
Рейтинг: 0 / 0
Хранение клиентских форм (вместе с логикой) в БД. Требуется наводка.
    #38335746
iscrafm__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vill_agerIzya,
можно еще посмотреть тут
у Вас на сайте вредоносное ПО. Посмотрите...
...
Рейтинг: 0 / 0
Хранение клиентских форм (вместе с логикой) в БД. Требуется наводка.
    #38335753
AlexKB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafm__AlexKB, на этом форуме есть такой элемент (Дополнит\spoiler)
большой текстон позволяет оградит читателей от вынужденной перемотки на конец сообщения, если кто-то запостил непонятный текст на несколько страниц


Спасибо, буду знать!
Я не из вредности, извините, Форумчане.
...
Рейтинг: 0 / 0
Хранение клиентских форм (вместе с логикой) в БД. Требуется наводка.
    #38335759
vill_ager
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iscrafm__vill_agerIzya,
можно еще посмотреть тут
у Вас на сайте вредоносное ПО. Посмотрите...
да, спасибо
похоже ломанули :(
...
Рейтинг: 0 / 0
Хранение клиентских форм (вместе с логикой) в БД. Требуется наводка.
    #38335791
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TC,

Конфигуратор прикладных форм можно сделать и на самом аксесе . У меня был вариант - ADP + MSSQL2008. Для отображения форм, фильтрации, поиска, перехода по формам кода не нужно - все настраивается. Формы могут иметь сложную структуру - панели, связанные 1:1, 1:М, деревья и т.п.
...
Рейтинг: 0 / 0
Хранение клиентских форм (вместе с логикой) в БД. Требуется наводка.
    #38336063
s_ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IzyaСоответственно, на клиентской стороне необходима только простая форма, которая бы показывала пользователю данные из БД и вызывала в ней хранимые процедуры. ...

web интерфейс - не оно?
:)
...
Рейтинг: 0 / 0
Хранение клиентских форм (вместе с логикой) в БД. Требуется наводка.
    #38336126
vill_ager
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
s_ustinov,

для вебинтерфейса нужен вебсервер
да и сама вебморда не дотягивает до десктопа по удобству

мне кажется что ТС скорее интересует вариант, когда для запуска программы нужны две вещи:

клиент, способный интерпретировать сохраненную в БД логику
собственно БД, хранящая данные и логику

в таком случае для установки новой версии ПО нужно только обновить в БД таблицы с логикой
...
Рейтинг: 0 / 0
Хранение клиентских форм (вместе с логикой) в БД. Требуется наводка.
    #38336220
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сложно сказать что хочет автор. т.к. он ни на чём кроме access не писал.
Пусть берёт готовое.
...
Рейтинг: 0 / 0
Хранение клиентских форм (вместе с логикой) в БД. Требуется наводка.
    #38336443
vill_ager
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vill_ageriscrafm__пропущено...

у Вас на сайте вредоносное ПО. Посмотрите...
да, спасибо
похоже ломанули :(
уже почистил
...
Рейтинг: 0 / 0
Хранение клиентских форм (вместе с логикой) в БД. Требуется наводка.
    #38337625
Izya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123, у вас с логикой беда. То, что клиент сейчас написан на акцессе, вовсе не значит, что я писал только на акцессе. Мне так кааца.

Совсем по простому. Есть БД. Например (например!) в этой БД есть таблицы, содержащие данные об отгрузках со склада (заголовки, строки). Также там есть ХП, которая "выполняет" отгрузку, ставя какие то флаги, прописывая даты, меняя кол-ва на складе и тп. Сейчас в Акцессе есть форма, где эти таблицы есть источник данных, и которая, также, содержит большую кнопку "Отгрузить" которая вызывает выполнение это ХП в БД на стороне сервера.

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

Есть языки среды, где можно рисовать формы и сериализовать объекты (в том числе в БД), но мне нужно сериализовать объекты интерфейса вместе с кодом (даже если этот код достаточно простой) то есть речь идет IMHO о сериализации уже и класса. Я также рассматриваю возможность использовать какой то "интерфейный фреймворк", который бы можно прицепить к готовой БД в которой логика уже реализована. IscraFM вроде близка, но мне показалось, что с существующей БД, написанной без соблюдения определенных для этого фреймворка правил, она работать не будет. т.е надо исходную существующую рабочую БД (данные и логику предметной области) под это фреймворк менять - а не хотелось бы.

Понятней вроде некуда.

Я уж думаю, что в шарпе такую загрузку изобразить можно. Вопрос скорее в констукторе форм. Хотя можно прямо в среде рисовать а потом инфу о форме и о наборее ее контролов скидывать в БД, а код, поскольку он простой и сводится к вызову ХП, тоже как данные держать. Такое описание форм в принципе клинетнезависимо, можно, наверное, и WEB интерфейс по нему строить. Это пока наметки, но, вроде должно работать.

Я пытался найти готов решение
...
Рейтинг: 0 / 0
Хранение клиентских форм (вместе с логикой) в БД. Требуется наводка.
    #38337627
Izya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не хочу на Cashe переходить. Он, возможно, хороший, но не хочу.
...
Рейтинг: 0 / 0
Хранение клиентских форм (вместе с логикой) в БД. Требуется наводка.
    #38337656
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IzyaIscraFM вроде близка, но мне показалось, что с существующей БД, написанной без соблюдения определенных для этого фреймворка правил, она работать не будет. т.е надо исходную существующую рабочую БД (данные и логику предметной области) под это фреймворк менять - а не хотелось бы.
Izya, там не ограничивающих правил. Есть рекомендации, но это не ограничивающие правила. Скажем, если захотите делать распределенную интернет-систему, то есть такая рекомендация . Но никто не запрещает так не делать, рекомендации просто как попытка избавить от проблем в дальнейшем, потому что это все пройдено не один раз. Особенно если логика реализована при помощи ХП в СУБД, то это вообще, можно сказать, родное для нее .
...
Рейтинг: 0 / 0
Хранение клиентских форм (вместе с логикой) в БД. Требуется наводка.
    #38337689
trdm_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Izya
Как реализовать хранение и загрузку таких форм?
В xml например.

Izya
Как реализовать хранение и загрузку таких форм? Поскольку задача не новая (тот же MSAccess, 1С, Navision как то такие формы хранит), есть, наверное, технологии или даже языковые средства. Может есть другие идеи или опробованные методы - все интересно. Спасибо.

готовой софтины, которой бы показал базу данных и таблицы, а она бы построила гуй с легкой кастомизацией практически нет. Есть только редакторы таблиц. У того же 1С-а все наоборот - сначала структуру рисуешь, а 1С по ней создает таблицы.
...
Рейтинг: 0 / 0
Хранение клиентских форм (вместе с логикой) в БД. Требуется наводка.
    #38337693
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
trdm_,

даже хаф это делает легко
...
Рейтинг: 0 / 0
Хранение клиентских форм (вместе с логикой) в БД. Требуется наводка.
    #38337700
trdm_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
+
у меня есть недософтинка , которая генерит гуй: Меню,списки элементов,формы элементов и групп, выполняет сериализацию из вот таких структур:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
void uoMainWindow::createTables()
{
	QString dbName = qApp->applicationDirPath() + QDir::separator()+"main.db";
#ifdef Q_OS_LINUX
	QDir home = QDir::home();
	if (!home.exists(".uoReceptor")) {
		home.mkpath(".uoReceptor");
	}
	dbName = home.absolutePath() + "/.uoReceptor/" + QDir::separator()+"main.db";
#endif


	m_dbMan->setupDataBase(dbName);
	m_receptTable = m_dbMan->addRefTable("ШаблоныPецептов","Шаблоны рецептов",6,120);
	m_receptTable->setOption(codeType_Number, true);
	m_receptTable->addField("Комментарий", fieldType_String,150);
	m_templField = m_receptTable->addField("Шаблон", fieldType_TextHTML);
	uoMdiObserver::instance()->m_receptTableId = m_receptTable->m_baseNom;

	uoDbRefTable* tmlpTabl = m_dbMan->addRefTable("Лекарства","Лекарства",6, 70);
	tmlpTabl->addField("ЛатИмя",fieldType_String,70)->m_descr = "Латинское наименование";
	tmlpTabl->addField("Описание",fieldType_Text);
	tmlpTabl->setOption(codeType_Number, true);

	tmlpTabl = m_dbMan->addRefTable("Симптомы","Симптомы",6, 100);
	tmlpTabl->setOption(codeType_Number, true);
	tmlpTabl->addField("Описание",fieldType_Text);

	tmlpTabl = m_dbMan->addRefTable("Заболевания","Заболевания",6, 100);
	tmlpTabl->setOption(codeType_Number, true);
	tmlpTabl->addField("Описание",fieldType_Text);

	m_dbMan->restructuring();//  Реструктуризация
	m_dbMan->createGuiFactory(this);
	m_receptTemplDocWidget = new QDockWidget(tr("Recept template"), this);
	m_receptTemplDocWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);

	uoUrl url = m_receptTable->getUoUrlByForm(uoFormT_Tree);
	url.setWithElem(true);
	m_docTreeFormRecept = m_dbMan->getForm(url);
	if (m_docTreeFormRecept) {
		m_docTreeFormRecept->setParent(m_receptTemplDocWidget);
		m_receptTemplDocWidget->setWidget(m_docTreeFormRecept);
		addDockWidget(Qt::LeftDockWidgetArea, m_receptTemplDocWidget);
		m_actionShowDocRecept = m_receptTemplDocWidget->toggleViewAction();
	}
}



никто не мешает мне добавить метод к uoDbRefTable с передачей например таких данных
QString formSrc = "<table id = "Лекарства" afterSaveXP=onRefSubmit()>
<label caption="Bla-bla-bla" buddy="Descr"></label><edit id="Descr"></edit>
<label caption="Bla-bla-bla2" buddy= "ЛатИмя"></label><edit id="ЛатИмя"></edit>
</table>";
tmlpTabl->setFormSrc(formSrc);

и построить по этой недоэксемэльке форму ввода, а после записи выполнить хранимку onRefSubmit().
пощупать что получилось можно скачав архив с программой .
...
Рейтинг: 0 / 0
25 сообщений из 66, страница 1 из 3
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Хранение клиентских форм (вместе с логикой) в БД. Требуется наводка.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]