(FireDAC) Na een Prepare() kan een insertstatement nog steeds ongeldig zijn. Bijvoorbeeld er staat een niet bestaand veld in de insert statement.
Is het mogelijk de statement de valideren zonder echt uit te voeren?
(FireDAC) Na een Prepare() kan een insertstatement nog steeds ongeldig zijn. Bijvoorbeeld er staat een niet bestaand veld in de insert statement.
Is het mogelijk de statement de valideren zonder echt uit te voeren?
Hangt van je SQL-server af.
In Microsoft SQL Server kun je dit opnemen boven je statement:
SQL Code:
SET PARSEONLY ON
Voorbeeld met een TMSConnection. Moet je dus zelf even ombouwen en uittesten.
(bron: http://forums.devart.com/viewtopic.php?t=19688)Delphi Code:
function IsSQLStatementSyntaxValid(con: TMSConnection; SQL: string): boolean; var q: TMSQuery; begin Result := False; if (SQL = '') then exit; q := nil; try q := TMSQuery.Create(nil); q.Connection := con; q.SQL.Text := 'SET PARSEONLY ON'; q.Execute; try try q.SQL.Text := SQL; q.Execute; Result := True; except end; finally q.SQL.Text := 'SET PARSEONLY OFF'; q.Execute; end; finally if Assigned(q) then FreeAndNil(q); end; end; //... if IsSQLStatementSyntaxValid(MSConnection, 'Update Test Set a = 0 Where b in (Select id From Test WHERE id=:objid)') then ShowMessage('Valid') else ShowMessage('Not valid');
ah... groots. Dank!
Ga ik testen. ik was al iets bijijijna soortgelijks op het spoor.
voor sql server gebruik ik nu "set no exec on" (en daarna off natuurlijk)
Weet jij wat het verschil is tussen SET PARSEONLY ON t.o.v. SET NOEXEC ON ?
(Of wat het voordeel is van het een boven het abdere?)
nope... :-) Maar dat was degene die ik op het spoor was. Ik geloof dat noexec nieuwer is.
Wel interessant...
van: https://social.msdn.microsoft.com/Fo...=sqlgetstarted
PARSEONLY - Examines the syntax of each Transact-SQL statement and returns any error messages without compiling or executing the statement.
NOEXEC - Compiles each query but does not execute it, ie, parsing a query and producing/adding the plan cache of the execution plan for the query, but not executing.
In ieder geval klapte mijn insert sql in "noexec modus" op een ongeldig veld. En dat was precies wat ik nodig had.
hm... onze "no exec" werkt niet in alle omstandigheden geloof ik... onderzoek start weer :-(
There are currently 1 users browsing this thread. (0 members and 1 guests)
Bookmarks