PmADO reconnect

Toto je hlavní technické fórum pro diskusi o problémech při vytváření PROMOTIC aplikací a jejich řešení.

PmADO reconnect

Postby LiborD » Tue 07. May 2024 19:51:00

Dobrý den,

připojuji se k databázi pomocí objektu PmADO. Konkrétně se jedná o MySQL.

Potřebuji vyřešit situaci, kdy je databáze nedostupná. Resp. situaci, kdy při zapnutí PRM dojde k připojení DB, ale ta se za nějaký čas vypne (např. z důvodu údržby). Následně opět za nějaký časový úsek naskočí. Je požadováno pokračovat dále.

Zjistil jsem, že DbIsOpen() nedokáže reagovat na aktuální situaci. Správnou hodnotu zobrazí při prvotním spuštění (mám zatrženo připojovat při spuštění aplikace). Viz. stavy:

1. Start PRM, zapnutá DB => DbIsOpen() == 1
2. Start PRM, vypnutá DB => DbIsOpen() == 0
3. Start PRM, zapnutá DB, následné vypnutí DB => DbIsOpen() == 1

Poradíte mi prosím, jak udělat správně reconnect k DB?

Mimo jiné právě díky nesrpávnému vyhodnocení připojení k DB mě aplikace spadne na dotaz do DB.

Předpokládal jsem, že si vystačím s tímto:
Code: Select all
//// test připojenosti DB MySQL + případný connect
if (MySQL.DbIsOpen() == 0){
   MySQL_ok = false;
   var b = MySQL_ok.DbOpen;
} else {
   MySQL_ok = true;
}


Děkuji.
LiborD
 
Posts: 2
Joined: Tue 07. May 2024 19:35:16

Re: PmADO reconnect

Postby Tomáš Bräuer » Wed 22. May 2024 12:58:16

Dobrý den,
bohužel ADO connection (PmaAdo) zůstává otevřený, i když se ztratí net spojení nebo se vzdálená DB zastaví. Toto dělá i MSSQL nejenom MySQL. Takže v trendech do MSSQL dělám automatický reopen při zápisu trendů tak, že pokud selže operace čtení nebo zápisu s určitým číslem chyby (to se SQL databázi od databáze liší), potom volám se zpožděním opakovaně zadanou operaci několikrát. Nakonec provedu interně na ADO explicitně Close a nový Open, u vás zřejmě DbClose a DbOpen.

Chybové kódy ADO operací (DbOpen a DbExecute v objektu PmMap hodnoty Result a ErrorCode) je třeba testovat viz https://www.promotic.eu/cz/pmdoc/Object ... DbOpen.htm

Pokud se s databází dělá jenom občas, lze spojení udržovat zavřené a otevřít si to na konkrétní operaci s databází a zase po sobě zavřít. Ale běžnější je nechat databázi otevřenou a testovat výsledek jednotlivých operací.
Tomáš Bräuer
Administrátor
 
Posts: 155
Joined: Thu 13. Dec 2012 9:13:13

Re: PmADO reconnect

Postby LiborD » Wed 22. May 2024 13:42:19

Děkuji za reakci.

Problém je ten, že aplikace např. při SELECT Promotic spadne "not responding".

Lze nějakým způsobem docílit, že Promotic "nespadne"? Koukal jsem, že v Dodatečných parametrech připojení k datbázi lze vyplnit následující:
connectiontimeout:3;commandtimeout:3; Např. update si kontroluji pomocí PmMap, ale to nejsem schopen zajistit, když při dotazu přestane aplikace pracovat... Zkoušel jsem i samotné volání dát do Sequenceru.

2024.05.22 14:34:22.292 ERROR: Count:1 Ident:PmAdo('/MySQL').RsOpen: 2003 - [MySQL][ODBC 8.2(w) Driver]Can't connect to MySQL server on 'localhost:3306' (10061) Note:(PmaTimer: /Select, Event: onTick)
2024.05.22 14:34:22.292 ERROR: Count:1 Ident:PmAdo('/MySQL').RsOpen: 0 - Nespecifikovaná chyba Note:(PmaTimer: /Select, Event: onTick)
2024.05.22 14:34:22.306 ERROR: Count:1 Ident:PmAdo('/MySQL').RsOpen: 2013 - [MySQL][ODBC 8.2(w) Driver][mysqld-5.5.5-10.4.32-MariaDB]Lost connection to MySQL server during query Note:(PmaTimer: /Select, Event: onTick)

Komunikuji s externím serverem a občas je výpadek internetu což způsobí právě to odpojení a já tuto situaci nejsem schopen nijak ošetřit.

Zasílám i app.

Děkuji.
Attachments
Test DB.zip
(18.15 KiB) Downloaded 73 times
LiborD
 
Posts: 2
Joined: Tue 07. May 2024 19:35:16


Return to Nevím jak...

Who is online

Users browsing this forum: No registered users and 10 guests

cron