Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Страница пользователя и Новостная лента событий

Всем Привет! вообщем ломаю голову как создать новостную ленту событий и страницу пользователя. копирую как в ВК.

сперва думал сделать так, создать таблицу где буду хранить события юзера, добавил он фото или видео. репостнул там что то. Записывать ID юзера, тип события и ID события ну и время события. Потом столкнулся с тем как я буду выводить эти самые события саму инфу на страницу юзера. джоины не подходят, они злые. да и потом у событий разная инфа по ячейкам.

на сервере стоит MySql. еще как то надо будет с фотками решать вопрос там как то группировать по времени в одно события скажем за последний час.

поделитесь опытом кто чем сможет.
может уже есть кто реализовал такое.

планирую еще memcached поставить. правда пока не научился с ним работать)
Ответ:
Лента новостей получается будет уникальная для каждого пользователя?
(Добавление)
Как вариант, делать фоновые обработки: генерировать ленту для активного пользователя с определенным интервалом, заносить данные в кэш. По запросу пользователя отдавать данные из кэша...

(Отредактировано автором: 25 Августа, 2017 - 14:31:16)

Вопрос: Как в форме поймать событие Scroll?

Цитата из статьи:

Можно инициировать событие Scroll, выпустив метод Scroll для формы, кадра или страницы. Пользователи могут генерировать события Scroll, перемещая ползунок.

Ссылка на эту статью:
[url=][/url]

Вопрос как инициировать событие Scroll?
Ответ: код в этом примере чего-то конечно ловит, но только процентов 15 возможных ситуаций. И эти 15% требуют доработки.
Вакшуль Сергей
У меня вообще-то есть еще мысли как можно было бы попробовать сделать по-другому. Если найду время - попробую, расскажу.

Я сделал по-другому. Без субклассирования окна формы. Т.е. редактор кода может быть открыт.
Перехватываются и обрабатываются:
- прокрутка формы при клике по полосе прокрутки
- прокрутка формы колесиком мыши
- прокрутка формы при использовании middle button(нажатие на колесико и удерживание)
- прокрутка формы в результате смены фокуса, как при использовании клавиатуры(tab, стрелки и т.п.), так и мыши. Тот случай, когда прокручивание происходит в результате получения фокуса контролом, который частично или полностью не виден, выходя за границы формы

Не обрабатывается:
- горизонтальная прокрутка формы, вызываемая наклоном колесика в сторону(tilt) мыши Microsoft
События мыши перехватываются с помощью SetWindowsHookEx. Особенность функции в том, что системные сообщения о наклоне колесика мыши в сторону(tilt) эта функция не перехватывает. К сожалению. Во всяком случае сообщения моей мыши Microsoft не перехватываются.

Плохо обрабатывается:
- прокрутка формы при использовании middle button(нажатие на колесико и удерживание). В принципе работает, но возможна ситуация, когда клики вниз и вверх уже отработали, а форма "разогнавшись" продолжает прокручивание и останавливается когда ей заблагорассудится. Я заложил для борьбы с этим определенное время ожидания, но, как уже сказал, событие может не перехватится.

В целом пример рабочий, но как и предлагал guest_rusimport, гораздо проще просто обойтись таймером.

Во вложении два файла: accdb32-bit и mdb2000. mdb2000 на XP не работает. Там низкоуровневые сообщения мыши не перехватываются. Но на семерке mdb2000 работает.

К сообщению приложен файл (ScrollWindow.7z - 74Kb)
Вопрос: Вывод информационного сообщения на событие

Здравствуйте! Пожалуйста, помогите разобраться с неразрешимой пока для меня проблемой в создании БД. Я только начинаю пользоваться Access - прошу гуру не пинать сильно) Задача - необходимо выводить информационное поле с текстом для пользователя при возникновении события. В моем случае, "событие" - это появление в вычисляемом в форме поле "Возраст" значения 14 или меньше. Внедренный макрос на событие "изменение" для поля "возраст" выдает ошибку в условии [Формы]![Таблица1]![Возраст]<=14
PS Как я понимаю, отсутствие вычисляемых значений в таблице имеет ту же причину...
Ответ:
Сообщение от mobile
Надо обрабатывать события После обновления полей Дата рождения и Дата приема.
Кстати, возраст Вы неправильно считаете. Не учитывается разность месяцев и дней. Например для Лукина Семена родившегося 26.11.2003 и принятого 05.11.2015 возраст будет 11, а не 12 лет, как по Вашей формуле. 12 еще не испольнилось. Правильная формула:
Спасибо большое за подсказку по ошибке с вычислением по возрасту! Это критически важный момент. Наводку на поиск решения моей проблемы понял - попытаюсь разобраться...
Вопрос: Программное переключение на другую страницу в Pageframe

