Where statement

Creating desktop or client-server database solutions?

Moderators: FourthWorld, heatherlaine, Klaus, kevinmiller, robinmiller

Post Reply
richh
Posts: 41
Joined: Tue Jan 25, 2011 8:48 pm

Where statement

Post by richh » Fri Jan 28, 2011 3:07 am

This time, I spent a good while going through documentations before making this post :)

ok, so I am working with SQL 2005 and I am running queries against it just fine. the problem I am running into now is that I want to query the database based upon data in which I have in a text field.

in the below statement:

Code: Select all

  put revDataFromQuery(comma,return, dbConnectionID, "select user_name, user_login, user_password, role_id from T_USERS where user_name =" & numToChar(39) & tUser & numToChar(39) & " and user_password = " & numToChar(39) & tPassword & numToChar(39)) into tData
I get an error. when I check SQL Profiler, I see that the statement is being generated as ' ' username ' ' and ' ' password ' ' which is an incorrect sql statement for MS SQL. It should be 'username' and 'password'

I searched the dictionary and came across quote which gave the example of:

Code: Select all

put quote field 2 quote into responseToPost
when I modify it to run in my example, it gives me an error saying that its missing a comma so I have to run it like

Code: Select all

put quote, field 2, quote into responseToPost
but this gives me ",sometext,"

anywho... best way to customize the where statement?
Last edited by richh on Fri Jan 28, 2011 4:41 am, edited 1 time in total.
- Rich

LiveCode 4.6.4
Dell Latitude E6400 running Windows XP SP3 / Mac Pro, Macbook Pro & Mac Mini running OS X 10.6.4

mroam
Posts: 11
Joined: Tue Nov 27, 2007 8:11 pm
Contact:

Re: Where statement

Post by mroam » Fri Jan 28, 2011 4:15 am

Hi Richh;

your simple example

Code: Select all

put quote, field 2, quote into responseToPost
which produces ",sometext," should be written as

Code: Select all

put quote & field 2 & quote into responseToPost
which uses the ampersand to combine text, and would produce
"sometext"
which I think is what you want.

Note: in some sample code you might see people using double ampersand (&&), but that supplies a blank between the text snippets, so

Code: Select all

put quote && field 2 && quote into responseToPost
would result in " sometext "

--Mike
ps: I don't know enough about SQL yet to attempt to revise your revDataFromQuery statement.
Briefly looking at it I wonder why you're using numToChar(39), which should produce single quote ' (apostrophe).

richh
Posts: 41
Joined: Tue Jan 25, 2011 8:48 pm

Re: Where statement

Post by richh » Fri Jan 28, 2011 4:39 am

thank Mike for your input.

I gave the below a try

Code: Select all

put quote & field 2 & quote into responseToPost
and you are correct, I needed & instead of commas. The dictionary should probably be updated.

the reason why I am using numToChar(39) or single quote is because when you write a MS SQL statement and are referring to string, you need to use single quotes.

for example:

Code: Select all

select user_id, user_firstname, user_lastname, user_dob from T_USER where user_firstname = 'john' and user_lastname = 'smith'
this would return an entry with john in the user_firstname column and smith in the user_lastname column.

I was playing around with the code some more and broke it out as such

Code: Select all

   -- Grab Username / Password
   
   put numToChar(39) & field "userNameField" & numToChar(39) into tUser
   put numToChar(39) & field "passwordField" & numToChar(39) into tPassword
   put "select user_name, user_login, user_password, role_id from T_USER where user_name =" & tUser & " and user_password = " & tPassword & "" into tStatement
   
   -- Perform query on database.
   
   put revDataFromQuery(comma,return, dbConnectionID, tStatement) into tData
I noticed that tStatement string is correctly formatted; however, when tStatement is applied to the query, I get double single quotes before and after the user name and password.

I am not sure if revDataFromQuery modifies the select statement or not once a string is submitted to it.
- Rich

