ExecuteSQL
Utför ett SQL-frågeuttryck för den angivna tabellförekomsten i en FileMaker Pro-fil.
Format
ExecuteSQL ( sqlfråga ; fältavgränsare ; radavgränsare { ; argument... })
Parametrar
sqlfråga
– ett SQL SELECT-uttryck. Uttrycket kan innehålla en Union-instruktion som kombinerar resultatet av två frågor. Uttrycket kan innehålla programmässigt genererat SQL (dynamiska parametrar) som anger var valfria argument ska användas i frågan. Ange en dynamisk parameter genom att använda frågetecken (?).
fältavgränsare
– teckensträng som används som avgränsare mellan fält i ett resultat. Om en tom sträng anges är avgränsaren ett kommatecken. Fältavgränsaren visas inte efter det sista fältet i resultatet.
radavgränsare
– teckensträng som används som avgränsare mellan poster i ett resultat. Om en tom sträng anges är avgränsaren ett returtecken. Radavgränsaren visas inte efter den sista raden i resultatet.
argument
– ett eller flera uttryck avgränsade med semikolon (;) som utvärderas och används som värden för de dynamiska parametrarna i frågeuttrycket.
Returnerad datatyp
text
Ursprungsversion
12.0
Beskrivning
Med ExecuteSQL kan du köra SQL SELECT-uttryck som innehåller dynamiska parametrar för att säkert ställa frågor i FileMaker Pro-databaser och på så sätt undvika säkerhetsbrister genom injektionsattacker.
ExecuteSQL identifierar inte relationer som skapats i FileMaker Pro, vilket ger dig flexibiliteten att definiera relationer i SQL-uttryck och hämta data från vilken tabell som helst, oberoende av layoutkontexten.
ExecuteSQL kan inte användas med SQL-uttryck som ändrar data eller databasschemat (exempelvis kommandona för att infoga i eller radera tabell).
När du använder flera dynamiska parametrar i sqlQuery
ersätts det första frågetecknet av den första argument
-parametern, det andra av den andra och så vidare.
Om ett fel uppstår under frågetolkningen eller -utförandet returneras ? i FileMaker Pro.
Kommentarer
- Du kan tillämpa korrekt formatering för datum i ett SQL-uttryck genom att använda DATE-uttrycket. Om du inte använder DATE-uttrycket behandlas datum som ordagranna strängar av ExecuteSQL.
- I FileMaker Pro returneras datum-, tids- och sifferdata i Unicode-/SQL-format, inte i operativsystemets eller filens lokala format.
- ExecuteSQL godkänner endast SQL-92 syntaxens ISO-datum- och tidformat utan klammerparenteser. ExecuteSQL godkänner inte datum-, tids- och tidsstämpelkonstanter i ODBC/JDBC-format inom klammerparenteser
- FileMaker SQL använder Unicodes binära sorteringsordning, vilken skiljer sig från sorteringsordningen i FileMaker Pro som används med språksortering eller med en språkneutral standardsorteringsordning.
- Mer information om syntax för SELECT-uttryck och vilka SQL-uttryck och katalogfunktioner som stöds, finns i FileMaker Guide för ODBC och JDBC och FileMaker SQL-referens.
- Funktionen ExecuteSQL använder SQL SELECT-uttryck för att fråga tabeller i FileMaker-datakällor, inte ODBC-datakällor. För att utföra SELECT-uttryck och andra SQL-uttryck som stöds i ODBC-datakällor använder du Scriptsteget Utför SQL.
Exempel 1
Anta att en databas innehåller två tabeller, Anställda och Löner, som är relaterade genom fältet AnstID.
Obs! Fälten Anställda::AnstID, Löner::AnstID och Löner::Lön är numeriska fält.
Du kan använda funktionen ExecuteSQL om du vill returnera ett fältvärde från en specifik post utan att byta aktuell post eller ändra de hittade posterna.
ExecuteSQL ( "SELECT Avdelning FROM Anställda WHERE AnstID = 1" )
returnerar Development oavsett aktuell post, hittade poster eller layout.
Exempel 2
Anta att du vill lägga till ett fält i tabellen Anställda som visar procentandelen av en medarbetares lön i förhållande till avdelningens totala summa för löner. Du skulle kunna använda en beräkning i FileMaker Pro och generera värdet, men du kan även använda funktionen ExecuteSQL om du vill specificera frågan med dynamiska parametrar. Exemplet nedan använder tabellalias för tabellen Anställda (A
) och Löner (L
) när fält anges (L.Lön
, A.AnstID
och L.AnstID
).
Definiera ett beräkningsfält i tabellen Anställda och använd sedan funktionen ExecuteSQL till att specificera följande frågeuttryck:
Round (
100 * Löner::Lön / ExecuteSQL (
"SELECT SUM ( L.Lön )
FROM Anställda A
JOIN Löner S
ON A.AnstID = L.AnstID
WHERE A.Avdelning = ?";
""; ""; Anställda::Avdelning
) ;
2 )
På varje post för en anställd, visar beräkningsfältet procentandelen av den anställdas lön i förhållande till den totala summan för löner i den anställdas avdelning. Till exempel, posten med efternamn "Svensson" returnerar 52,97 och posten med efternamn "Mehmet" returnerar 100.