Доброго времени суток!

У меня возникла странная проблема с программным переключением на конкретную страницу в Pageframe: в Pageframe имеются 12 страниц; по нажатию определённой кнопки в Pageframe устанавливается ActivePage=5. И всё работает как надо, вот только в одном-единственном случае (когда в момент нажатия этой кнопки последней активной страницей в Pageframe являлась страница 11) страница 5 не активируется - остаётся активной страница 11. В коде событий Activate и Deactivate страницы 11 не нашёл ничего подозрительного.
Кто-нибудь сталкивался с подобной ситуацией? Что можно попробовать сделать для решения этой проблемы?
Ответ: Возможно в LostFocus() текущего контрола прописан SetFocus() на какой-то другой контрол этой же вкладки.
Вопрос: Разрешения для пользователей на работу с Query Notifications

Всем привет.

Уважаемые форумчане помогите разобраться со следующей проблемой.

Разрабатывается система уведомлений пользователей об определенных событиях в БД (MS SQL Server 2008), если конкретно то о добавлении записей в конкретную таблицу.

Клиентская часть разрабатывается на DELPHI 10.1 на основе компонента FDEventAlerter.

Из всего проекта осталась только одна нерешенная задача, а именно:
Какие права необходимо выдать конечному пользователю, чтобы все это хозяйство заработало.

Во время разработки использовался администраторский доступ к БД и все работало. Но вот с подключением под простыми пользователями начались проблемы. Методом научного тыка и перебора удалось запустить систему уведомлений с разрешением на БД "УПРАВЛЕНИЕ", но это разрешение слишком большое и фактически дает полный администраторский доступ к БД, что естественно не допустимо.
Если это разрешение не давать, а дать соответствующие разрешение на создание очереди, сервиса и подписки на уведомления, то необходимые объекты создаются, а вот уведомления к сожалению на пользователя не поступают.

Помогите пожалуйста разобраться с этой проблемой. Какие и где нужно дать разрешения для пользователей.
Ответ: Однорукий ламер,

Сам не проверял какой набор разрешений необходим. Вполне возможно, что документация ошибается.
Вот тут другой набор -
Вопрос: Изменение размера окна при скрытой ленте

Добрый день, на загрузку главной формы стоит код

Visual Basic
1
 DoCmd.ShowToolbar "Ribbon", acToolbarNo
убирающий ленту. Если пользователь развернул форму на весь экран ее свернуть нельзя, сворачивается все приложение аксцесса. Как обойти такое разворачивание формы. Ленту убрал, чтобы пользователь не мог создать запрос на изменение или удаление записей в таблицах.
Ответ:
Сообщение от alexpro1979
accde мне в помощь, я правильно понимаю?
accde не поможет в этом плане. Там такая же лента. Тогда уж рантайм - ACCDR. Полной ленты и других возможностей навигации в рантайме не увидите.
Вопрос: Скрыть группы в созданной ленте-риббон

Всем привет. помогите пжл.
Создаю базу к которой будут иметь доступ 2 человека, 1 - админ 2 - пользователи.
В чем проблема: при открытии ACCESS нужно чтоб в созданной ленте-риббон скрывались все группы кроме той где будет кнопка для входа в БД "Login" (либо пользователь либо админ), а после входа в БД через Case или как нить еще открыть группы соответствующий пользователю (админ/юсер).
Ответ:
Сообщение от kmv-puh
наверное ни у кого не открылся
2010 должен был открыть.
Выкладываю готовый вариант ленты-риббон, скрывает/раскрывает вкладки для определенных групп пользователей (вдруг кому пригодится)
Вопрос: Rman на ленты и диск

Бэкапил rman на диск. Теперь решил также бэкапить на ленты через Tivoli Storage Manager.
TSM и TDPO настроил.
Как лучше бэкапить - отдельно бэкапить на диск и отдельно на ленту?
Или лучше делать бэкапы на диск и копировать их на ленту командой backup backupset all?
Как я посмотрел, бэкапы которые уже есть на ленте не копируются с сообщением

skipping backup piece handle /rman/t_c-1030224853-20120411-0a.ctl; already exists

А вот как быть если нужно восстановить с бэкапа при наличии только бэкапов на ленте? Только если использовался каталог восстановления?

