[Gambas-user] Wiki Observation, SQL syntax
Benoît Minisini
gambas at ...1...
Fri Jan 2 10:45:21 CET 2015
Le 02/01/2015 08:22, Lewis Balentine a écrit :
> For some reason I do not seem to be able to log into the Gambas Wiki.
> That is probably a good thing considering my level of ignorance (which
> has proven to be immense). Thus I pass these observations along for
> consideration:
>
> I have dealt with various SQL Data Bases for some two decades (primarily
> Oracle but also MS SQL, Access, etc.). When I started looking at some of
> the Gambas functions I found a syntax pattern that I was unfamiliar with.
>
> Ref: http://gambaswiki.org/wiki/comp/gb.db/_connection/find
>
>
> Function *Find* ( _Table_ As String *[* , _Request_ As String,
> _Arguments_ As , ... *]* ) As Result
> <http://gambaswiki.org/wiki/comp/gb.db/result>
>
>
> *
>
> _Table_
>
> *
>
> _Request_
>
> *
>
> _Arguments_
>
>
> I assume that this form comes from a language that I am unfamiliar with
> (or perhaps an implementation of stored procedures) and thus goggled:
> SQL Request Arguments
> I found a few references to MS Excel but no suitable explanation. I
> finally found the answer in the "obsolete" Gambas Wiki that is still online:
>
> Ref: http://gambasdoc.org/help/comp/gb.db/connection/subst?v3
> Creates a SQL sentence by substituting its arguments into a format string.
>
> * _Format_is the SQL sentence.
> * _Arguments_are the arguments to substitute.
>
> The&1,&2... patterns inside the_Format_string are replaced by the SQL
> representation of the 1st, 2nd..._Arguments_.
>
> These arguments are quoted according to the underlying database SQL syntax.
>
>
> I also note from an example in the "obsolete" Gambas Wiki that an
> explanation mark "!" is used to delimit field names in a result.
> http://gambasdoc.org/help/comp/gb.db/connection/edit?v3
>
> I do not find any similar example in the current Gambas Wiki but perhaps
> I missed it.
>
> Regards,
>
> Lewis
>
>
The documentation of the Connection has to be fixed, because of recent
changes.
The Find, Edit, Delete, Exec methods of the Connection classes work a
bit like the Subst$() function : it allows you to separate the SQL query
from its argument to prevent SQL injection attacks.
Instead of writing:
MyConnection.Exec("SELECT * FROM MyTable WHERE MyField = '" & MyValue & "'")
you have to write:
MyConnection.Exec("SELECT * FROM MyTable WHERE MyField = &1", MyValue)
Gambas will make the substitution for you, and will take care of all the
necessary quoting that will avoid any SQL injection risk.
Regards,
--
Benoît Minisini
More information about the User
mailing list