Informations bibliothèque

444 views
Skip to first unread message

RG T

unread,
Dec 23, 2024, 5:42:48 PM12/23/24
to mementodatabase
Bonsoir à tous.
J'essaie de récupérer les informations sur les bases,c'est à dire, la date et heure de la dernière modification, le nombre d'enregistrement, la date de la création.
Je me suis aperçu que j'avais beaucoup de bibliothèque (~80). J'en ai donc crée une autre pour les compiler. Grâce à David je peux les ouvrir depuis cette base, mais je n'arrive pas à récupérer ces informations. Pour les enregistrements d'une bibliothèque je sais faire 
var e = entry()
var infoc = entry.creationTime;
var infocc = moment(infoc).format("DD/MM/YYYY HH:mm");
e.set('DateTimeC',infocc)

ou

var e = entry();
var infom = entry.lastModifieldTime;
var infomm = moment(infom).format("DD/MM/YYYY HH:mm");
e.set("DateTimeM",infomm)

Mais pour l'obtenir pour la base et l'intégrer dans un champs je bute. Pareil pour le nombre d'enregistrement.

J'essaie d'utiliser libByName("nom"), mais je n'obtient rien ou une erreur.

Si quelqu'un pouvais me guider.
Merci.
TRG

Er Mo

unread,
Dec 24, 2024, 1:59:49 AM12/24/24
to mementodatabase
Hallo
So auf die Schnelle . Hast du der Bibliotheke erlaubt auf die Andere Bibliothek zuzugreifen ?

Bonjour
Si vite. Avez-vous autorisé la bibliothèque à accéder à l'autre bibliothèque ?

Ernst

RG T

unread,
Dec 24, 2024, 4:06:40 AM12/24/24
to Er Mo, mementodatabase
Bonjour Ernst.
Oui cette base a accès à toutes les autres bases.

J'ai ce script :
var e = entry();
var nomb = libByName("Nom")
var infom = nomb.entry.lastModifieldTime;
var infomm = moment(infom).format("DD/MM/YYYY HH:mm");
e.set("Date modif",nomb)

Qui donne cette erreur :
org.mozilla.javascript.EcmaError: TypeError: Impossible de lire la propriété "entry" de null (Action 2.js#3)

Il s'agit d'un script action sur la base.
Merci 
TRG

--
You received this message because you are subscribed to the Google Groups "mementodatabase" group.
To unsubscribe from this group and stop receiving emails from it, send an email to mementodataba...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/mementodatabase/246b8203-6e77-4054-849f-b74360215859n%40googlegroups.com.

Mmm

unread,
Dec 24, 2024, 7:17:23 AM12/24/24
to mementodatabase
Библиотека не имеет свойства lastModifiedTime, только записи. 
Нужно получить последнюю (максимальную) дату модификации записей библиотеки. 
Эту дату можно считать датой последней модификации библиотеки. 
Она будет соответствовать первой строке в Истории библиотеки. 

let ee = lib().entries();

let nn = Math.max.apply(Math, ee.map(a => a.lastModifiedTime.getTime()));

message (new Date(nn));

вторник, 24 декабря 2024 г. в 12:06:40 UTC+3, trg...@gmail.com:

RG T

unread,
Dec 24, 2024, 7:35:02 AM12/24/24
to Mmm, mementodatabase
Bonjour Mmm et merci pour votre réponse.
Il n'a aucun soucis j'arrive à trouver la date de modification de la base en cours.
Ce que je cherche c'est obtenir (si c'est possible) les informations des autres bases (création, modification nombre enregistrement) qui apparaissent sur les étiquettes des bases pour pouvoir les afficher dans cette base qui rassemble toutes les bases que j'ai.
J'espère que j'ai été clair dans mes explications.
Merci
TRG

Mmm