Как использовать разный срок recovery window для бэкапов на диске и на ленте?
Как при восстановлении использовать только бэкапы с диска или же только с ленты?

Кто как бэкапит?
Ответ:
introspection
В TSM есть понятие storage pool hierarchy, в зависимости от настроек сервера ваш бакап может идти прямо на ленту
или сначала на дисковый пул а потом на ленту. Так же возможен бакап пула на другой пул.
Всем этим должен заниматься администратор TSM. Вам остается только подключить channel в rman.


Просто я являюсь заодно и админом TSM (начинающим, можно сказать чуть-чуть начавшим) , хостов которые надо бэкапить, слава богу, немного :)
потому то вопросы сразу и по рману и тиволи :)
Вопрос: Загрузка пользовательской ленты Ribbon

Если бд открывать обычным способом, то лента отображается, но если вначале запустить бд с удержанием Shift, то лента больше не отображается, пока база не будет закрыта, офигенно не удобно.
Можно ли как то запускать свою личную ленту Ribbon, если база была открыта с нажатым Shift-ом?
Ответ:
nataxa23
не совсем понимаю предложенное, что значит: «Создайте отладочную конфигурацию»?

Я делаю так: в опциях программы есть галочка "перейти в отладочный режим", под паролем. Есть 2 версии ленты, разрабатывается только отладочная, в продакшн конвертируется кодом, включая замену бэкстеджа:



+
' в форме опций:

If Me.chkDebugMode Then
    strRibbon = "Swan_DB_debug"
Else
    strRibbon = "Swan_DB"
    
    strBackStage = _
    "  <backstage>" & vbCrLf & _
    "     <button idMso=""FileCloseDatabase"" visible=""true""/>" & vbCrLf & _
    "     <button idMso=""SaveObjectAs"" visible=""false""/>" & vbCrLf & _
    "     <button idMso=""FileSaveAsCurrentFileFormat"" visible=""false""/>" & vbCrLf & _
    "     <button idMso=""FileOpen"" visible=""false""/>" & vbCrLf & _
    "     <button idMso=""FileSave"" visible=""false""/>" & vbCrLf & _
    "     <tab idMso=""TabInfo"" visible=""true""/>" & vbCrLf & _
    "     <tab idMso=""TabRecent"" visible=""false""/>" & vbCrLf & _
    "     <tab idMso=""TabNew"" visible=""false""/>" & vbCrLf & _
    "     <tab idMso=""TabPrint"" visible=""false""/>" & vbCrLf & _
    "     <tab idMso=""TabShare"" visible=""false""/>" & vbCrLf & _
    "     <tab idMso=""TabHelp"" visible=""false""/>" & vbCrLf & _
    "     <button idMso=""ApplicationOptionsDialog"" visible=""true""/>" & vbCrLf & _
    "     <button idMso=""FileExit"" visible=""true""/>" & vbCrLf & _
    "  </backstage>"
    
    strRes = ConvertRibbonDebugToProd("Swan_DB_debug", "Swan_DB", strBackStage)
    If strRes <> "" Then
        Err.Raise vbObjectError + 514, "ConvertRibbonDebugToProd", strRes
    End If
End If

SetAppRibbon strRibbon

MsgBox "You must close and reopen the current database for the specified option to take effect." & vbNewLine & _
        "You can use menu System -> Restart", vbInformation

