-
Постов
235 -
Зарегистрирован
-
Посещение
-
Победитель дней
9
Сообщения, опубликованные Камышев Александр
-
-
в главной форме объявить
void __fastcall OnOptFormReady(TObject *Sender);
в вызываемой форме
private: // User declarations TNotifyEvent FOnReady; public: // User declarations __property TNotifyEvent OnReady = { read = FOnReady, write = FOnReady };
показать форму
if ( !fmLogin ) fmLogin = new TfmLogin(this); fmLogin->OnReady = OnOptFormReady; #ifdef WIN32 fmLogin->ShowModal(); #else fmLogin->ShowFullScreenIcon = true; fmLogin->Show(); #endif
по кнопкам в "модальном" окне вызвать событие:
Close(); ModalResult = mrOk; // если ок if ( FOnReady ) FOnReady( (TObject*)this );
и обработка callback:
void __fastcall TForm1::OnOptFormReady(TObject *Sender) { if ( Sender == fmLogin ) { if ( fmLogin->ModalResult != mrOk ) return; ApplySettings(); }
код получается кроссплатформенный
-
1 час назад, Mikhail Tchervonenko сказал:
Единственное по уму организовать систему подпапок дабы не миллион файлов в одной папке, например название папки это последние 3 цифры
Файлам при загрузке присваивать идентификатор, лучше первичный ключ, можно просто уникальный.
Далее получить путь:
String SUFileName( unsigned int id ) { unsigned int d1, d2; d1 = id / 0x3fffff; d2 = ( id - ( 0x3fffff * d1 ) ) / 0xfff; return "su_files\\" + (String)d1 + "\\" + (String)d2 + "\\" + (String)id + ".file"; }
не забывать создавать подпапки:
void CreateWarehouse( String path, unsigned int id ) { CreateDirectory( ( path + "\\su_files" ).c_str(), NULL ); unsigned int d1, d2; d1 = id / 0x3fffff; d2 = ( id - ( 0x3fffff * d1 ) ) / 0xfff; CreateDirectory( ( path + "\\su_files\\" + (String)d1 ).c_str(), NULL ); CreateDirectory( ( path + "\\su_files\\" + (String)d1 + "\\" + (String)d2 ).c_str(), NULL ); }
Глубину вложения можно изменить в зависимости от ситуации.
-
21 минуту назад, Евгений Корепов сказал:
Почему? Для некоторых нужд очень даже. К примеру регулярно пользуюсь ftp-сервером на телефоне - намного удобнее заливать/сливать (по wifi) книги, музыку и прочее, сидя за компьютером в Far manager, чем перетаскивая мышкой в убогих индусских синхронизаторах или пользоваться облачными решениями (залить 30 гигов в dropbox с компьютера (тут нет проблем, инет 450 мегабит), а потом их выкачивать из инета на телефон даже по wifi ac то еще удовольствие).
и возразить то нечего, да так удобно, файловые менеджеры есть с такой возможностью, открывают порт и пишут по какому адресу ftp доступен
-
tcp сервер на телефоне, жесть
-
часики тикают: ку ти, ку ти, ку ти
-
8 минут назад, ZuBy сказал:
такой продукт это не калькулятор и в него нужно войти с головой чтобы понять всю архитектуру и количество качеством не покрывается
Менеджер отправился к Великому Программисту и показал ему техзадание для новой программы. Менеджер спросил Мастера: «Сколько времени займёт у вас разработка этой системы, если я назначу вам пять программистов?»
«Один год» — быстро ответил Мастер.
«Но нам она нужна вчера! Как долго вы будете её разрабатывать, если я вам дам десять программистов?»
Мастер нахмурился, и сказал: «тогда два года».
«А если я назначу вам сотню программистов?»
Мастер пожал плечами: «В таком случае, она никогда не будет завершена» -
Зачем это все в потоке? FireDac компоненты могут работать в асинхронном режиме, не нужно их в поток засовывать.
Вроде обсуждали что FireDac не работает на андроид... Этот код рабочий? т.е. Вы работали с устройства с базой данных?
-
не успели линукс запилить, жаль...
-
В 18.11.2016 в 21:18, krapotkin сказал:
открываем, читаем
"Работа с данными организована следующим образом – есть сервер БД (MS SQL Server), есть сервер Data Snap, через него работает с данными клиент на Android."
один, два, три.запрос - это как бы сказать - обыденное мероприятие. а подключение к БД - вовсе нет. поэтому при каждом падении-поднятии сети нужно заново переподключаться
это довольно затратная по времени операция. при этом сначала мы будем ждать тайм-аут по запросу, чтобы сделать вывод об упавшем подключении, потом, собственно, подключаться, а потом - повторять запрос.
так что не согласен. совсем. Устойчивость при плохой связи как раз и есть принцип. HTTP весь построен на запросах ответах, поэтому отсутствие постоянного соединения вполне отвечает архитектуре системы.
А то, что обмен при установленном соединении может идти в бинарном виде - это, конечно, выигрыш, но уж больно дорогой ценой.
http - надстройка над TCP, всего лишь крайний, прикладной уровень в OSI, при каждом запросе так же точно как в случае с субд ждать таймаута и переподключаться,(если нет способа определить разрыв сразу), в каждом пакете слать регистрацию. Запрос к БД и запрос к серверу приложений - это в обоих случаях сессия TCP и обмен массивами, только в http еще добавляются строковые заголовки, которые надо парсить. Устойчивость здесь и близко не лежала. Те же яйца, только в профиль. И нет там никакой дорогой цены, отсутствие родных компонентов для прямого подключения - минус FMX.
Я сторонник трехзвенки, она позволяет реализовать правила работы с данными и корректно работать с СУБД, но и только.
-
Трехзвенная архитектура имеет много плюсов, однако устойчивости при плохой связи среди этих плюсов нет.
И в трехзвенке и в прямом доступе сеанс TCP и обмен массивами, размеры массивов также примерно одинаковые. Правильно построенный запрос к напрямую к БД пройдет быстрее чем через сервер приложений. Для простых приложений pourquoi бы и не pas.
Упавшая БД - ночной кошмар it-шников, ее стараются всячески оберегать и работать с ней трепетно. Трехзвенка как раз такой случай.
-
VCL компоненты с красивыми шкурками тут, пользовался ими раньше, интересный дизайн и функционал, жаль что только VCL, под андроид не пойдет.
-
void __fastcall TForm1::FormPaint(TObject *Sender, TCanvas *Canvas, const TRectF &ARect) { Canvas->BeginScene(); TRect rect = Rect( 10, 10, 100, 100 ); TRect src = Rect( 0, 0, ImageControl1->Bitmap->Width, ImageControl1->Bitmap->Height ); Canvas->DrawBitmap( ImageControl1->Bitmap, src, rect, 1, false ); Canvas->EndScene(); }
Где проблема то?
-
13 часов назад, sviat9440 сказал:
мб: Blending?
угу
-
мдя, тут было http://fire-monkey.ru/topic/2011-androidmysql/,
MyDac от devart собственно не так дорог, там тот же алгоритм, только имена другие TMyConnection и TMyQuery
-
знакомо... это работало крайне медленно, перебор по пикселям, немного быстрее там было считывать line,
тот же эффект в FMX даст Canvas->Blending = true
-
19 часов назад, elGringo сказал:
Или может просто включать white list на FireWall?
white list на 8к пользователей в firewall? Вас одмин проклянет...
-
Клади на форму TFDConnection, TFDQuery и TFDPhysMySQLDriverLink,
Connection автоматом пропишется в Query, в Connection прописывай настройки соединения, там все просто, дальше Connection->Open(); - если настройки годные будет коннект.
В Query->SQL->Text пишешь sql запрос, и Query->Open() - Query->Close() либо Query->ExecSQL() в зависимости от запроса
Смотреть события AfterConnect, AfterDisconnect, ConnectionError, AfterOpen, AfterExecute, QueryError;
-
Скорее никак, сглаживаются примитивы при прорисовке по канве компонента на форме.
Вот тут обсуждали http://fire-monkey.ru/topic/1927-сглаживание-при-рисовании-в-буфер-bitmap/
-
можно еще провода вырвать для полного спокойствия
-
Чтобы не гадать, нужно скачать в googleplay любой SQLite браузер, проверить этой сторонней утилитой доступ к таблицам.
-
-
Порты закрываются наружу в настройках СУБД, и/или пользователя. Оставляют доступ с localhost либо конкретному ip.
Архитектура - это вопрос религии. Если брать релятивистские СУБД, то архитектура клиент-сервер проще и требует меньше ресурсов. Трехзвенная более устойчивая, сложнее в реализации.
В клиент-сервере, если не писать хранимые процедуры, клиент может неосторожным запросом завесить базу, и вообще что ему в голову придет - неясная логика. В трехзвенной появляются дополнительные возможности, косяки разных технологий и кривизна пальцев сильно сказывается.
REST не предполагает свободы выбора, плати за гигибайты и флопсы в облаке и не парься архитектурой.
-
Делал на виндовс, в настройках url входа в систему по умолчанию, т.е. url сервера, который раздает линки по настройкам профиля. Профиль в хедерах http указывается.
По линку(тоже url) движок приложения получает конфигурацию и доп. файлы.
Сложно и оправдано только для больших проектов.
-
tcp_client->Socket->Write( data_out, false );
data_out - TMemoryStream размером около 1,5 Мб, если использовать wifi все ок, в OnWork исправно AWorkCount по 96 байт шлет.
Выключаю wifi проверяю интернет соединение - все ок, небольшие массивы по несколько килобайт уходят без проблем.
Впихиваю 1,5 метра - AWorkCount показывает какие-то либо терабайты либо отрицательные значения.
Ошибки нет, тупо висит. Что ему не так то? help
Сложности с трехвезнкой
в MySQL
Опубликовано
а что тут понимать, на то он и IDE, среда быстрой разработки, а DataSnap уже старая технолигия, в принципе все должно само собраться и работать, не обязательно 80 лвл иметь