Script works on Android, but not iPhone

77 views
Skip to first unread message

Brad Pippert

unread,
Mar 8, 2026, 1:30:22 PM (9 days ago) Mar 8
to mementodatabase
Hi,

I have the following script that works successfully on Android:

-------
var e = entry();
var id = "'" + e.id + "'";
var currentMileage = e.field('Odometer');
var currentVehicle = "'" + e.field('Vehicle') + "'";
var sqlString = 'SELECT MAX(Odometer) FROM "Mileage Log" WHERE removed = 0 AND Vehicle = ' + currentVehicle + ' AND id <> ' + id;
let previousMileage = sql(sqlString).asDouble();
e.set('Trip Odometer', currentMileage - previousMileage);
e.recalc();
------

However, on iPhone, it doesn't. Doing a Test, it responds with:
"Can't execute script Set Trip Odometer on Creation
[6]: ReferenceError: Can't find variable: sql"

So, the error is on the "let previousMileage..." line. I have tried splitting that line out into two lines (moving the asDouble function to a new line), but that didn't make a difference. It seems as though the iPhone is not recognizing the SQL function.

Anyone have any thoughts of how to get around the error that the iPhone is throwing?

Thanks.

Er Mo

unread,
Mar 8, 2026, 2:55:01 PM (9 days ago) Mar 8
to mementodatabase
Hallo
Memento greift auf das Java vom Betriebssystem zurück und das sind Verschiedene . Weiters ist die iOS Version die Neuerste und warscheinlich noch nicht so gut Entwickelt . Am bessten du wendest dich an den Support ( sup...@mementodatabase.com )

Hello, Memento relies on the operating system's Java version, and these vary. Furthermore, the iOS version is the newest and probably not yet fully developed. It's best to contact support (sup...@mementodatabase.com).

Ernst

Mmm

unread,
Mar 8, 2026, 3:31:36 PM (9 days ago) Mar 8
to mementodatabase
Я не увидел в истории изменений упоминание, что версия для iOS поддерживает SQL.
https://mementodatabase.com/changelog.html

Проверить не могу. Воспользуйтесь советом Эрнста и обратитесь в поддержку. 

Можете заменить sgl() на filter() и цикл (код не проверял...).

//установка значения поля, если не совпадает с текущим
const e_set = (name,value) => {
    if (Number(e.field(name)) != value) {
        e.set(name, value);
        return true;
    }
};

let entries = lib().entries();
let e = entry();

if (entries.length > 0 && e.field('Vehicle')) {
    let ide = e.id;
    let currentMileage = Number(e.field('Odometer'));
    let currentVehicle = e.field('Vehicle');
   
    let previousMileage = 0;

    let filter = entries.filter(a => a.field('Vehicle') == currentVehicle && a.id != ide);
    filter.forEach(b => {
        let odometer = Number(b.field('Odometer'));
        if (odometer > previousMileage) {
    previousMileage = odometer;
        }
    });

    e_set('Trip Odometer', currentMileage - previousMileage);

    //только если есть вычислимые поля,
    //для обновления записи после установки значения поля
    //лучше использовать return true
    //e.recalc();
}

воскресенье, 8 марта 2026 г. в 21:55:01 UTC+3, ernst...@gmail.com:

Brad Pippert

unread,
Mar 8, 2026, 4:37:19 PM (9 days ago) Mar 8
to mementodatabase
Thank you. This alternative method works.

Alberto Pignocchino

unread,
Mar 10, 2026, 1:21:25 PM (7 days ago) Mar 10
to mementodatabase
Hi, I add a Google translation in English of the reply from Mmm (apparently in Russian) (plus some glitch correction):

Mmm: 
I didn't see any mention in the changelog that the iOS version supports SQL.
https://mementodatabase.com/changelog.html

I can't verify this. Take Ernst's advice and contact support.

You can replace sql() with filter() and a loop (I haven't tested the code...).

//setting the field value if it doesn't match the current one

const e_set = (name,value) => {
    if (Number(e.field(name)) != value) {
        e.set(name, value);
        return true;
    }
};

let entries = lib().entries();
let e = entry();

if (entries.length > 0 && e.field('Vehicle')) {
    let ide = e.id;
    let currentMileage = Number(e.field('Odometer'));
    let currentVehicle = e.field('Vehicle');
   
    let previousMileage = 0;

    let filter = entries.filter(a => a.field('Vehicle') == currentVehicle && a.id != ide);
    filter.forEach(b => {
        let odometer = Number(b.field('Odometer'));
        if (odometer > previousMileage) {
    previousMileage = odometer;
        }
    });

    e_set('Trip Odometer', currentMileage - previousMileage);

//only if there are calculated fields
//to update a record after setting the field value
//it's better to use: return true
//e.recalc();
}

Mmm

unread,
Mar 10, 2026, 2:02:50 PM (7 days ago) Mar 10
to mementodatabase
Все скрипты не требуют дополнительного перевода. Я не использую русский язык для обозначения переменных.
Иногда переводчик пытается перевести все: и пояснения, и скрипты. 
Читайте с переводом только пояснения или текстовую часть.
Скрипты нужно копировать без перевода.
Перевод комментариев в скриптах по желанию. Если они не нужны – просто удалите.

вторник, 10 марта 2026 г. в 20:21:25 UTC+3, a.pign...@gmail.com:
Reply all
Reply to author
Forward
0 new messages