ExecuteSQL
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 gescheiden door puntkomma's (;) en die worden geëvalueerd en worden gebruikt als waarden voor de dynamische parameters in de opvraaginstructie.
Resulterend gegevenstype
tekst
Afkomstig uit versie
12.0
Beschrijving
Met ExecuteSQL kunt u SELECT-instructies van SQL 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).
Wanneer u meerdere dynamische parameters gebruikt in sqlQuery
, wordt het eerste vraagteken vervangen door de eerste parameter van argumenten
, wordt het tweede vraagteken vervangen door de tweede parameter, enzovoort.
Als er een fout optreedt tijdens parsering of uitvoering van een opvraag, geeft ExecuteSQL als resultaat ?. Gebruik de ExecuteSQLe functie om een gedetailleerder foutbericht te ontvangen.
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 in de landinstellingen 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.
- Als u meer informatie wenst over de syntaxis van de instructie SELECT, ondersteunde SQL-instructies, uitdrukkingen en catalogusfuncties raadpleegt u de FileMaker Handleiding voor ODBC en JDBC en de FileMaker-naslaggegevens voor SQL.
- De ExecuteSQL-functie gebruikt SELECT-instructies van SQL om tabellen in FileMaker-gegevensbronnen op te vragen, en geen ODBC-gegevensbronnen. Om SELECT- en andere ondersteunde SQL-instructies uit te voeren met ODBC-gegevensbronnen, gebruikt u de SQL uitvoeren scriptstap.
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 ExecuteSQL-functie 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 berekeningsveld (Percentage salarissen afdeling) in de tabel Werknemers en gebruik vervolgens de functie ExecuteSQL om een opvraaginstructie in de volgende berekening op te geven:
Rond (
100 * Salarisssen::Salaris / SQLuitvoeren (
"SELECTEER SOM (S.Salaris)
VAN Werknemers E
DEELNEMEN Salarisssen S
OP E.EmpID = S.EmpID
WAAR E.Afdeling = ?";
""; ""; Werknemers::Afdeling
) ;
2 )
Opmerking Omdat bij deze berekening het salaris van de werknemer moet worden opgehaald uit de tabel Salarissen (Salarissen::Salaris), moet u een relatie maken tussen de velden Werknemers::WrkID en Salarissen::WrkID in de relatiegrafiek (zie Relaties maken en wijzigen). De functie ExecuteSQL maakt daarentegen geen gebruik van de relatiegrafiek. In dit voorbeeld bepaalt het JOIN-element de relatie die wordt gebruikt door de SELECT-instructie in ExecuteSQL.
Voor elk werknemerrecord berekent het Percentage salarissen afdeling het percentage van het salaris van de werknemer ten opzichte van de som van de salarissen voor de afdeling van de werknemer weer.
Werknemers | |||
---|---|---|---|
WrkID | Achternaam | Afdeling | Percentage salarissen afdeling |
1 | Smits | Ontwikkeling | 52,97 |
2 | Oostrom | Ontwikkeling | 47,03 |
3 | Dongers | Kwaliteit | 48,86 |
4 | Gijsdonk | Kwaliteit | 51,14 |
5 | Mehmet | Documentatie | 100 |
6 | Ferrini | Marketing | 100 |