ExecuteSQL
Doel
Voert een SQL-opvraaginstructie uit voor de opgegeven tabelvermelding in een FileMaker Pro-bestand.
Opmaak
ExecuteSQL (sqlQuery ; veldscheidingsteken ; rijscheidingsteken {;argumenten...})
Parameters
sqlQuery - een SQL-instructie SELECT. De instructie kan een element Union bevatten dat de resultaten van twee opvragen combineert. De instructie kan programmamatig gegenereerde SQL (dynamische parameters) bevatten die aangeven waar optionele argumenten moeten worden gebruikt in de opvraag. Gebruik het vraagteken (?)om een dynamische parameter aan te geven.
veldscheidingsteken - de tekenreeks die in het resultaat als een scheiding tussen velden wordt gebruikt. Als er een lege reeks is opgegeven, is het scheidingsteken een komma. Het veldscheidingsteken wordt niet weergegeven na het laatste veld in het resultaat.
rijscheidingsteken - de tekenreeks die in het resultaat als een scheiding tussen records wordt gebruikt. Als er een lege reeks is opgegeven, is het scheidingsteken een Return. Het rijscheidingsteken wordt niet weergegeven na de laatste rij in het resultaat.
argumenten - een of meer
uitdrukkingen die worden geëvalueerd en worden gebruikt als waarden voor de dynamische parameters in de opvraaginstructie.
Resulterend gegevenstype
tekst
Afkomstig van
FileMaker Pro 12.0
Beschrijving
Met ExecuteSQL kunt u SQL-instructies SELECT met dynamische parameters uitvoeren om veilig opvraagacties op FileMaker Pro-databases uit te voeren om kwetsbaarheden in de beveiliging door injectieaanvallen te voorkomen.
ExecuteSQL herkent geen relaties die in FileMaker Pro zijn gemaakt. Hierdoor kunt u relaties in SQL-instructies flexibeler definiëren en gegevens van elke tabel ophalen, ongeacht de lay-outcontext.
ExecuteSQL kan niet worden gebruikt met SQL-instructies die gegevens of het databaseschema wijzigen (zoals de opdrachten Insert Into of Delete Table).
Als er een fout optreedt tijdens parsering of uitvoering van een opvraag, geeft FileMaker Pro als resultaat ?.
Opmerkingen
•Als u de juiste opmaak wilt toepassen op data in een SQL-opvraag, gebruikt u de instructie DATE. Als u de instructie DATE niet gebruikt, beschouwt ExecuteSQL data als letterlijke tekenreeksen.
•FileMaker Pro geeft als resultaat datum-, tijd- en getalgegevens in Unicode-/SQL-opmaak, niet de opmaak van het besturingssysteem of het bestand.
•ExecuteSQL accepteert alleen ISO-datum- en tijdopmaak van de syntaxis SQL-92 zonder accolades. ExecuteSQL accepteert geen ODBC/JDBC-opmaak voor data, tijden en tijdstempelconstanten tussen accolades.
•FileMaker SQL gebruikt de Unicode binaire sorteervolgorde die verschilt van de FileMaker Pro-sorteervolgorde die wordt gebruikt bij het sorteren van talen of bij de standaard taalonafhankelijke sorteervolgorde.
Voorbeeld 1
Stel dat een database twee tabellen bevat, Werknemers en Salarissen, die via het veld WrkID zijn verbonden.
Opmerking De velden Werknemers::WrkID, Salarissen::WrkID en Salarissen::Salaris zijn getalvelden.
U kunt de functie ExecuteSQL gebruiken om een veldwaarde uit een specifiek record als resultaat te geven zonder de huidige record te wijzigen of de gevonden reeks aan te passen.
ExecuteSQL ("SELECT Afdeling FROM Werknemers WHERE WrkID = 1") geeft als resultaat Ontwikkeling ongeacht de huidige record, de gevonden reeks of de lay-out.
Voorbeeld 2
Veronderstel dat u aan de tabel Werknemers een veld wilt toevoegen waarin het percentage van het salaris van een werknemer ten opzichte van het totaal van de salarissen op een afdeling moet worden weergegeven. Hoewel u een berekening in FileMaker Pro kunt gebruiken om deze waarde te genereren kunt u ook de functie ExecuteSQL gebruiken om deze opvraag te definiëren met dynamische parameters. In het onderstaande voorbeeld worden tabelaliassen gebruikt voor de tabel Werknemers (E) en de tabel Salarissen (S) bij het opgeven van de velden (S.Salaris, E.WrkID en S.WrkID).
Definieer een berekeningveld in de tabel Werknemers en geef met de functie ExecuteSQL de volgende opvraaginstructie op:
Round (
100 * Salarissen::Salaris / ExecuteSQL (
"SELECT SUM (S.Salaris)
FROM Werknemers E
JOIN Salarissen S
ON E.WrkID = S.WrkID
WHERE E.Afdeling = ?";
""; ""; Werknemers::Afdeling
) ;
2)
In de records van de werknemers geeft het berekeningveld het percentage van het salaris van de werknemer ten opzichte van de som van de salarissen voor de afdeling van de werknemer weer. Bijvoorbeeld: de record met de achternaam "Smit" geeft als resultaat 52,97 en de record met de achternaam "Mehmet" geeft als resultaat 100.
Verwante onderwerpen