<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />oggi ne ho una strana.....
Ho lavorato con diversi script JSL... ognuno di essi ha diverse chiamate Open Database()... e se Open Database fallisce per qualsiasi motivo... Ho sempre visto voci nel file di registro riguardanti il problema...Ho quindi preso in prestito il codice da log_execute_sql.jsl che ho trovato da qualche parte... e sostanzialmente ho letto le ultime 10 righe del campo di registro e ho visualizzato le finestre di dialogo per gli utenti se si è verificato un errore....
A ciascuno di questi script è associata un'interfaccia utente....
oggi ho iniziato a lavorare con un nuovo script e sembra che non scriva gli errori Open Database() nel registro, ma piuttosto apra le finestre di dialogo JMP ALERT... il che è carino, ma non abbastanza amichevole... e vorrei usare la mia funzione per verificare la presenza di errori....
Esiste un metodo per controllare se questi vanno nel registro o no??? L'unica differenza che posso vedere in questo nuovo script che ho ereditato è che non effettua alcuna chiamata al DB finché non viene visualizzata l'interfaccia utente... Se eseguo una chiamata Open Database() PRIMA che la nuova finestra venga renderizzata e definita/popolata... l'errore è nel registro... Interessante!! come posso fare in modo che li scriva TUTTI nel log..??
Lo vedo sia in JMP9 che in JMP12...
È un po' strano, perché non vedo queste cose in molti altri script aggiuntivi con cui abbiamo lavorato ultimamente...
Per quanto riguarda questo specifico script... Non riesco a trovare nulla di diverso nelle chiamate DB (Open Database()), ma se l'interfaccia utente non si è ancora presentata, l'errore va al file di registro...
Se viene presentata l'interfaccia utente e l'utente interagisce con essa... all'improvviso questi errori non vengono inseriti nel registro, ma vengono invece visualizzati in modo interattivo...
Il che ovviamente si traduce in ulteriori errori, perché non siamo riusciti a intercettare l'errore dal registro come abbiamo fatto per tutti gli altri nostri script...
Durante il test, ho aggiunto una chiamata DB prima che appaia l'interfaccia utente (tramite nuova finestra())
E certo, basta, l'errore va nel registro e posso intrappolarlo….
// Testa la connessione al database e segnala se c'è un errore....
// Stranamente, questo script non scrive TUTTI gli errori DB nel file di registro, quindi assicuriamoci almeno di poterci connettere correttamente..
dbTestQuery = "seleziona SYSDATE dal doppio";
se (Versione < 11,
dtTest = Apri database(
"DSN="||DSN_NAME||"",
dbTestQuery
);
, /// Altrimenti possiamo usare la direttiva Invisible qui
dtTest = Apri database(
"DSN="||DSN_NAME||"",
dbTestQuery,
Invisibile // Questo DataTable non sarà visibile, ma verrà visualizzato nell'elenco delle finestre
);
);
_DBError=checkLogForODBCErrors("dbConnectTest");
print("Testdb DBError=" || char( DBErrore)) ;
// chiude l'origine dati poiché abbiamo già recuperato i dati dalla tabella
chiudi(dtTest, "nosave");
print("Connessione DB chiusa: dbTest");
Quindi posso presentare all'utente un messaggio di errore più significativo E utilizzarlo dopo la chiamata DB per verificare che si sia verificato un errore o meno...
/*
Controllare il file di registro JMP per eventuali errori dopo le chiamate DB
*/
checkLogForODBCErrors = Funzione(,
// OK, ora possiamo andare.
// pulisci il registro();
// Controlla la finestra di registro per eventuali errori ODBC
tronco d'albero contenuto = ottieni log(-10); // Ottieni le ultime 20 righe dal registro
trovato errore = 0;
// Cerca gli errori di [Gestione driver ODBC].
// O
// Cerca gli errori [VerticaDSII].
// O
// Cerca "Autenticazione LDAP"
for (i = 1, i <= nitems(_log_contents), i++,
if (contiene(_log_contents , "[Microsoft] [Gestione driver ODBC]"), // Ricerca di questi errori
trovato errore = 1;
extraErrorMessageText="Controlla la configurazione dell'origine dati ODBC e assicurati di aver denominato il tuo DSN=" || DSN_NAME || "." ||
"Verifica inoltre che nome utente e password siano corretti e che la connessione venga verificata con successo";
rottura();
, // altro
if (contiene(_log_contents , "[Vertica][VerticaDSII]"), // Ricerca di questi errori
trovato errore = 1;
extraErrorMessageText="Sembra che ci sia un problema di connessione al database utilizzando Data Source Name=" || DSN_NAME || ".";
rottura();
, // ALTRO
if (contiene(_log_contents , "Autenticazione LDAP"), // Ricerca di questi errori
trovato errore = 1;
extraErrorMessageText="Controlla la configurazione dell'origine dati ODBC per DSN: " || DSN_NAME || "." ||
"E verifica che nome utente e password siano corretti.";
rottura();
,
if (contiene(_log_contents , "FATAL "), // Alla ricerca di questi errori
trovato errore = 1;
extraErrorMessageText="Controlla la configurazione dell'origine dati ODBC per DSN: " || DSN_NAME || "." ||
"E verifica che nome utente e password siano corretti.";
rottura();
);
);
);
);
);
se (_errore_trovato,
// Poi
// Stampa alcune informazioni utili nel log
print("Addin: " || addinName);
print("DSN: " || DSN_NAME);
print("_Chiamante: " || _Chiamante);
_nw = nuova finestra("MFG360: Errore DB", << modale,
textbox("Si è verificato il seguente errore in " || _Caller || ": "),
casella di testo(""),
casella di testo(_log_contents ),
casella di testo(""),
casella di testo(extraErrorMessageText),
casella di testo(""),
textbox("Se richiesto, inviare tramite e-mail il contenuto della finestra Registro JMP al supporto tecnico." ||
" Per visualizzare la finestra Registro, fare clic su Visualizza > Registro, quindi su Finestra > Registro.")
);
);
trovato errore; // Restituisce 1 (vero) o 0 (falso) ....
);
Ho appena eseguito un test su uno dei nostri altri script in base a ciò che sto scoprendo... e vedo lo stesso comportamento....
Qualsiasi chiamata DB DOPO che l'interfaccia utente è attiva e funzionante, sembra presentare avvisi JMP interattivi, ma non viene inserito nulla nel file di registro..??
Questo in qualche modo interrompe la mia gestione degli errori….. e dovrò aggiungere ulteriori test di validazione per controllare il DataTable restituito, immagino….??
A meno che non ci sia un modo per forzare l'inserimento di questi errori nel registro in modo da poter fornire finestre di dialogo di errore più intuitive...