2016-10-24 5 views
5

Wenn Sie eine haben * von XXX Abfrage schließlich Sie können mehr Felder als erwartet, wissen Sie, ob es einen Weg gibt prüfen, ob neue Felder hinzugefügt wurden, seit Sie diese Abfrage erstellt und ihre persistenten Felder definiert haben?Um zu überprüfen, ob eine Abfrage mehr Felder zurückgibt, als wenn Sie sie erstellt und ihre persistenten Felder definiert haben

Normalerweise können Sie Ihre Abfragen öffnen, ohne sich Sorgen machen zu müssen, wenn neue Felder hinzugefügt wurden. Wenn sich neue Felder nicht in Ihren persistenten Feldern befinden, werden Sie sie nicht sehen. Auf einem Datasnap-REST-Server erhalten Sie jedoch einen AV, wenn Sie versuchen, ein Dataset aus einer Abfrage zurückzugeben, die jetzt mehr Felder enthält als beim Erstellen ihrer persistenten Felder.

Wenn Sie wissen möchten, ob es eine schnelle Überprüfung gibt, kann ich einen hilfreicheren Fehler anstelle eines AV zurückgeben.

Etwas wie:

MyQuery.Open; 
if MyQuery.FieldDefs.Count <> MyQuery.Fields.Count then begin 
    raise Exception.Create('The number of returned Fields doesn''t match the expected'); 
end; 

Danke

+3

Warum nicht die Spalten angeben, die von der Abfrage zurückgegeben werden sollen, anstatt *? –

+0

Ja, das ist der beste Weg, um diesen Fehler zu vermeiden, aber ich bin nicht der einzige, der Abfragen auf dem Server schreibt. Wenn jemand dies vergisst, möchte ich eine hilfreiche Nachricht anstelle eines AVs zurückgeben. –

Antwort

6

Wenn der Datensatz persistenten Felder hat und Sie wollen diese zusätzlichen Felder angelegt werden, wenn die Abfrage öffnet, haben Sie dataset.FieldOptions.AutoCreateMode-acCombineAlways zuerst einzustellen.

Jetzt nach dem Öffnen der Abfrage können Sie mit lcAutomatic in dataset.Fields.LifeCycles prüfen, ob weitere Felder vorhanden sind.

Falls Sie interessiert sind, welche Felder neu sind, iterieren Sie einfach dataset.Fields und suchen Sie nach field.LifeCycle = lcAutomatic.

BTW, mit der Einstellung oben brauchen Sie möglicherweise nicht mehr diese Überprüfung.

+0

Danke, ich werde die Kontrolle behalten, weil der REST-Client nicht weiß, dass es mehr Felder zu bekommen gibt. –

Verwandte Themen