unread,
Dec 24, 2024, 7:47:49 AM12/24/24
to mementodatabase
Кроме того, начиная с MDB 5.5, искать библиотеку можно по ID библиотеки, а не только по её имени. 
Если среди 80 библиотек будет 2 библиотеки "test", то при использовании libByName("test") получите ту библиотеку, которая создана первой. 
Для такого решения лучше использовать:

libById(id)
Find the library by id. Permission to use the library is required, based on security settings. Added in MDB 5.5
Argument
The ID of the library to find (как получить id библиотеки => lib().id )
Result
Library object — the library identified by the argument id, if found. Otherwise null.


вторник, 24 декабря 2024 г. в 15:17:23 UTC+3, Mmm:

Mmm

unread,
Dec 24, 2024, 8:11:53 AM12/24/24
to mementodatabase
Проще добавить триггер на открытие библиотеки со списком всех библиотек, который проверит все 80 библиотек и соберёт нужные сведения (количество записей, дату модификации,...). 
Иначе в каждую из 80 библиотек нужно добавлять триггеры изменение записи, изменение поля, другие, чтобы обновлять сведения в библиотеке-журнале. 

вторник, 24 декабря 2024 г. в 15:47:49 UTC+3, Mmm:

RG T

unread,
Dec 24, 2024, 8:27:06 AM12/24/24
to Mmm, mementodatabase
C'est ce que j'essaie de faire mais sans grand succés.
Je remplissais les dates dexmodifications et le nombre d'enregistrement en manuel.
Je n'ai pas trouvé sur l'aide ou le wiki la façon de faire pour avoir ses informations
La base qui n'est pas complète pour l'instant : 


David Gilmore

unread,
Dec 24, 2024, 11:25:56 AM12/24/24
to mementodatabase
Your original script would be incomplete.

var e = entry()
var name = e.field("Name"); // Fetch the external library name from the entry
var infoc = libByName(name).lastOpened;

var infocc = moment(infoc).format("DD/MM/YYYY HH:mm");

Except that won't work either. It appears that the library object does not expose as a property that last modified date (I just realized that). So you can not get it using javascript. But you can do it like I described in your other thread.

David Gilmore

unread,
Dec 24, 2024, 11:27:09 AM12/24/24
to mementodatabase
Here is the script I use in each library to update the last opened date in "Databases", in the "OpenLibrary" trigger:

var dt = new Date();
var dnow = dt.getTime();
var v = libByName("Databases").findByKey(lib().title);
v.set("LastOpen", dnow);

Mmm

unread,
Dec 24, 2024, 1:05:51 PM12/24/24
to mementodatabase
Вариант. Требует доработки. 

Четыре скрипта в разных интерпретациях:
- открытие библиотеки по ID библиотеки (фильтр), 
- открытие библиотеки по имени библиотеки для проверки какая библиотека открывается (фильтр), 
- обновление сведений по ID библиотеки (имя, количество записей, последняя модификация),
- получение ID библиотеки по имени (помните об одноименных библиотеках - получите первую созданную). 

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

Требуется доработка включение-отключение флажков в подгруппе Ошибки. 
Для важных библиотек требуется размещение в них скриптов для обратного обновления сведений. Как рекомендовал Давид. 

вторник, 24 декабря 2024 г. в 19:27:09 UTC+3, aa6...@gmail.com:
Bases.mlt2

RG T

unread,
Dec 24, 2024, 1:32:33 PM12/24/24
to David Gilmore, Mmm, mementodatabase
Merci à vous deux.
David j'ai maintenant compris comment envoyer des données à une autre base (v.set(......).
Mmm votre modèle de base fonctionne à merveille même sur des grosses bases (3006 enr). C'est ce que j'essaie de faire mais sans y arriver. Je vais comme d'habitude étudier ces scripts et digérer tout ça.
Merci encore à vous deux.
Passez de bonnes fêtes.
TRG

David Gilmore

unread,
Dec 25, 2024, 11:17:27 AM12/25/24
to mementodatabase
TRG,