LiveCode 4.6.4
Dell Latitude E6400 running Windows XP SP3 / Mac Pro, Macbook Pro & Mac Mini running OS X 10.6.4

richh
Posts: 41
Joined: Tue Jan 25, 2011 8:48 pm

Re: Where statement

Post by richh » Fri Jan 28, 2011 5:20 am

I think I am getting closer

Code: Select all

   -- Grab Username / Password
   put field "userNameField" into tUser
   put field "passwordField" into tPassword
   
   -- Perform query on database.
   put revDataFromQuery(comma,return, dbConnectionID, "select user_name, user_login, user_password, role_id from T_USER where user_name =:1 and user_password = :2", "tUser","tPassword") into tData
This time no double single quotes; however, not seeing any data in tData
- Rich

LiveCode 4.6.4
Dell Latitude E6400 running Windows XP SP3 / Mac Pro, Macbook Pro & Mac Mini running OS X 10.6.4

bangkok
VIP Livecode Opensource Backer
VIP Livecode Opensource Backer
Posts: 937
Joined: Fri Aug 15, 2008 7:15 am

Re: Where statement

Post by bangkok » Fri Jan 28, 2011 9:25 am

No need to make your life complicated.

Code: Select all

put "select user_name, user_login, user_password, role_id from T_USER where user_name='"&tUser&"' and user_password='"&tPassword&"'" into dbSQL
put revDataFromQuery(comma,return, dbConnectionID, dbSQL) into tData
(note we have a single quote followed by a double quote, before and after each variable)

And just to be sure that your query is fine, make a :

Code: Select all

answer dbSQL
before the revDataFromQuery

Klaus
Posts: 14177
Joined: Sat Apr 08, 2006 8:41 am
Contact:

Re: Where statement

Post by Klaus » Fri Jan 28, 2011 12:54 pm

Hi Rich,

here some little timesaving functions that I always have in my stackscript(s):

Code: Select all

function Q tText
  return QUOTE & tText & QUOTE
end Q
And this one for single QUOTES:

Code: Select all

function Q2 tText
  return "'" & tText & "'"
end Q2
Especially very handy for building SQL statements!


Best

Klaus

richh
Posts: 41
Joined: Tue Jan 25, 2011 8:48 pm

Re: Where statement

Post by richh » Fri Jan 28, 2011 1:54 pm

thank you Klaus & bangkok for your replies...

I tried various combinations and still ending up with the same result :(

using this code:

Code: Select all

   -- Grab Username / Password
   put field "userNameField" into tUser
   put field "passwordField" into tPassword
   
 
   -- Perform query on database.
   
   put "select user_name, user_login, user_password, role_id from T_USER where user_name='"&tUser&"' and user_password='"&tPassword&"'" into dbSQL
   put revDataFromQuery(comma,return, dbConnectionID, dbSQL) into tData
SQL Profiler shows:

Code: Select all

declare @p1 int
set @p1=1
exec sp_prepare @p1 output,NULL,N'select user_name, user_login, user_password, role_id from T_USER where user_name=''jsmith'' and user_password=''pwd''',1
select @p1
However, dbSQL does show single quotes which tells me that when revDataFromQuery runs, it modifies the single quotes to two single quotes.

Klaus,

that is a great tidbit to know about the use of functions.
- Rich

LiveCode 4.6.4
Dell Latitude E6400 running Windows XP SP3 / Mac Pro, Macbook Pro & Mac Mini running OS X 10.6.4

richh
Posts: 41
Joined: Tue Jan 25, 2011 8:48 pm

Re: Where statement

Post by richh » Fri Jan 28, 2011 3:41 pm

OMG... the problem was my sql query the whole time. I was porting over one of my applications and I should have used user_login and not user_name :oops:

everything works as intended. :D

once again... thank you everyone for your input. I promise not to post any new items for a few days as to give you guys a break from my questions :lol:
- Rich

LiveCode 4.6.4
Dell Latitude E6400 running Windows XP SP3 / Mac Pro, Macbook Pro & Mac Mini running OS X 10.6.4

Post Reply