notricky
-
Постов
86 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные notricky
-
-
-- 2457390.09 - допустим такое значение в таблице с колонкой yourRealColumn SELECT datetime(yourRealColumn) as yourColumnNameForDatetime, date(yourRealColumn) as yourColumnNameForDate, time(yourRealColumn) as yourColumnNameForTime FROM YourTable
Соответственно опишите подключаемую колонку, например "yourColumNameForDate" как соответствующий тип данных - date и все должно заработать.
-
Суть вопроса в заголовке.
Есть ли какие-то настройки у базы или FireDAC чтобы в английской системе (винда 7) русский текст отображался не вопросами, а русским текстом?
Настройки у БД UTF-8.
-
2 часа назад, enatechno сказал:
1). Какое значение у qr2.CachedUpdates?
2). Как используются транзакции?
1) False. С этим же значением ФайрДАК ругается, если изменять поле, которое есть в запросе, но отсутствует в целевой таблице. Вот вроде как бы кажется что всё делает, но апдейта не дает
2) В неявном виде.
-
У всех всё работает штатно?
-
Собственно как это делают люди?
Речь, конечно, не про выполнение скрипта "update table set...", а про использование Edit/Post с изменением как в Датасете, так и в БД.
Какие нужны настройки, в частности у TFDQuery.// настройки qr.UpdateOptions = [KeyFields = id][UpdateChangedFields = true] // при этом селект не смотрит напрямую в theTable, но id - это поле theTable qr2.UpdateOptions.UpdateTableName := 'theTable'; qr2.Edit; qr2.FieldByName('Str').Value := Format('%s-%d',[qr2.FieldByName('Str').AsString, Code]); qr2.Post;
В такой форме позволяет менять датасет, но в БД данные не скидываются. БД SQLite.
-
В 21.02.2017 в 21:51, krapotkin сказал:
перезалил )
Мудро ))
-
5 часов назад, krapotkin сказал:
пару раз бывала такая ошибка просто при битом файле APK
Как исправляли?
-
Больше нет никаких идей касательно синтаксической ошибки разбора пакета?
-
12 часов назад, krapotkin сказал:
это же мобилка. тут все просто. берешь panel или layout и ставишь в любое место экрана
У меня сразу и мак и мобилка и вин.
Пример понятный и это первое что приходит в голову но нужно не это, т.к. интерфейс чуть более сложный.
Я вот так сделал с помощью Layout. Приходится немного извращаться в смысле позиционирования относительно кликабельных элементов. Чего бы не пришлось делать с Popup/
-
В общем надо полагать что никак и придется извращаться с Layout.
-
Есть ли способ использовать Попап, при этом внутри него вводить текст?
В данный момент Edit не получает фокус, не видна каретка, не вводится текст, попап рандомно может закрыться.
-
13 часов назад, Равиль Зарипов (ZuBy) сказал:
debug и release сборки скорей всего подписаны разными .keystore файлами
Эм... допустим про кейстор я вообще ничего не знаю. В дебаге нет настроек вообще никаких. Ну и прикол в том, что дебаг версия ставится же как-то на телефон при компиляции из дельфи, но вот сам апк-файл нивкакую.
-
При компиляции из среды - все хорошо. Приложение запускается.
При попытке скопировать из папки Android\Debug\{AppName}\Bin\{AppName}.apk и запустить сначала задается вопрос "установить"?, а потом ошибка "Синтаксическая ошибка - при синтаксическом анализе пакета возникла ошибка".
Как-то было, правда, что все проходило без ошибок. Куда смотреть?
-
Пока что решение такое: перед хайдом формы найти и активировать следующую активную форму (ту, вероятно, что под оверлеем)
Screen.NextActiveForm(OverlayForm).Activate;
Внутри синхрониза естественно.
-
Еще один странный баг, если кому интересно и кто знает что то про это.
После того как форма показалась-скрылась, элементы на нижележащей форме перестают быть откликабельными. Например Едиты не получают фокус. Точнее получают, но нет ни каретки, ни клавиатуры на андроиде.
-
Не работает со второй половины вчерашнего дня
-
Напрямую нет доступа к сайту. ТОлько через анонимайзеры. Провайдер onlime.
tracert начинает тупить на 9 шаге после 94.124.181.242. Провайдер говорит, что это не с их оборудованием проблема. Может менялись какие-то настройки?
-
13 часов назад, RoschinSpb сказал:
Да, действительно всю тему не прочитал, виноват. Вы тогда про
FOverlayShown := True; try Sleep(1000); finally FOverlayShown := False; end;
тоже не читайте, ибо малодушный поиск лёгких путей — это не спортивно
Посыл сообщений физически это просто вызов некоторого метода объекта, только в отличие от обычных методов обработчики сообщений могут существовать, или не существовать. Смысл посыла сообщений в том, чтобы избавится от зависимостей, т.е. отправитель может не знать какие конкретно методы есть у получателя. Все ограничения связанные с многопоточностью остаются в силе. Главное ограничение это то, что нельзя работать с любыми интерфейсными элементами внутри потока без использования Sinchronize. Если с Sinchronize не работает, то надо написать об ошибке в QC, надеяться и ждать.
Все оказалось куда хуже. И сообщения работают, и синхронайз, только вот проблема была в BorderStyle. Почитайте два сообщения назад. И вот это возможно репорт для QC, если у кого-то еще такая же ситуация на новых дельфях возникает. Но пока никто не отписался.
-
А знаете что я вам скажу?? А вот угадайте, в чем была на самом деле проблема???
А проблема была как всегда у Эмбаркадеро неявная, а именно в том, что BorderStyle = bsNone не дружит с вызовами вооообще. Ниоткуда. И вызывает вышеобозначенную ошибку в любом из возможных вариантов. И треды тут вообще не при чем. Ну то есть вот совсем не при чем. То есть если правильно задать BorderStyle, то вполне можно обойтись на Android оборачиванием вызовов Show/Hide TThread.Queue(...)
Часы.... просто часы тестов убиты на такой маразм.
Друзья, коллеги, если у вас есть последняя версия FMX, пожалуйста, протестируйте этот вариант с Бордером на андроиде. И отпишитесь здесь. И если это баг, то может быть стоит репортнуть. Для теста нужно две формы, одна из которых обычная, вторая borderStyle=None и вызывается кнопкой из первой формы. Обе создаются обычным способом при инициализации приложения.
Upd2:
Еще одно замечание.
Если выставлено bsNone, но при этом FullScreen = True, то другие формы открываются обычным Form.Show ровно до того момента, как было обращение на показ формы с bsNone и FullScreen = True. После этого последняя показывается, а вот все прочие формы, открывающиеся по кнопке обычным образом уже идут с ошибками CalledFromWrongThreadException: Only the o.... -
Собственно вопрос, можно ли вызывать АктивитиДиалог из рабочего потока в андроид или это будет приводить к ошибкам?
-
2 часа назад, kami сказал:
Я искал (перед тем, как написать предыдущее сообщение) - не нашел.
Я наткнулся на такую тему:
Оконные сообщения в FireMonkeyПравда про потоки там ни слова... Зато в коментах Ярослав Бровин присутствует
-
13 часов назад, kami сказал:
SendMessage через механизмы FMX !=SendMessage через механизмы Windows. Да, в Windows получатель обработает сообщение в том потоке, в котором принявшее сообщение окно было создано. Боюсь, что SendMessage из FMX не учитывает это, так что прием сообщения осуществляется в контексте вызывающего потока. Со всеми вытекающими.
Глупость какая-то. Всмысле реализация - теряется весь смысл сообщений, в особенности если это сообщения на отрисовку. А где-то про это вообще написано?
-
1 час назад, RoschinSpb сказал:
FMX, также как и VCL так же как и вообще все объекты (за исключением некоторых специальных) не потокобезопасны. Т.е. напрямую использовать в потоке что-либо созданное вне этого потока нельзя, потому, что нельзя никогда... Всякие там формы кнопки и пр. взаимодействуют с другими формами кнопками и пр. контролами, так что даже если вы создаете и уничтожаете форму внутри потока (внутри метода Execute), то всё равно не явно Вы обращаетесь к другим объектам системы. Чтобы решить эту проблему все обращения к контролам надо делать в методе Synchronize По этому ключевому слову ищите информацию в интернете и изучайте многопоточность.
Но лучше просто не работайте с интерфейсом в потоке. В этом примере можно просто устанавливать и сбрасывать некий флаг FOverlayShown. К нему Вы можете обращаться из основного потока в любой момент (к FErrorMessage только после окончания работы потока). Обрабатывать OverlayShown можно например событии TAction.OnUpdate или хотя бы в TTimer.procedure TWorkThread.Execute; begin try FOverlayShown := True; try Sleep(1000); finally FOverlayShown := False; end; except on e: exception do begin FErrorMessage := e.Message; end; end; end;
P.S. А лучше вообще не связывайтесь с потоками.
Зачем читать тему целиком, когда можно просто в белом выйти.
Ну ладно, не прочитали. Бывает.
Ответите тогда на вопрос - почему возникает поднятая проблема (да, для этого надо тему почитать) в случае с посылом сообщений классу формы из потока? -
Ну то есть когда я в рабочем потоке делаю так:
var Form1: TForm1; MsgSender: TMessageSender; procedure TWorkThread.ShowOverlay; var V: Tvalue; begin V := Tvalue.From(Form1.RectSelf); MsgSender.Receiver := TFOverlay.This; MsgSender.SendMessageWithResult(PM_OVERLAY_SHOW, V); end; ... procedure TWorkThread.Execute; begin try ShowOverlay; Sleep(1000); HideOverlay; except on e: exception do MessageDlg(e.Message,TMsgDlgType.mtWarning, [TMsgDlgBtn.mbYes], 0, nil); end; Terminate; end; // OVERLAY .... type TFOverlay = class(TForm) procedure PMShow(var AMessage: TDispatchMessageWithValue<TRect>); message PM_OVERLAY_SHOW; ... end; implementation procedure TFOverlay.PMShow(var AMessage: TDispatchMessageWithValue<TRect>); begin FRect := AMessage.Value; This.Show; end;
тем не менее я получаю ошибку CalledFromWrongThreadException: Only the original thread that created a view hierarcy can touch its views"
На самом деле если внутри рабочего потока ShowOverlay обернуть в CallInUIThread то ошибки нет, но, как описал Ярослав, негарантированно.
замкнутый круг. Хочу понять что не так и как вообще следует проектировать в ХЕ8 интерфейсы.
Sqlite + FireDAC: в английской винде русские символы - вопросами идут
в SQLite
Опубликовано
Идей ни у кого?