-
Постов
235 -
Зарегистрирован
-
Посещение
-
Победитель дней
9
Активность репутации
-
Камышев Александр отреагировална Pax Beach в Помогите с MySQL
Да, я помню, там каждый высказал свое мнение, ни к чему не пришли, остались при своем.
У меня есть мнение, что прямые руки при настройке ролей БД и правильная обработка соединения с распределенной БД отлично заменяют трехзвенку.
А безаппеляционное заявление «ХХХ — зло» — это флэйм и холивар, бесполезный мусор на форуме ;-)
L2C and have right hands!
-
Камышев Александр получил реакцию от Kitty в ShowModal not implemented on this platform
в главной форме объявить
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(); } код получается кроссплатформенный
-
Камышев Александр получил реакцию от Равиль Зарипов (ZuBy) в ShowModal not implemented on this platform
в главной форме объявить
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(); } код получается кроссплатформенный
-
Камышев Александр отреагировална Евгений Корепов в TIdTCPClient на Android
Почему? Для некоторых нужд очень даже. К примеру регулярно пользуюсь ftp-сервером на телефоне - намного удобнее заливать/сливать (по wifi) книги, музыку и прочее, сидя за компьютером в Far manager, чем перетаскивая мышкой в убогих индусских синхронизаторах или пользоваться облачными решениями (залить 30 гигов в dropbox с компьютера (тут нет проблем, инет 450 мегабит), а потом их выкачивать из инета на телефон даже по wifi ac то еще удовольствие).
-
Камышев Александр получил реакцию от dnekrasov в Перспективы RAD
Менеджер отправился к Великому Программисту и показал ему техзадание для новой программы. Менеджер спросил Мастера: «Сколько времени займёт у вас разработка этой системы, если я назначу вам пять программистов?»
«Один год» — быстро ответил Мастер.
«Но нам она нужна вчера! Как долго вы будете её разрабатывать, если я вам дам десять программистов?»
Мастер нахмурился, и сказал: «тогда два года».
«А если я назначу вам сотню программистов?»
Мастер пожал плечами: «В таком случае, она никогда не будет завершена»
-
Камышев Александр получил реакцию от Sergionn в Перспективы RAD
Менеджер отправился к Великому Программисту и показал ему техзадание для новой программы. Менеджер спросил Мастера: «Сколько времени займёт у вас разработка этой системы, если я назначу вам пять программистов?»
«Один год» — быстро ответил Мастер.
«Но нам она нужна вчера! Как долго вы будете её разрабатывать, если я вам дам десять программистов?»
Мастер нахмурился, и сказал: «тогда два года».
«А если я назначу вам сотню программистов?»
Мастер пожал плечами: «В таком случае, она никогда не будет завершена»
-
Камышев Александр получил реакцию от AngryOwl в Перспективы RAD
Менеджер отправился к Великому Программисту и показал ему техзадание для новой программы. Менеджер спросил Мастера: «Сколько времени займёт у вас разработка этой системы, если я назначу вам пять программистов?»
«Один год» — быстро ответил Мастер.
«Но нам она нужна вчера! Как долго вы будете её разрабатывать, если я вам дам десять программистов?»
Мастер нахмурился, и сказал: «тогда два года».
«А если я назначу вам сотню программистов?»
Мастер пожал плечами: «В таком случае, она никогда не будет завершена»
-
Камышев Александр отреагировална Равиль Зарипов (ZuBy) в Перспективы RAD
это явно не плюсы:
такой продукт это не калькулятор и в него нужно войти с головой чтобы понять всю архитектуру и количество качеством не покрывается
-
Камышев Александр отреагировална Kitty в Перспективы RAD
Основатель FMX Евгений Крюков в поисках работы: https://plus.google.com/u/0/105338484741532774705/posts/SnK5twK939Y
Основатель FireDAC Дмитрий Арефьев тоже больше не работает.
По Вашему мнению какие все же перспективы RAD при такой кадровой политике?
-
Камышев Александр получил реакцию от Kitty в Ресурсы и ссылки для новичка в доступе к MySQL
http - надстройка над TCP, всего лишь крайний, прикладной уровень в OSI, при каждом запросе так же точно как в случае с субд ждать таймаута и переподключаться,(если нет способа определить разрыв сразу), в каждом пакете слать регистрацию. Запрос к БД и запрос к серверу приложений - это в обоих случаях сессия TCP и обмен массивами, только в http еще добавляются строковые заголовки, которые надо парсить. Устойчивость здесь и близко не лежала. Те же яйца, только в профиль. И нет там никакой дорогой цены, отсутствие родных компонентов для прямого подключения - минус FMX.
Я сторонник трехзвенки, она позволяет реализовать правила работы с данными и корректно работать с СУБД, но и только.
-
Камышев Александр получил реакцию от Kitty в Ресурсы и ссылки для новичка в доступе к MySQL
Клади на форму TFDConnection, TFDQuery и TFDPhysMySQLDriverLink,
Connection автоматом пропишется в Query, в Connection прописывай настройки соединения, там все просто, дальше Connection->Open(); - если настройки годные будет коннект.
В Query->SQL->Text пишешь sql запрос, и Query->Open() - Query->Close() либо Query->ExecSQL() в зависимости от запроса
Смотреть события AfterConnect, AfterDisconnect, ConnectionError, AfterOpen, AfterExecute, QueryError;
-
Камышев Александр получил реакцию от Kitty в Прочитать файл на хостинге
закрыть в try-catch, и обработать исключение
зачем его проверять? если WelcomeINI->Size != 0 и SaveToFile прошел без исключений - можно смело открывать инишник.
-
Камышев Александр получил реакцию от Kitty в [FireDAC][Phys][SQLite] ERROR:attempt to write a readonly
Нет разрешения на редактирование файлов, где лежит файл базы? Можно попробовать поместить в общедоступные папки, documents, downloads.
Разрабы в Google закручивают гайки, не дают писать на флешки и внешние накопители, ибо нечего, покупайте устройства с бОльшим объемом памяти на борту - они дороже.
-
Камышев Александр получил реакцию от Rusland в Методы шифрования delphi
Есть надежные, быстрые библиотеки для шифрования на С, но похоже к Delphi их никак не включить в проект.
Казалось бы основное направление Rad Studio - объектный паскаль, однако же CBuilder принимает *.pas файлы, а Delphi сишные файлы игнорит.
Если собрать Static Library c библиотекой на С, наверное Delphi его поймет?
Попробовал... Delphi и lib не понимает... печаль
-
Камышев Александр получил реакцию от sviat9440 в Методы шифрования delphi
из известных blowfish и ГОСТ 28147-89, у меня библиотеки на сях, вот тут обсуждают реализацию blowfish на object pascal http://www.sql.ru/forum/1192261/ishodnik-blowfish-ne-poymu-kak-s-nim-rabotat
ГОСТ 28147-89 - алгоритм шифрования, принят к использованию в госструктурах, но это так, к слову
-
Камышев Александр получил реакцию от Kitty в Вопрос Администратору! Какие планы на Россию?
Если до сих пор ленился разбираться с другими IDE, с чего бы теперь вдруг перестать лениться?
Сидим плотно на rad studio и ждем вкусняшки, вроде поддержки линуха.
А Си бросать никак нельзя, он велик и от него исходит сияние.
-
Камышев Александр получил реакцию от Прикладной в Вопрос Администратору! Какие планы на Россию?
тогда уж соскакивать с rad studio на qt, если не хотят С++ поддерживать, там и линукс и андроид и библиотек куча
до сих пор builder используется больше из-за старых проектов и наработок
-
Камышев Александр отреагировална krapotkin в Файлы созданные в Delphi программе на планшете не видны на компьютере
это MTP в андроиде так работает
пока не будет рескана, MTP не выдает вновь созданные файлы
Я смотрю это через AirDroid
-
Камышев Александр получил реакцию от Pax Beach в Изображения из mySQL в приложение
Если VCL там есть DBGrid, MyDataSource указать, все само отрисуется. В FMX по сути тоже должен быть способ, типа LiveBindings.
Можно рисовать в рукопашную
for ( int i = 0; i < fquery->RecordCount; i++ ) { // пройти по записям fquery->RecNo = i + 1; // получить массив данных TByteDynArray da = fquery->Fields->FieldByNumber(0)->AsBytes; // скопировать массив в Stream, // возможно есть другие способы скопировать TByteDynArray в TStream, я на вскидку скопировал побайтно TMemoryStream *ms = new TMemoryStream; ms->SetSize( da.Length ); // занять область под копирование char *ms_data = (char*)ms->Memory; // именованый указатель на область память for( int j = 0; j < da.Length; i++ ) char[i] = da[i]; // копирование побайтно в цикле TBitmap *b = new TBitmap; b->LoadFromStream( ms ); // здесь в битмап уже должно быть изображение delete ms; delete b; }
-
Камышев Александр получил реакцию от Andrey Efimov в Обработка разрыва соединения в FireDAC
разрыв соединения - все корректно обрабатывается
void __fastcall TMyDBClient::ConnectionError( TObject *ASender, TObject *AInitiator, Exception *&AException ) { status = dbcError; #ifdef AUX_MODE error_string = AException->Message; #endif if ( FOnError ) FOnError( (TObject*)this ); Abort(); } //--------------------------------------------------------------------------- void __fastcall TMyDBClient::QueryError(TObject *ASender, TObject *AInitiator, Exception *&AException) { status = dbcError; #ifdef AUX_MODE error_string = AException->Message; error_string += "\r\nsql: " + fquery->SQL->Text; #endif if ( FOnError ) FOnError( (TObject*)this ); Abort(); } //--------------------------------------------------------------------------- void __fastcall TMyDBClient::AfterDisconnect(TObject *Sender) { status = dbcNotConn; #ifdef AUX_MODE log_string = "db - disconnect"; if ( FOnLog ) FOnLog( (TObject*)this ); #endif } Abort() - чтобы не было исключения в Application
так тишина и только логи шелестят переподключениями
-
Камышев Александр получил реакцию от Kitty в OpenDialog для мобильных платформ
String fn; String path = System::Ioutils::TPath::GetSharedDownloadsPath(); #ifdef __ANDROID__ TSearchRec sr; if ( !FindFirst( path + "/*", faAnyFile, sr) ) { do { if ( sr.Name=="." || sr.Name==".." ) {} else if ( (sr.Attr & faDirectory) == faDirectory ) {} // dir else {} // file // отрисовать в список sr.Name sr.Name; } while ( !FindNext(sr) ); FindClose(sr); // по клику в списке получить fn = path + "/" + name; } #else OpenDialog->InitialDir = System::Ioutils::TPath::GetSharedDocumentsPath(); if ( !OpenDialog->Execute() ) return; fn = OpenDialog->FileName; #endif вот так сделал, кому понадобится, на паскале тоже работает, только синтаксис другой
-
Камышев Александр получил реакцию от Равиль Зарипов (ZuBy) в OpenDialog для мобильных платформ
String fn; String path = System::Ioutils::TPath::GetSharedDownloadsPath(); #ifdef __ANDROID__ TSearchRec sr; if ( !FindFirst( path + "/*", faAnyFile, sr) ) { do { if ( sr.Name=="." || sr.Name==".." ) {} else if ( (sr.Attr & faDirectory) == faDirectory ) {} // dir else {} // file // отрисовать в список sr.Name sr.Name; } while ( !FindNext(sr) ); FindClose(sr); // по клику в списке получить fn = path + "/" + name; } #else OpenDialog->InitialDir = System::Ioutils::TPath::GetSharedDocumentsPath(); if ( !OpenDialog->Execute() ) return; fn = OpenDialog->FileName; #endif вот так сделал, кому понадобится, на паскале тоже работает, только синтаксис другой
-
Камышев Александр получил реакцию от Rusland в OpenDialog для мобильных платформ
String fn; String path = System::Ioutils::TPath::GetSharedDownloadsPath(); #ifdef __ANDROID__ TSearchRec sr; if ( !FindFirst( path + "/*", faAnyFile, sr) ) { do { if ( sr.Name=="." || sr.Name==".." ) {} else if ( (sr.Attr & faDirectory) == faDirectory ) {} // dir else {} // file // отрисовать в список sr.Name sr.Name; } while ( !FindNext(sr) ); FindClose(sr); // по клику в списке получить fn = path + "/" + name; } #else OpenDialog->InitialDir = System::Ioutils::TPath::GetSharedDocumentsPath(); if ( !OpenDialog->Execute() ) return; fn = OpenDialog->FileName; #endif вот так сделал, кому понадобится, на паскале тоже работает, только синтаксис другой
-
Камышев Александр получил реакцию от Kitty в Обработка разрыва соединения в FireDAC
разрыв соединения - все корректно обрабатывается
void __fastcall TMyDBClient::ConnectionError( TObject *ASender, TObject *AInitiator, Exception *&AException ) { status = dbcError; #ifdef AUX_MODE error_string = AException->Message; #endif if ( FOnError ) FOnError( (TObject*)this ); Abort(); } //--------------------------------------------------------------------------- void __fastcall TMyDBClient::QueryError(TObject *ASender, TObject *AInitiator, Exception *&AException) { status = dbcError; #ifdef AUX_MODE error_string = AException->Message; error_string += "\r\nsql: " + fquery->SQL->Text; #endif if ( FOnError ) FOnError( (TObject*)this ); Abort(); } //--------------------------------------------------------------------------- void __fastcall TMyDBClient::AfterDisconnect(TObject *Sender) { status = dbcNotConn; #ifdef AUX_MODE log_string = "db - disconnect"; if ( FOnLog ) FOnLog( (TObject*)this ); #endif } Abort() - чтобы не было исключения в Application
так тишина и только логи шелестят переподключениями
-
Камышев Александр получил реакцию от Евгений Корепов в Обработка разрыва соединения в FireDAC
Раньше тоже пользовался продуктами devart, хоть и недорогие, удобные, надежные, но все же они платные, плюс вообще не люблю подключать сторонние компоненты.
На oldschool теплом ламповом CBuilder приходилось много всего подключать: скины, компоненты доступа к бд, инди последних версий, компоненты для отчетов, png и т.п. С тех пор стараюсь избегать всего не родного.
FireDAC понравился, хорош CmdExecMode amAsync - The calling thread and GUI are not blocked. The called method will return immediately.
Позволяет работать с базой из основного потока без завешивания, отправил запрос и занимайся другими задачами пока callback не придет.