Désolé si j'avais l'air partronisant. J'incluais ce code pour les autres lecteurs de ce fil qui voudraient peut-être le savoir.v

Mmm

unread,
Dec 25, 2024, 12:55:28 PM12/25/24
to mementodatabase
Всем, кто заинтересован в создании базовой библиотеке, возможно будет интересно дополнение, которое позволяет определить время последнего открытия рядовой библиотеки. 

После тестирования триггера, предложенного Давидом

добавил альтернативное решение с использованием ID рядовой библиотеки, а не ее имени.

Кроме того, у меня возник вопрос о корректности работы строки
var v = libByName("Databases").findByKey(lib().title);

если запись отсутствует и создается новая запись с именем библиотеки

var e = libByName("Databases").create({});
e.set('Lib name', lib().title);

то при повторном поиске:

var v = libByName("Databases").findByKey(lib().title);

такая запись не определяется, равна null. Уникальность имени записи установлена.
Но это вопрос к разработчику.

Библиотека с примером в сообщении
среда, 25 декабря 2024 г. в 19:17:27 UTC+3, aa6...@gmail.com:

RG T

unread,
Dec 25, 2024, 1:39:58 PM12/25/24
to Mmm, mementodatabase
Bonsoir Mmm.
J'ai fini de charger votre base modèle avec mes bases, elle fonctionne PARFAITEMENT. 
Je rentre en premier le nom de la base, puis j'appuie sur le bouton Id. Si j'ai bien orthographié le nom, l'id s'affiche et lorsque je crée l'enregistrement la date et heure de modification ainsi que le nombre s'affichent. Après vérification ils sont exacts. Si j'orthographie mal le nom et appuie sur le bouton Id rien ne s'affiche mais la case à cochée base introuvable se coche. Idem si la base n'existe pas (j'ai essayé). 
Petit problème rencontré qui n'est pas de votre fait. Votre base pour des questions de commodités est sur le nuage et sur mes deux supports téléphone et tablette.  Je les remplis en une fois. Mais quand je passe d'un support à l'autre j'ai automatiquement des conflits lors de la synchronisation que je répare. Je vais donc quand j'aurai fini de charger mes bases qui doivent apparaitre l'enlever et travailler en local sur chaque support ce qui evitera les conflits et comme les informations viennent de bases qui elles sont synchronisées je penses que les deux bases locales seront à jour avec les mêmes informations. Une fois fais je vous tiendrai au courant.
Pour le script de David c'est l'erreur que je rencontrai (null) effectivement. La recherche par nom semble être une bonne solution l'id je pense n'étant disponible directement?
TRG

Mmm

unread,
Dec 25, 2024, 2:12:43 PM12/25/24
to mementodatabase
К сожалению, я не работаю с облачными библиотеками и поэтому не вдавался в особенности их работы.
Вероятно, кто-то поможет с решением.

среда, 25 декабря 2024 г. в 21:39:58 UTC+3, trg...@gmail.com:

RG T

unread,
Dec 26, 2024, 9:54:00 AM12/26/24
to Mmm, mementodatabase
Bonjour 
Mmm comme promis un retour sur la gestion de votre base en local.
Pour éviter des conflits récurrents j'ai mis votre base en local sur chacun de mes supports (tablette / tèléphone).
Déjà l'Id est identique sur les deux bases.
Si je modifie une des bases sur un support, tout les systèmes pour rafraîchir fonctionnent sur le support utilisé.
Si je passe sur l'autre support et que j'ouvre la base, rien ne se passe aucune modification n'est prise en compte. Même chose si je rafraîchi avec les différents boutons.
Pour obtenir, une modification il faut lancer la base modifié sur le second support, attendre que la synchronisation se fasse, puis rafraîchir par un bouton ou déclencheur. Seulement la date et l'heure sera celle enregistrée au moment de l'ouverture sur le second support. Pas nécessaire de modifier la base, seul la synchronisation compte.
Que ce soit sur le cloud ou en local la base est parfaite. Suppression d'une page est demie de raccourcis, terminé recherches des vignettes pour voir la dernière modification. 
Rajout d'un champ catégorie et regroupement suivant ce champ. 61 bases enregistrées dont deux lourdes + 3000 enregistrements. PARFAIT.
Merci encore.
TRG

