Hallo liebe Community,
ich arbeite in der It Abteilung einer Hochschule und habe eine selbstgeschriebene Xojo Anwendung mit meinem Administrator Account auf einer Windows 10 Maschine installiert. Dazu habe ich unter “Programme” ein Verzeichnis mit dem Namen unserer Hochschule angelegt und darin ein Verzeichnis mit dem Namen der Anwendung. In letzterem Pfad habe ich den Inhalt des Xojo Build Pfads hineinkopiert.
Wenn ich mich nun mit meinem normalen Account anmelde kann ich die Anwendung starten und sie funktioniert einwandfrei!
Wenn sich allerdings Kollegen anmelden, dann können die zwar das Programm starten, aber sobald das erste MysqlPreparedStatement ausgeführt, wird die Anwendung abgebrochen!
Hat jemand eine Idee woran das liegen kann? Meine Vermutung geht in die Richtung, dass Prepared Statement versucht eine temporäre Datei anzulegen. Und das vermutlich in dem gleichem Pfad in dem auch die Anwendung installiert ist. Was Rechte mäßig dann wohl von Windows verhindert wird. (Im “Programme” Verzeichnis)
Beste Grüße
Ralf
Code? Crashlog?
Wie wird das Programm signiert? Seit wann machen PreparedStatements temporäre Dateien?
Hallo Ralf, wenn das Programm auf Deinem Rechner mit einem Normal-Account (also kein Admin-Account, richtig?) läuft, wie du schreibst, liegt es eher an was anderem. Kommen die Anwender mit einem Ping in der Kommandozeile auf den mysql-Server?
Guten Morgen Beatrix,
zwei vermutlich dumme Fragen, müssen alle Windows Anwendungen signiert werden? Ich habe nichts signiert, aber mit meinem normalen Account läuft die Anwendung einwandfrei!? Und die andere Frage, schreibt Xojo immer einen Crash Log? und wo? Im Programmpfad? Leider kann ich erst morgen nachschauen, bin heute im Homeoffice.
Wird auch ein Crashlog geschrieben wenn ich in “App” einen Event Handler “Unhandled Exception” implementiert habe und er aufgerufen wird? Das passiert nämlich.
Zum Code…
Die Datenbank Verbindung müsste funktionieren, das schließe ich aus folgendem:
Blockquote
Da kommt die Anwendung drüber weg
Und einen Schritt später, hier …
Blockquote
…versagt es dann. Die erste Messagebox ( “Vor Prepared” ) wird noch angezeigt. Die nach dem Aufruf von MysqlPreparedStatement nicht mehr.
Daher meine Vermutung mit der Temp Datei. Weil ein Datenbank Zugriff hat ja schon vorher stattgefunden und funktioniert.
Beste Grüße
Ralf
Hallo Thomas,
du hast die Datenbankverbindung im Verdacht!?
Blockquote
Darüber kommt er hinweg, ohne das es eine “DatabaseException” gibt.
Würdest du trotzdem meinen es könnte an der Datenbankverbindung liegen?
Bin drauf und dran heute doch noch ins Büro zu fahren…
Beste Grüße
Ralf
Den Verdacht mit den temporären Dateien teile ich zwar nicht, aber ich würde trotzdem mal versuchen das SQL auf herkömmlichen Wege (also via SQLSelect) abzusetzen und zu sehen ob das einen Unterschied macht. Seitdem Xojo diese parametrisierten SQL-Statements unterstützt sind die prepared statements eigentlich nur noch nützlich wenn man sie cached und wiederverwendet.
Unter Windows wird oft die Anwendung „Event Viewer“ (Ereignisanzeige) genutzt, um Systemprotokolle und Crash-Logs zu inspizieren. Die Ereignisanzeige bietet detaillierte Informationen über wichtige Ereignisse auf Ihrem Computer – wie z.B. Systemfehler, Sicherheitswarnungen und Anwendungsfehler. Dies kann sehr hilfreich sein, um die Ursachen von Abstürzen und anderen Problemen zu diagnostizieren (sagt ChatGPT).
Letztendlich würde ich auch einen Blick in die MySQL-Logfiles werfen und natürlich den Code mit dem Debugger durchgehen. Good luck!
Vielen Dank an alle!
Ich werde jetzt ins Büro fahren und versuchen das Rätsel zu lösen.
Zunächst werde ich die Remote Debug Applikation auf dem Rechner installieren und dann mal Remote Debuggen.
…und im Notfall mal auf SQLSelect wechseln. Das “Prepared” hatte ich aber gerade wegen der Empfehlung bzgl. SQL Injections genutzt…
Also erstmal vielen Dank und beste Grüße an alle
Ralf
Diesen Vorteil haben die Prepared Statements gegenüber dem normalen SQLSelect verloren seit dem Xojo die parametrisierte Form von SQL Select (Database — Xojo documentation) unterstützt.
Das moderne “SelectSQL” ist die bessere Wahl, da dort bereits intern SQL Injections verhindert werden: MySQLCommunityServer — Xojo documentation
Nochmals vielen Dank an alle für die Unterstützung. Es funktioniert nun, wobei ich leider nicht ganz genau sagen kann was die Ursache war.
Die Exception gab es ja beim Aufruf vom “MysqlPreparedStatement”, aber die wahrscheinlichste Ursache war, dass ich meine Logdatei in einem Unterordner von (dem versteckten) “ProgramData” Pfad angelegt hatte. Wo da der Zusammenhang besteht bzw. warum es an dieser Stelle gecrasht ist, ist mir völlig unklar. Auch wieso es mit meinem normalen Account funktionierte und mit allen anderen Accounts aber nicht. Letztlich habe ich darauf verzichtet mein Log in “ProgramData” anzulegen und schreibe es in den Programmpfad in dem auch mein Programm liegt. Damit kann ich gut leben.
Vielen Dank an alle!
Beste Grüße
Ralf