How to Dynamically Construct SQL Statements
Description
This interactive session demonstrates how you can programmatically modify SQL statements from Xbasic.
sql = "select firstname, lastname, city from customers where lastame = 'smith' order by lastname" dim q as sql::Query ?q.parse(sql) = .T. ?q.SQLStatement = "SELECT firstname, lastname, city FROM customers WHERE lastame = 'smith' ORDER BY lastname" dim si as sql::query::SelectItem ?si.parse( "concatenate(firstname,', ',lastname) as fullname") = .T. q.Column.Add(si) ?q.SQLStatement = "SELECT firstname, lastname, city, concatenate(firstname, ', ', lastname) AS fullname FROM customers WHERE lastame = 'smith' ORDER BY lastname" dim le as sql::query::LogicalExpression 'remove the where clause by setting to a blank logical expression q.Where = le ?q.SQLStatement = "SELECT firstname, lastname, city, concatenate(firstname, ', ', lastname) AS fullname FROM customers ORDER BY lastname" 'add a new where clause ?le.parse("lastname = 'smith' and firstname = 'john'") = .T. q.Where = le ?q.SQLStatement = "SELECT firstname, lastname, city, concatenate(firstname, ', ', lastname) AS fullname FROM customers WHERE lastname = 'smith' AND firstname = 'john' ORDER BY lastname" 'remove all columns from the sql ?q.Column.Count = 4 'execute the remove 4 times q.Column.Remove(1) q.Column.Remove(1) q.Column.Remove(1) q.Column.Remove(1) ?q.SQLStatement = "SELECT FROM customers WHERE lastname = 'smith' AND firstname = 'john' ORDER BY lastname" si.parse("firstname") 'now add back 1 column q.Column.Add(si) ?q.SQLStatement = "SELECT firstname FROM customers WHERE lastname = 'smith' AND firstname = 'john' ORDER BY lastname" 'count the number of levels in the order by ?q.NestedOrderBy.Count = 1 'remove the order by clause q.NestedOrderBy.Reset() ?q.SQLStatement = "SELECT firstname FROM customers WHERE lastname = 'smith' AND firstname = 'john'" 'add in a new order by clause Dim co as SQL::Query::ColumnOrder ?co.parse("city DESC") = .T. q.NestedOrderBy.Add(co) ?q.SQLStatement = "SELECT firstname FROM customers WHERE lastname = 'smith' AND firstname = 'john' ORDER BY city DESC" 'now add in another order by clause co.parse("lastname") q.NestedOrderBy.add(co) ?q.SQLStatement = "SELECT firstname FROM customers WHERE lastname = 'smith' AND firstname = 'john' ORDER BY city DESC, lastname"