TimpleSQL

TimpleSQL v1.3 was released on February 25, 2003!

Downloads & Additional Info/Examples: http://www.simplifiedlogic.com/TimpleSQL/Default.htm

ECS @ 2005-11-03: Link is broken. (The domain is still there, but the TimpleSQL and below appear to be gone.)

2006-01-04 : Now hosted on http://www.sourceforge.net/projects/timplesql

What is TimpleSQL?

TimpleSQL is a set of standalone procedures that helps the developer either quickly prepare values, or execute submission, for INSERT or UPDATE queries into a database using tclodbc.

TimpleSQL only requires a standard one-dimensional Tcl Array of your input values and the target table name/array where you want to insert or update your information. TimpleSQL gathers the target table's column name/formatting requirements and, depending on your desired action, will generate the proper SQL input string based on the matching indexes in your Tcl Array. You can also Validate your submission data relative to the target table before submission (recommended).

TimpleSQL can either prepare and execute the submission of the generated SQL, or you can use some lower level commands to help you generate SQL structures (e.g., SELECT, INSERT, UPDATE) for hard coding SQL in your own applications.

Using TimpleSQL, you can quickly database-enable standard Tcl/TK and CGI Applications for things like submission forms, polls, and shopping carts.

QUICK EXAMPLE: INSERT Record into Database (uses tclodbc):


 # Load the Packages
     
     package require TimpleSQL
     package require tclodbc
 
 # Connect to the database
     
     database db MyDatabaseName
 
 # Submission data that you create in your appliation/CGI.
 #  - The Array Index Values are the Target Table Column Names
     
     set arr(FName) John
     set arr(LName) "Doe's last name"
     set arr(State) Anywhere
     set arr(ZIP)   12345
     set arr(AddToMailingList) 1
     set arr(submitDate) [clock format [clock seconds] -format %m/%d/%y]
 
 
 # Generate the Table Column Type Cross Ref Info
     
     GenTableColTypes typTbl tbl_RegistrationInfo
  
 
 # Validate the Submission Value Formats to the Target Table Formats
 
     if [catch {ValidateSubmissionData arr typTbl} err] {
         # Data is NOT Valid - Report Errors
         foreach item [join $err] {
             puts "ERROR: $item"
         }
     } else { 
         # Data is Valid/Compatiable with Target Database - Insert Record
         TimpleSQLInsert arr typTbl
     }
  
 
 # Disconnect from the Database & Exit
    
    db disconnect
    exit

OTHER FEATURES:

UPDATE Database Records: TimpleSQL can also do record updates using the same basic approach and supports straight SQL Instructions! For Example:

   if [catch {ValidateSubmissionData arr typTbl} err] {
       
       # Data is NOT Valid - Report Errors
       
       foreach item [join $err] {

           puts "ERROR: $item"

       }
       
   } else { 
       
       # Data is Valid/Compatiable with the Target Database - Update the Record
    
           TimpleSQLUpdate arr typTbl "FName = 'Dave'"

       # Note: A standard WHERE SQL Condition is at the end of the command. This is passed \
       to the command so that the SQL UPDATE can modify the proper record/records in the database.

    }

Record Existance Checking: The EntriesExist Command in TimpleSQL produces a Tcl boolean response based on your submission array and table. This is quite handy for CGI, Login Screens, etc.. For Example:

    # Validation Contents
        
        set arr2(LoginName) buba
        set arr2(LoginPasswd) buba1

    # Generate the Table Column Type Cross Ref Info
        
        GenTableColTypes typTbl tbl_LoginVerification

        if [EntriesExist arr2 typTbl] {
             # Login OK
         } else {
             # Login Failed
         }

Dynamic SQL Generation: You can also use TimpleSQL for dynamic SQL Generation, if you choose not to use the TimpleSQLInsert or Update Commands.

Hope you enjoy this package as much as I have.

David Bigelow


If you want to add comments or notation to this page, please do so in a separate section, DO NOT change original sample code as it may confuse people trying to use library.

Thanks!