VO und PHP restAPI

Deutschsprachiges X#-Forum – German language forum

Moderator: wriedmann

lagraf
Posts: 450
Joined: Thu Jan 18, 2018 9:03 am
Location: A

VO und PHP restAPI

Post by lagraf »

Ich habe eine VO 2.8 App, welche Daten in diverse MySQL Tabellen nicht selbst sondern über ein PHP restAPI speichert. VO erhält dann das Ergebnis oder den Fehler als JSON String retour. Dazu benutze ich Norberts GetDocumentByGetOrPost. Datensätze werden eingefügt (POST), upgedatet (PUT), gelöscht (DELETE) und ausgelesen (GET). Einfügen, update und löschen funktioniert tadellos, kontrollierbar durch phpMyAdmin.

Beim Auslesen funktioniert allerdings nur das Auslesen eines einzelnen Datensatzes (select * from tbl where id = ?). Wenn ich aber alle Datensätze haben will (select * from tbl), dann erhalte ich immer den Stand zurück, wie er zum Zeitpunkt des VO Programmstarts war, alle danach gemachten updates und deletes scheinen nicht auf (nur eingefügte Sätze scheinen auf)!

An der PHP Routine kanns nicht liegen, da ich die korrekten Daten erhalte, wenn ich das PHP restAPI direkt im Browser oder mit anderen Programmen (z.B. Postman) aufrufe. Ausserdem bringt VO die richtigen Daten, wenn ich das VO Programm beende und neu starte. Es sieht irgendwie so aus, als ob VO oder die cHttp Klasse die Abfrage und das Ergebnis cachen würde. Ein Aufruf des Garbage Collectors hat nicht geholfen, die cHttp Klasse wird ordnungsgemäß mit Axit beendet.

Gibt es irgendetwas, das ich machen kann, was einem Beenden+Neustart der VO App entspricht, ohne die App tatsächlich neu zu starten?
User avatar
wriedmann
Posts: 3757
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

VO und PHP restAPI

Post by wriedmann »

Hallo Franz,
kann es sein, dass auf der PHP-Seite kein Commit gemacht wird?
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
lagraf
Posts: 450
Joined: Thu Jan 18, 2018 9:03 am
Location: A

VO und PHP restAPI

Post by lagraf »

Hallo Wolfgang,
MySQL steht defaultmäßig auf AutoCommit.
Ich habs auch schon mit TRANSACTION und COMMIT versucht, ändert nichts.
Außerdem zeigt ja nur die VO App die alten Werte, Aufrufe mit anderen Programmen zeigen die korrekten Daten.
Wenn ich die VO App beende, neu starte und die Abfrage nochmals mache, bekomme ich auch hier die aktuellen Werte.
User avatar
wriedmann
Posts: 3757
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

VO und PHP restAPI

Post by wriedmann »

Hallo Franz,
das ist sehr komisch....wenn der Client cachen würde (also die VO-Applikation) würdest Du auch neue Sätze nicht bekommen.
Also muss das Problem serverseitig liegen.
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
lagraf
Posts: 450
Joined: Thu Jan 18, 2018 9:03 am
Location: A

VO und PHP restAPI

Post by lagraf »

Hallo Wolfgang,
das kann ich mir eigentlich nicht vorstellen, zumindest nicht im PHP restAPI:
  • andere Programme, welche das restAPI aufrufen, bringen die aktuellen Daten
  • VO bringt bei Aufruf eines einzelnen Datensatzes (select * from tbl where id=?) auch die richtigen Daten, nur bei Aufruf aller Daten (select * from tbl) ohne where kommen die alten Inhalte daher
  • ein Beenden/Neustart der VO App bringt auch die aktuellen Daten
Und noch eins ist mir dabei aufgefallen:
Wenn ich im PHP restAPI einen Syntaxfehler einbaue, dann bekomme ich die Fehlermeldung aus PHP an VO retour. Bessere ich den Fehler im PHP restAPI aus und starte die Abfrage erneut, ohne VO zu beenden und neu zu starten, bekomme ich trotzdem noch immer die Fehlermeldung, obwohl der Fehler ausgebessert wurde! Auch hier wird erst das korrigierte PHP restAPI verwendet, wenn ich die VO App beende und neu starte! Wer bezieht woher noch immer den alten PHP Code???
User avatar
wriedmann
Posts: 3757
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

VO und PHP restAPI

Post by wriedmann »

Hallo Franz,
dann kann es höchstens noch sein, dass ein Cache-Header gesetzt ist und die WinINet-Klasse die Daten cachen.
Dann sollte eine Wiederholung des "Select * from tbl" aber immer dieselben Daten bringen, und nicht neue Sätze zusätzlich.
Siehe hier:
https://learn.microsoft.com/de-de/troub ... nt-caching
oder das hier:
https://learn.microsoft.com/de-de/troub ... ip-address
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
lagraf
Posts: 450
Joined: Thu Jan 18, 2018 9:03 am
Location: A

VO und PHP restAPI

Post by lagraf »

Hallo Wolfgang,
ich habe die Cache Statements in den Header eingebaut, hat aber nichts bewirkt!
Das Komische beim GET:
  • Wenn ich einen einzelnen Datensatz abrufe, bekomme ich die aktuellen Werte
  • Wenn ich alle Werte abrufe (ohne Where Bedingung) erhalte ich die alten Werte
Und das, obwohl die PHP Routine für einzelne und alle Datensätze die gleiche ist und sich nur in der Where Bedingung des Select Statements unterscheidet!
Was auch noch auffällt: Wenn ich einen Insert und einen Update hintereinander mache und dann alle Datensätze anzeige, dann sehe ich den eingefügten Satz korrekt, der upgedatete enthält aber die alten Werte.
lagraf
Posts: 450
Joined: Thu Jan 18, 2018 9:03 am
Location: A

VO und PHP restAPI

Post by lagraf »

Ich wünsche allen Lesern dieses Forums ein frohes Weihnachtsfest und ein gesundes und erfolgreiches Neues Jahr 2023!
lagraf
Posts: 450
Joined: Thu Jan 18, 2018 9:03 am
Location: A

VO und PHP restAPI

Post by lagraf »

Ich habe nun testweise das select Statement im restAPI fix auf

Code: Select all

select * from tbl where id = 3"
geändert. Somit ist die Routine im restAPI die gleiche, egal ob alle Datensätze gelistet oder nur 1 Datensatz abgerufen wird, damit kanns am restAPI nicht liegen.

Der einzige Unterschied ist in VO beim Aufruf des restAPI über GetDocumentByGetOrPost:
  • /BMTest/unity.php -> für alle Daten funktioniert nicht
  • /BMTest/unity.php/0 -> für alle Daten funktioniert nicht
  • /BMTest/unity.php/3 -> für Datensatz mit id 3 funktioniert
Ich habe keine Ahnung was bei den ersten beiden Aufrufen in der cHttp Klasse nicht funktioniert!
FFF
Posts: 1581
Joined: Fri Sep 25, 2015 4:52 pm
Location: Germany

VO und PHP restAPI

Post by FFF »

cHttp ist doch als Source im SDK - kannst Du da nicht reindebuggen?
Regards
Karl
(on Win8.1/64, Xide32 2.20, X#2.20.0.3)
Post Reply