HTML+JAVA или C++: что мне лучше использовать?
PS: интересует скорость, дизайн, удобство работы с БД, обновление через интернет, возможность гибкого переноса на другой компьютер
дизайн - помойму, более гибкий дизайн в HTML (php)
удобство работы с БД - в зависимости от требований..:-) т.е. для большого подключения одновременно намного лучше использовать Mysql + php
обновление через интернет - кому что отправлять собираешься?:-)
гибкого переноса - а зачем переносить?)
из моего опыта могу сказать, что лучше использовать Apache(php), если у тебя каталог будет доступен для оч. большого кол-ва пользователей. и если для тебя 1-10, то возможо будет проще все разослать клиента и пусть все коннектяться на сервер:-) опять же, с++ подразумевает наличие программы у клиента на машине...а apache, все делается на сервере.
Разрабатывается быстро (все описанное за вечерок склепать можно), к ресурсам не слишком требовательно, масштабируемость тоже хороша (ну, если правильно спроектировать).
Кроме того, можно на домашнем XP-шнике сайт держать.
Тоже самое можно сказать в отношении Java + Tomcat (или Sun App Sever) + какаянить база.
Технологии эквивалентны.
2. важна скорость загрузки страницы с необходимой информацией
3. переносить есть необходимость, т.к. хочется сделать без зависимости к определенному компьютеру - на USB -Flash, скажем, закинуть...
4. Apache и MySQL надо использовать так, чтобы сервиса автоматически устанавливали все настройки и запускали сервисы, а при зарытии программы - все сворачивалось и удалялось...
короче программа-цирк - если концерт, то приехала и развернулась; если в другой город - свернулась и убралась :)
З.Ы.Вопросы "за жизнь" - как в прочем и подобные - лучше размещать в разделе Гостевая книга. Куда и перезжаем.
2. важна скорость загрузки страницы с необходимой информацией
3. переносить есть необходимость, т.к. хочется сделать без зависимости к определенному компьютеру - на USB -Flash, скажем, закинуть...
4. Apache и MySQL надо использовать так, чтобы сервиса автоматически устанавливали все настройки и запускали сервисы, а при зарытии программы - все сворачивалось и удалялось...
короче программа-цирк - если концерт, то приехала и развернулась; если в другой город - свернулась и убралась :)
Ну, тогда, на мой взгляд, лучше всего использовать С++ и в качестве БД dbf...минимальная зависимость по ресурсам, быстрая работа, обновление, вывод на экран итп. легко можно будет переносить куда угодно, т.е. не будет никаких зависимостей.:-)
А что конкретно необходимо в примере? Как организовать динамическое подключение БД? Сложного ничего нет. Например этот фрагмент кода настраивает программу и подключает базу в зависимости от настроек реестра. В твоем случае просто будет необходимо переработать под твои условия - проверяя параметры динамически.
//Получаем директорию для временных файлов - можно заменить на
//системную директорию.
TmpDir = ExtractFilePath(ParamStr(0))+"tmp\\";
TRegistry *Reg = new TRegistry;
//Считываем параметры реестра - в твоем случае в этом необходимости нет
//вполне достаточно получить информацию о компьютере которая тебе
//действительно необходима - например список сетевых интерфейсов
//информацию о необходимых настройках - например инфу о названии файла
//БД, необходимых сервисах, и пр. можно хранить в XML-файле в папке программы
RegPath = "SOFTWARE\\MalKonSW\\nOTC\\settings";
//Отсутствует ветвь реестра
if(!Reg->KeyExists(RegPath)) return 1;
Reg->OpenKey(RegPath,false);
Reg->WriteDate("paramis",Now());
if(!Reg->ValueExists("dbpathnew")) return 2;
PathDataBase = Reg->ReadString("dbpathnew");
Servertmp = Reg->ReadString("Server");
Provider = Reg->ReadString("Provider");
Station = Reg->ReadInteger("station");
Address = Reg->ReadString("address");
Phone = Reg->ReadString("phone");
Reg->CloseKey();
RegPath = "SOFTWARE\\MalKonSW\\nOTC\\ftp";
Reg->OpenKey(RegPath,false);
FTPAddress = Reg->ReadString("address");
FTPUser = Reg->ReadString("user");
FTPPass = Reg->ReadString("pass");
FTPInDir = Reg->ReadString("in");
FTPOutDir = Reg->ReadString("out");
InDir = ExtractFileDir(ParamStr(0))+"in\\";
//Получаем имя компьютера
char buffer[512];
DWORD size = 512;
GetComputerName(buffer,&size);
dmMain= new TdmMain(this);
TfmLogin *login = new TfmLogin(NULL);
try{
login->ShowModal();
if(login->ModalResult!=mrOk){
delete dmMain;
dmMain = NULL;
Application->Terminate();
return 2;
}
SUser = login->edName->Text;
Pass = login->edPass->Text;
//Формируем строки подключения - у меня в данной версии использовалось
//две строки подключения. Зачем - хз. Не помню. :)
WideString Connect = "Provider="+WideString(Provider)+";Password="+WideString(Pass)+";Persist Security Info=True;User ID="+WideString(SUser)+";Data Source="+WideString(Server)+";Extended Properties=\"AttachDBFileName="+WideString(PathDataBase)+"\";Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID="+WideString(buffer)+";Use Encryption for Data=False;Tag with column collation when possible=False;MARS Connection=False;DataTypeCompatibility=0;Trust Server Certificate=False";
ConnectForClient = "Provider="+WideString(Provider)+";Password="+WideString(Pass)+";Persist Security Info=True;User ID="+WideString(SUser)+";Data Source="+WideString(Server)+";Initial Catalog="+WideString(PathDataBase)+";Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID="+WideString(buffer)+";Use Encryption for Data=False;Tag with column collation when possible=False;MARS Connection=False;DataTypeCompatibility=0;Trust Server Certificate=False";
//Дальше идет обработка начальной инфы - тут пишешь свое - то что нужно тебе.
if(dmMain->adoConnect->Connected)dmMain->adoConnect->Connected = false;
dmMain->adoConnect->ConnectionString = Connect;
try{
dmMain->adoConnect->Connected = true;
dmMain->adoGetUserId->ExecProc();
User = dmMain->adoGetUserId->Parameters->ParamByName("@userid")->Value;
}
catch(EOleException *exception)
{
//ShowMessage(exception->Message);
//delete fmLogin;
delete dmMain;
dmMain = NULL;
return 2;
}
cbSchema->AddItem("Все записи",(TObject*)new int(-1));
dmMain->adoLoadSprcredit->Active=true;
dmMain->adoLoadSprcredit->First();
while(!dmMain->adoLoadSprcredit->Eof)
{
AnsiString s=dmMain->adoLoadSprcredit->FieldByName("creditname")->AsString;
int wsh=dmMain->adoLoadSprcredit->FieldByName("creditid")->AsInteger;
cbSchema->AddItem(s,(TObject*)new int(wsh));
dmMain->adoLoadSprcredit->Next();
}
dmMain->adoLoadSprcredit->Active=false;
cbSchema->ItemIndex=0;
}
__finally{
delete login;
login = NULL;
delete Reg;
Reg = NULL;
}
return 0;
}
Этот вариант имеет один недостаток(точнее - в моем случае установленный сервис являлся корпоративным стандартом) - в нем предполагается наличие на компьютере уже установленного MSSQLExpress - тебе для твоих задач можно использовать более простые варианты - типа Firebird - принцип и подход примерно тот же - но не требуется устанавливать дополнительные сервисы.
(c)Функция приведена в качестве примера и не содержит полного кода. Все переменные и компоненты инициализируются должным образом при необходимости. Имена переменных отражают их тип класса (для компонентов) и внутреннее назначение (например adoConnect - компонент TADOConnection). Переменные которые не объявлены локально, являются открытыми или закрытыми членами класса формы, согласно общепринятых норм в ВСВ и С++ и соответствующим образом должны быть проинициализированы в конструкторе в зависимости от типа. Код предоставляется как есть, без каких либо явных или не явных гарантий.
А как бы вы решали данную задачу лет этак 100 назад? А 1000? А резон ли пользоваться зажигалками когда огонь и при помощи мха и двух камней добыть можно?
Прочтите описание задачи - можно и обойтись без БД вообще - но в таком случае врядли удасться достичь того же удобства и результата. Можно изобретать велосипед и пытаться обойтись минимумом средств - какой в этом смысл? Что будет в выиграше?
...
Может, лучше тогда держать локальную базу в XML? Там и дерево прекрасно организуется, и ставить ничего не надо. Ну, разве что дотнет. Правда, размер будет немаленький, и картинки хранить неудобно. Но тогда лучше действительно поднять ресурс в Интернете. Надёжно, единообразно, идеально переносимо и доступно, например, с КПК+GPRS хоть сидя в туалете. Чем не вариант?
хочется узнать из основного:
1. быстро ли будет динамически рисоваться (обрабатываться и грузиться) список, скажем, из 20-50 объектов на форме, а потом жудаляться и рисоваться по-новой...?
2. База данных, которая не будет требовать больших затрат с установкой, хорошо бы было вообще без установки (включая сервисов и т.п. вещей), ограничиться, например, парой DLL...
3. если использовать MDB (Access БД), то ей необходим предустановленный MS Office (или нет?)
4. Думал использовать и устанавливать/удалять скрыто Apache + MySQL... но проблем с этим возникает не мало... Но зато можно пихать абсолютно любую графику и гибкая настройка стилей... что не скажешь про VCL - там надо спецкомпоненты. Зато обработка функций более удобна и можно создать больше возможностей и реализовать больше действий, например, получение размера жесткого диска, привязка (вдруг понадобится) и т.п. вещи, который нельзя реализовать в WEB-программировании...
Итак, какие будут пожелания? :)
хочется узнать из основного:
1. быстро ли будет динамически рисоваться (обрабатываться и грузиться) список, скажем, из 20-50 объектов на форме, а потом жудаляться и рисоваться по-новой...?
2. База данных, которая не будет требовать больших затрат с установкой, хорошо бы было вообще без установки (включая сервисов и т.п. вещей), ограничиться, например, парой DLL...
3. если использовать MDB (Access БД), то ей необходим предустановленный MS Office (или нет?)
4. Думал использовать и устанавливать/удалять скрыто Apache + MySQL... но проблем с этим возникает не мало... Но зато можно пихать абсолютно любую графику и гибкая настройка стилей... что не скажешь про VCL - там надо спецкомпоненты. Зато обработка функций более удобна и можно создать больше возможностей и реализовать больше действий, например, получение размера жесткого диска, привязка (вдруг понадобится) и т.п. вещи, который нельзя реализовать в WEB-программировании...
Итак, какие будут пожелания? :)
1. Firebird/C++Builder - загрузка 40 изображений размером 2400*2400 по сети занимала ок 15 сек.
2. Firebird Emmbeded, LiteSQL и т.п.
3. Да необходим - или необходимо установить драйвера для доступа.
4. Скрытую установку ты можешь и не выполнить - правила безопасности могут не позволить. Никаких спец-компонентов для работы с графикой не нужно.