'---------------------------------------------------------------------------------------
' Procedure : ConvertRibbonDebugToProd
' Purpose   : Converts debug ribbon to production with startFromScratch="true", hidden context system tabs and backstage
'---------------------------------------------------------------------------------------
'
Public Function ConvertRibbonDebugToProd(strRibbonDebug As String, strRibbonProd As String, Optional strBackStage As String = "") As String

    Dim varXML As Variant
    Dim strHideContTabs As String

   On Error GoTo ErrorHandler

  If strRibbonDebug = "" Or strRibbonProd = "" Then
        ConvertRibbonDebugToProd = "Argument(s) empty"
        Exit Function
    End If
    
    varXML = DLookup("RibbonXML", "USysRibbons", "RibbonName='" & strRibbonDebug & "'")
    
    If IsNull(varXML) Then
        ConvertRibbonDebugToProd = "Ribbon """ & strRibbonDebug & """ not found in USysRibbons"
        Exit Function
    End If
    
    'start from scratch
    varXML = Replace(varXML, "startFromScratch=""false""", "startFromScratch=""true""")
    
    'tags
    varXML = Replace(varXML, ":=" & strRibbonDebug & ";", ":=" & strRibbonProd & ";")
    
    'disable contextual system tabs
    
    If InStr(1, varXML, "</contextualTabs>") > 0 Then
        strHideContTabs = _
        "  <tabSet idMso=""TabSetFormDatasheet"" visible=""false"" />" & vbCrLf
        varXML = Replace(varXML, "</contextualTabs>", strHideContTabs & "</contextualTabs>")
    Else
        strHideContTabs = _
        "    <contextualTabs>" & vbCrLf & _
        "      <tabSet idMso=""TabSetFormDatasheet"" visible=""false"" />" & vbCrLf & _
        "    </contextualTabs>" & vbCrLf & "  "
    
        varXML = Replace(varXML, "</ribbon>", strHideContTabs & "</ribbon>")
    End If
    
    'backstage
    If Len(Trim(strBackStage)) > 0 Then
        varXML = Replace(varXML, "</customUI>", strBackStage & vbCrLf & "</customUI>")
    End If

    ' write back new XML
    With DBEngine(0)(0).OpenRecordset("USysRibbons", dbOpenDynaset)
        .FindFirst "[RibbonName] = '" & strRibbonProd & "'"
        If .NoMatch Then
            .AddNew
                ![RibbonName] = strRibbonProd
                ![RibbonXml] = varXML
            .Update
        Else
            .Edit
                ![RibbonXml] = varXML
            .Update
        End If
        .Close
    End With

ExitHere:
   On Error Resume Next
   Exit Function

ErrorHandler:
Select Case Err
Case 0
   Resume Next
Case Else
   LogError Err.Number, Err.Description, Erl, "ConvertRibbonDebugToProd", "basRibbon"
   Resume ExitHere
End Select

    
End Function

'---------------------------------------------------------------------------------------
' Procedure : SetAppRibbon
' Purpose   : Sets the ribbon, lodas to USysRibbons as default application ribbon. Access restart required
'---------------------------------------------------------------------------------------
'
Public Function SetAppRibbon(strRibbon As String) As Boolean

     On Error Resume Next
     CurrentDb.Properties("CustomRibbonID").Value = strRibbon
     If Err.Number = 3270 Then
         Err.Clear
         CurrentDb.Properties.Append CurrentDb.CreateProperty("CustomRibbonID", dbText, strRibbon)
         If Err.Number <> 0 Then GoTo ErrorHandler
     End If
    On Error GoTo ErrorHandler


ExitHere:
   On Error Resume Next
   Exit Function

ErrorHandler:
Select Case Err
Case 0
   Resume Next
Case Else
   LogError Err.Number, Err.Description, Erl, "SetAppRibbon", "basRibbon"
   Resume ExitHere
End Select


End Function


После этого достаточно перезапустить приложение, и все становится доступно безо всяких шифтов. Перезапуск тоже кнопкой в ленте.
Вопрос: Что делает crosscheck backup sbt_tape, крутит все ленты или проверяет репозиторий ленты?

crosscheck сверяет статус бэкапов репозитория RMAN с media (disk or tape).

Вопрос, что эта команда с лентами делает?
Все ленты прокручивает и считывает имена всех файлов или только проверяет названия файлов в репозитории ленточной библиотеки?
Ответ:
Q.Tarantino
Aliona
Взять летну с бэкаппом в одной ленточнной библиотеке, и перенести в другую ленточную библиотеку ( в другом городе).

вопрос на засыпку - неужто БД такого объема что нельзя бэкап по сети перелить?
делаем сжатый бэкап на диск и льем... куда проще :)


Это просто теоретическая задачка от скуки, тем более что она не только меня интересует, как видно из ссылки выше.

Я просто слышала такую "ужасную историю", как спецы с лентой поехали в командировку и не смогли там БД развернуть.

Подозреваю, что БД размеров 20-30 ТБ, именно так и перевозят.

А какой способ вы предлагаете для таких объёмов?

Бэкап переслать по сети !
Недавно работала с фирмами, где "всё закрыто", надо было им маленькие БД пересылать, чтобы уменьшить размер, делали дамп не всей БД а только 2-х схем, потом этот дамп архивировали кусками по 5 Мб, получалось около 30 кусков, потом каждый кусок высылали по почте.
Иначе было никак. Иногда тамошние админы дома скачивали дамп с облака, а потом на флэшке его на работу приносили, но это если там USB не все закрыты.
Еще и не такое бывает, я ничему уже не удивляюсь.