Insert command to a SQL database (Microsoft SQL) using TCL

Homepage Clovertech Forums Read Only Archives Cloverleaf Cloverleaf Insert command to a SQL database (Microsoft SQL) using TCL

  • Creator
    Topic
  • #52476
    Tom Gilbert
    Participant

    I am trying to do an insert to a SQL table from TCL.  I have done a fetch and search.

    Please Help!!!…🙂

Viewing 11 reply threads
  • Author
    Replies
    • #74361
      Tom Gilbert
      Participant

      I am getting connected ok and I can do a fetch with no problem.

      I am trying to insert data to the SQL table trying to use the following:

      set err [odbc SQLExecute $hstmt “INSERT INTO $table (id,prm_msgid,pcis_orderno,insertdatetime) values(,$msh_10,,)” SQL_NTS]

      Please help Need assistance on why it is not working… ❓

    • #74362
      Steve Pringle
      Participant

      here’s a not for production example:

             odbc SQLAllocEnv henv

             odbc SQLSetEnvAttr $henv SQL_ATTR_ODBC_VERSION SQL_OV_ODBC3 0

             odbc SQLAllocConnect $henv hdbc

         

             set connectResponse [odbc SQLConnect $hdbc $dsn SQL_NTS $uid

                 SQL_NTS $pwd SQL_NTS]

         

             if { [cequal $connectResponse “SQL_ERROR”] } {

                 echo ERROR: Unable to connect to !rn

                 error “ERROR: Unable to connect to !”

             }

         

             if { $ssn == “”} {

                 msgset $mh $msg

                 # need to insert number PID.4 into lwPendingAccts table

                 # from tpsCheckAcctOtherSys

                 odbc SQLAllocStmt $hdbc hstmt5

         

                 set insert “insert into lwPendingAccts (Dnumber, MsgSource)

                     VALUES (‘$IdNum’,’$MsgSource’)”

         

                 set rval [odbc SQLExecDirect $hstmt5 $insert SQL_NTS]

                 if {$rval == “SQL_ERROR” } {

                     echo “insert = $insert”

                     echo “error executing update table”

                     catch {odbc SQLFreeHandle SQL_HANDLE_STMT $hstmt5}

                     catch {odbc SQLDisconnect $hdbc                  }

                     catch {odbc SQLFreeConnect $hdbc                 }

                     catch {odbc SQLFreeEnv $henv                     }

                     return “{ERROR $mh}”

                 }

         

                 catch {odbc SQLFreeHandle SQL_HANDLE_STMT $hstmt5}

                 catch {odbc SQLDisconnect $hdbc                  }

                 catch {odbc SQLFreeConnect $hdbc                 }

                 catch {odbc SQLFreeEnv $henv                     }

                 return “{CONTINUE $mh}”

             }

    • #74363
      Tom Gilbert
      Participant

      I am getting the following error:

      MESSAGE 1

      Tcl callout error

      erroCode: NONE

      errorInfo:

      wrong # args: odbc SQLExecute hstmt

            while executiong

      “odbc SQLExecute $hstmt “INSERT INTO $table (id,prm_msgid,pcis_orderno,insertdatetime) values(,$msh_10,,)” SQL_NTS”

            (procedure “vmctps_storemsgid_prm_kddh_orm” line 83)

            invoked from within

      “vmctps_storemsgid_prm_kddh_orm

    • #74364
      Tom Gilbert
      Participant

      Hello Steve,  Thank you…  I don’t get errors any more…  The problem is that the data is not inserting into the table.  I put some echo’s in there and can see a the echo’s before and after the ‘set insert….’ but did not actually insert…

      Any thoughts…

    • #74365
      Steve Pringle
      Participant

      Your values list has fewer arguments than your insert columns.  They need to match.

      “odbc SQLExecute $hstmt “INSERT INTO $table (id,prm_msgid,pcis_orderno,insertdatetime) values(,$msh_10,,)”

      Try something like this:

      “odbc SQLExecute $hstmt “INSERT INTO $table (id,prm_msgid,pcis_orderno,insertdatetime) values($id,$msh_10,$ordno,$datetime)”

    • #74366
      Tom Gilbert
      Participant

      Now I am getting an SQL Error when executing the odbc SQLExescDirect:

      set insert “INSERT INTO PRM_PCIS_OrderNo_xRef (prm_msgid,pcis_orderno) VALUES(”,’$msh_10′,”,”)”

      set err [odbc SQLExecDirect $hstmt $insert SQL_NTS]

      echo err $err

      $erro is equaling ‘SQL_ERROR’

    • #74367
      Mike Willeson
      Participant

      Tom,

      I think Steve is pointing you in the right direction.  I have never done this with TCL before, but thinking about it from a database perspective, in your original values you were leaving the insert value for the prm_msgid value blank because you have an auto-incrementing primary key field there.

      Now that you have added a value of ” to your insert statement, you are technically trying to insert a string in a numeric field.

      It seems like you need to pre-determine an ID value you can use in your insert.  I am from the oracle world, and we had sequences we could use.  In SQL Server it appears there may be an “IDENTITY” you can use, but I don’t know how it works.

      In psuedo code:

      newID = select from IDENTITY to get numeric value

      set insert “INSERT INTO PRM_PCIS_OrderNo_xRef (prm_msgid,pcis_orderno) VALUES(newID,’$msh_10′,”,”)”

      Try a test and do like Steve suggested, have a variable for every insert parameter and make sure the variable is set to a real value of the proper data type.

    • #74368
      Jim Kosloskey
      Participant

      Tom,

      Try executing a sqlGetDiagRec command after the error to get clarification of what caused the SQL-ERROR to be thrown.

      email: jim.kosloskey@jim-kosloskey.com 29+ years Cloverleaf, 59 years IT - old fart.

    • #74369
      Tom Gilbert
      Participant

      set insert “INSERT INTO PRM_PCIS_OrderNo_xRef (id,prm_msgid,pcis_orderno,insertdatetime) VALUES(newID,’$msh_10′,”,”)”

      set err [odbc SQLExecDirect $hstmt $insert SQL_NTS]

      What would be the best way to configure SQLGetDiagRec.  I keep getting wrong args… 😕

      Thank you

    • #74370
      David Barr
      Participant

      Code:

      odbc SQLGetDiagRec SQL_HANDLE_STMT $hstmt 1 SqlState NativeError MessageText 511 TextLength
      echo ” ”

    • #74371
      Charlie Bursell
      Participant

      Doing ODBC is a lot like doing FTP.  If it doesn’t work from the client it won’t work in ODBC.  Don’t you have a client that you can test this on?

      Is the id column numeric?  If so newID will not work.  If not numeric the it needs to be ‘newID’

      A hint that will save you *MANY* hours.

      If using a variable that could possible contain an apostrephe (‘), e.g. O’Conner, the apostrephes must be doubled or it will give you fits.  I always do something like:

      set var [string map {‘ ”} $var]

      Just in case

    • #74372
      Tom Gilbert
      Participant

      Thank you so much for helping…

      I finally got the error: 2400 Invaled Cursor State

      I used the following command to get the error:

      set err2 [odbc SQLGetDiagRec SQL_HANDLE_STMT $hstmt 1 SqlState NativeError MessageText 511 TextLength]

      echo err2 $err2

      echo sqlstate $SqlState

      echo nativeerror $NativeError

      echo messagetext $MessageText

      The SqlState gave me the error code…

      Then I found the information and this is what I did to insert data:

      set insert “INSERT INTO PRM_PCIS_OrderNo_xRef (prm_msgid,pcis_orderno) VALUES(‘$msh_10’,”)”

      set err1 [odbc SQLCloseCursor $hstmt]

      set err [odbc SQLExecDirect $hstmt $insert SQL_NTS]

      echo err $err

      echo err1 $err1

      When I added the CloseCursor it added the data to the sql table correcly…

      Hope this helps someone… 🙂

Viewing 11 reply threads
  • The forum ‘Cloverleaf’ is closed to new topics and replies.

Forum Statistics

Registered Users
5,117
Forums
28
Topics
9,293
Replies
34,435
Topic Tags
286
Empty Topic Tags
10