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.

Lista som visar anställda och löner

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:

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