David Gilmore

unread,
Dec 26, 2024, 11:27:54 AM12/26/24
to mementodatabase
I may be the one confused here. I interpreted the original question to be how to show the last time the library itself was opened, not when a particular entry was last modified.

RG T

unread,
Dec 26, 2024, 11:37:19 AM12/26/24
to Mmm, mementodatabase
Correction erreur 
Pour obtenir, une modification il faut lancer la base modifié sur le second support, attendre que la synchronisation se fasse, puis rafraîchir par un bouton ou déclencheur. Seulement la date et l'heure sera celle enregistrée au moment de l'ouverture sur le second support. Pas nécessaire de modifier la base, seul la synchronisation compte.

Lire : 
 Pour obtenir, une modification il faut lancer la base modifié sur le second support, attendre que la synchronisation se fasse, puis rafraîchir par un bouton ou déclencheur. La date et l'heure sera celle enregistrée au moment de l'ouverture sur le premier support. Pas nécessaire de modifier la base, seul la synchronisation compte.

David Gilmore

unread,
Dec 26, 2024, 11:51:38 AM12/26/24
to mementodatabase
We may have been talking cross purposes here. I was addressing how to determine when a library was last opened/accessed. If you are only interested in individual  entries, then ignore what I wrote and read Mmm's suggestions. If you decide to track the library's last access, read my suggestions.

RG T

unread,
Dec 26, 2024, 12:19:12 PM12/26/24
to David Gilmore, mementodatabase
Bonjour David,
Mon post initial avait pour but d'obtenir les informations visibles sur les vignettes des bases de données à savoir la date et heure de modification et le nombre d'enregistrement. Mmm a modifié ma base intiale et mes erreurs. 
Cela me donne maintenant un "genre" de tableau de bord ou je peux ouvrir directement la base.
J'obtient également l'id, la date et heure de MODIFICATION ainsi que le nombre d'enregistrement.
Par contre, j'ai pu grâce à vous comment faire pour écrire sur une autre base.

var v = libByName("Databases").findByKey(lib().title);
v.set("LastOpen", dnow);

Je persistais à utiliser e.set(......).

Merci de votre implication dans ce forum.
TRG

Mmm

unread,
Jan 13, 2025, 5:28:49 AM1/13/25
to mementodatabase
Дополнение к информации о библиотеке. 
Функция для определения количества записей в корзине по ID библиотеки. 

function inTrash(id) {
    let ntr = 0;
    let lbi = libById(id);
    if (lbi) {
        let name = lbi.title;
        ntr = sql('SELECT COUNT(*) FROM "' + name + '" WHERE removed = 1').asInt();
    } 
    return ntr;
}

четверг, 26 декабря 2024 г. в 20:19:12 UTC+3, trg...@gmail.com:

RG T

unread,
Jan 13, 2025, 6:50:33 AM1/13/25
to Mmm, mementodatabase
Merci Mmm 
Pardonnez-moi  mon ignorance, mais où dois je mettre ce morceau de code. Script Action, Déclencheur, partagé, ajout dans un script existant, champs JS, j'ai essayé mais pas de résultat.

Dans le même ordre d'idée, j'ai demandé à Vasily, si les informations sur la taille et le nombre de fichiers associés, il était possible de les extraire et de les visualiser. Il m'a répondu que pour le moment cela est impossible. Mais que lors d'une prochaine mise à jour, il verrait.

Merci encore de votre implication dans ce forum.
TRG

Mmm

unread,
Jan 13, 2025, 7:08:03 AM1/13/25
to mementodatabase
Саму функцию поместить в общий скрипт "Functions". 
В библиотеку добавить поле "in trash" (свое название). 
В скрипте, который обновляет информацию о библиотеке добавить:

