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 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 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.

Lijst met werknemers en salarissen

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 berekeningveld in de tabel Werknemers en geef met de functie ExecuteSQL de volgende opvraaginstructie op:

Kopiëren
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.