Нужно написать программу для работы с БД. Типичных use cases только четыре: добавление записи, правка записи, поиск записи по критериям, создание отчета (в формате OOo) по некоторому набору записей. Записей будет совсем немного, в пределах сотни, зато у каждой будет много полей.
Собственно, записи — это недвижимость. БД будет собирать данные из разных источников, нужно уметь обновлять данные (например, цены изменились, или был сделан ремонт, или еще что-нибудь), нужно проверять данные на предмет того, вдруг они уже были вставлены в БД из других источников.
Самое главное — usability. Сейчас это делается вручную в MS Excel, я эту книгу видел, очень неудобно. Нужно сделать простой, удобный и красивый интерфейс.
Требование заказчика — чтобы он мог сам переделывать интерфейс. Какие средства разработки позволяют проще всего этого достичь?
Варианты, которые я нашел:
· OOo Base. Предназначена для программ такого рода, интерфейс вроде тоже переделывается. Но что-то там многого не хватает, в сравнении с той же MS Access. Или не там ищу?
· HTMLayout. Здесь вроде с интерфейсом просто, да и заказчик хорошо владеет HTML/CSS. Но зато придется самому ручками делать взаимодействие с БД. И MS Windows only.
· Qt. Умеет динамически грузить .ui-файлы. GPL — не проблема. Но всё равно придется писать работу с БД.
· Что-нибудь на XForms. Сам пока еще не разобрался, но выглядит перспективно.
На чем нынче делают такое? Платформа заказчика — MS Windows, но кроссплатформенные решения — это, конечно, плюс. Еще раз: БД очень простая, но нужно сделать хороший интерфейс.
Здравствуйте, Roman Odaisky, Вы писали:
RO>На чем нынче делают такое? Платформа заказчика — MS Windows, но кроссплатформенные решения — это, конечно, плюс. Еще раз: БД очень простая, но нужно сделать хороший интерфейс.
Бери MS Access + MSSQL. Я серьёзно.
Если требуется, чтобы заказчик мог что-то менять — то Access тут впереди планеты всей.
Здравствуйте, Roman Odaisky, Вы писали:
RO>Во-первых, десктопные программы еще долго будут удобнее вебморд: разнообразие элементов управления,
Да в принципе, сейчас это не проблема.
RO>...нулевое время отклика.
Всё зависит от прямизны рук программиста и скорости клиентского компа
RO>А во-вторых, там трафика многовато, картинки нужны и т. п.
Многовато — это сколько? И какие картинки надо отображать?
Здравствуйте, Roman Odaisky, Вы писали:
RO>Во-первых, десктопные программы еще долго будут удобнее вебморд: разнообразие элементов управления, нулевое время отклика.
Последняя веб-морда, с которой я сталкивался — это был интерфейс управления для клиента uTorrent. На мой взягляд — очень достойно. Вот пара скриншотов:
Здравствуйте, Roman Odaisky, Вы писали:
RO>Hi All,
RO>Нужно написать программу для работы с БД. Типичных use cases только четыре: добавление записи, правка записи, поиск записи по критериям, создание отчета (в формате OOo) по некоторому набору записей. Записей будет совсем немного, в пределах сотни, зато у каждой будет много полей.
вобщем-то неважно на чём, если есть гуёвщик то он сделает хоть на дельфи.
Здравствуйте, Roman Odaisky, Вы писали:
RO>Требование заказчика — чтобы он мог сам переделывать интерфейс. Какие средства разработки позволяют проще всего этого достичь?
Меня сейчас наверное побьют каменьями, но я бы сказал — VBA. MS Office у человека уже есть, значит и VBA есть, делать формы там можно, освоить легко.
Что же касается юзабилити — то к вопросу выбора инструментария оно вообще отношения не имеет.
Здравствуйте, Roman Odaisky, Вы писали:
RO>· HTMLayout. Здесь вроде с интерфейсом просто, да и заказчик хорошо владеет HTML/CSS. Но зато придется самому ручками делать взаимодействие с БД. И MS Windows only.
... RO>На чем нынче делают такое? Платформа заказчика — MS Windows, но кроссплатформенные решения — это, конечно, плюс. Еще раз: БД очень простая, но нужно сделать хороший интерфейс.
Sciter. Ибо это такой htmlayout со встроенным скриптом и базой данных.
Плюс Sciter умеет сам себе быть веб сервером — обрабатывать templates:
Вот набросал пример простой формы для редактирования записей в DB.
Тир поля: numeric, text (single line) и richtext (html)
Этот пример состоит из трех файлов: simple-db-form.htm — это то что загружеается в sciter и
два скрита form.tis и db.tis. Привожу их полностью:
simple-db-form.htm:
<html>
<head>
<style>
form#record
{
border:1px solid; prototype:Form;
width:*; height:*;
padding:6px; margin:10px;
background-color: white white cornsilk cornsilk;
}
form#record > table { width:*; height:*; }
form#record > table > tr:nth-child(3) { height:*; }
form#record > table td { vertical-align:top; }
form#record > table td:nth-child(1) { text-align:right; }
form#record richtext { width:*; height:*; }
</style>
<script type="text/tiscript">
include "form.tis";
include "db.tis";
var form = self.select("form#record");
var rec_no = self.select("#rec-no");
var db = openDatabase();
var no = 0;
function gotoRecNo( n )
{
no = n;
if( no < 0 ) no = 0;
if( no >= db.root.records.length ) no = db.root.records.length - 1;
form.show( db.root.records[no] );
rec_no.text = String.printf("%d of %d", no, db.root.records.length);
rec_no.update();
}
function self #first .onClick() { gotoRecNo(0); }
function self #prev .onClick() { gotoRecNo(no - 1); }
function self #next .onClick() { gotoRecNo(no + 1); }
function self #last .onClick() { gotoRecNo(db.root.records.length - 1); }
function gotoNewRecord()
{
// create new record
db.root.records[ db.root.records.length ] = { first:0, second:"", third:"<html><\/html>" };
gotoRecNo(db.root.records.length - 1);
}
function self #new .onClick()
{
gotoNewRecord();
}
function view.onLoad()
{
if(db.root.records.length)
gotoRecNo(0);
else
gotoNewRecord();
}
function view.onUnload()
{
form.save();
db.close();
}
</script>
<head>
<body>
<h1>Simple DB form</h1>
<form #record>
<table>
<tr><td>First (number)</td><td><input name="first" type="number"/></td></tr>
<tr><td>Second (text)</td><td><input name="second" type="text"/></td></tr>
<tr><td>Third (richtext(html))</td><td><richtext name="third" /></td></tr>
</table>
</form>
<div #nav>
<button #first title="to first record">|<</button>
<button #prev title="to prev record"><</button>
<button #next title="to next record">></button>
<button #last title="to last record">>|</button>
<button #new title="create new record">new</button>
record: <span #rec-no>?</span>
</div>
</body>
</html>
Файл form.tis — behavior формы с полями ввода/отображения:
Фактически набор input полей в форме определяет набор полей в записи db.
// Form handler class
type Form: Behavior
{
function show(rec)
{
if(this.shown) this.save(); // save previously shown record.this.shown = rec;
function load_value(el)
{
var name = el.attributes#name;
el.value = rec[symbol(name)];
}
this.select(load_value, "[name]");
// call load_value for each element having "name" defined.
// De facto this means that form content defines structure of the record.
}
function save()
{
var shown = this.shown;
function store_value(el)
{
var name = el.attributes#name;
shown[symbol(name)] = el.value;
}
this.select(store_value, "[name]");
// call store_value for each element having "name" defined.
}
}
И db.tis — открытие и инициализация DB (если нужно)
function openDatabase(pathname = "records.db")
{
var ndb = Storage.open(pathname);
if(!ndb.root)
{
// new db, initialize structure
ndb.root =
{ // root of our db is an object having single field 'records'
records: ndb.createIndex(#integer) // main index, int -> item
};
}
return ndb;
}