let trash = inTrash(id); //id – id библиотеки
setValue(e,'in trash',trash); //свое название поля

понедельник, 13 января 2025 г. в 14:50:33 UTC+3, trg...@gmail.com:

Mmm

unread,
Jan 13, 2025, 7:18:59 AM1/13/25
to mementodatabase
Обновить сведения всех записей информационной библиотеки о количестве записей в Корзине для каждой записи можно скриптом Действие в библиотеке:

for (let e of lib().entries()) {
    let id = e.field('ID');// поле с ID библиотеки
    if (id) {
        e.set('in trash', inTrash(id));
    }

После выполнения скрипт отключить. 

понедельник, 13 января 2025 г. в 15:08:03 UTC+3, Mmm:

RG T

unread,
Jan 13, 2025, 8:27:42 AM1/13/25
to Mmm, mementodatabase
Merci Mmm,
Cela fonctionne parfaitement, avec le script action rajouté. 
Juste à changer id => lib_id et le resultat est parfait......comme d'habitude.


Pour ce script :

let trash = inTrash(id); //id – id библиотеки
setValue(e,'in trash',trash); //свое название поля

Par contre en changeant le nom id ou pas je l'ai placé dans les 4 scripts de mise à jour (rafraîchir) cela ne fonctionne pas. Je dois faire une erreur.

Sinon cette base de donnée est idéale (en trés grande partie grâce à vous). J'ai une ""carte d'identité"" de la base que je peux lancer directement.

Merci encore.

TRG



Mmm

unread,
Jan 18, 2025, 7:53:42 AM1/18/25
to mementodatabase
Дополнение к информационной библиотеке или самостоятельное использование – библиотека скриптов.

Доработанная версия из темы:

Назначение – хранение текста триггеров библиотек и скриптов полей (кнопка, JS, вычислимое) в полях "Встроенный объект". Доступен поиск скриптов через стандартный поиск записей. 

Алгоритм:
1. Предварительно создать файл–шаблон контрольной библиотеки (*.mlt2).

2. В новой записи выбрать файл (из пункта 1) и сохранить запись.
Поля "triggers" (триггеры библиотеки) и "templates" (поля библиотеки) будут автоматически заполнены. 

3. Если файл не будет прочтен – включите "Delete index" и выполните скрипт Действие в карточке записи "Read file".

4. При необходимости можно сохранить текст файла или его части. Для этого выбрать "Save content".

5. Скрипт Действие в карточке записи "Clear data" позволяет очистить поля записи на выбор.

6. Хранение файла шаблона контрольной библиотеки по решению Пользователя. Шаблон всегда можно создать вновь и выполнить его чтение. 


Библиотеку скриптов можно подключить к информационной библиотеке.

1. В информационной библиотеке добавить связь с библиотекой скриптов. Запомнить название поля.

2. В библиотеке скриптов включить триггер "T4" и внести изменения для:
>> const lib_name => имя информационной библиотеки,
>> const field_name => имя поля связь в информационной библиотеке,
>> const entry_name => имя поля в информационной библиотеке, содержащие название контрольной библиотеки.

3. При подключении записи библиотеки скриптов к записи информационной библиотеки триггер "T4" автоматически заполняет поле "real lib id". 
После его заполнения и разрешения доступа скриптам ко всем библиотекам, с помощью скрипта Действие в карточке записи "Open lib" можно перейти из библиотеки скриптов в контрольную библиотеку.

4. Если связь с информационной библиотекой не используется, то переход из библиотеки скриптов в контрольную библиотеку, возможен при ручном заполнении поля "real lib id".

Шаблон с примером:

понедельник, 13 января 2025 г. в 16:27:42 UTC+3, trg...@gmail.com:
IC_18012025.jpg
Reply all
Reply to author
Forward
0 new messages