[A/AK]: SnODBC is a binding for ODBC API. It is distributed as [starkit] that may be sourced to have a '''snodbc''' package available. The starkit may also be run to see the documentation. URL: http://www.sw4me.com/snodbc.kit The starkit contains binaries of [Ffidl] and [dict] extensions compiled for Windows-x86 and Linux-x86. '''2005-10-06''' For the convenience of those who don't use tclkit and starkits, ready-to-use binary distributions were prepared: * Linux (x86): http://www.sw4me.com/snodbc-linux-x86.tar.gz * Windows (x86): http://www.sw4me.com/snodbc-windows-x86.zip SnODBC is mostly compatible with [TclODBC], but there are some subtle differences. See the documentation for details. The main ''good'' difference is that SnODBC supports [Unicode] character types. Other advantages of SnODBC include: * Support for ODBC GUI: you may bring up datasource selection dialog to establish a connection, and save the connection string for subsequent connections. * Additional support for metadata: '''rowid''', '''primarykeys''', '''procedures''' and '''procedurecolumns''' metadata queries. * Support for scrollable cursors: navigate back and forth on the result set when the driver supports it. * Setting NULL representation for a statement in order to distinguish NULLs from the empty string value. The extension is developed for Tcl 8.5; this starkit was created with some help of the [sugar] macro processor to translate [{expand}] syntax into the compatible replacement for Tcl-8.4. See [using sugar for forward-compatible {expand}] for a syntax macro that does this job. The version of the starkit presented here may be used with Tclkit 8.4 (tested on 8.4.9), or with any Tcl 8.4 distribution supporting starkits, such as [ActiveTcl], [dqkit], [TixTclKit]. Once downloaded, the starkit may be updated to the latest version with the [sdx] tool: sdx update -from http://sw4me.com/cgi-bin/starsync snodbc.kit ---- 2005-09-16: Some changes were made to improve [TclODBC] compatibility. Now the vast majority of scripts using TclODBC will just work with SnODBC as well. ---- [snichols] 09-16-05 I am curious did you use Ffidl to create the C wrappers for the C based ODBC API? [A/AK] 09-17-05 I use Ffidl to create the [TCL] commands that call ODBC functions in ODBC shared library. There is no C functions in SnODBC, and, consequently, no compilation is required when [Ffidl] is already available. [snichols] That's pretty wild. So Ffidl is what exposes the C based ODBC functions to Tcl? [A/AK] Yes. [Ffidl] is great at exposing C based functions to Tcl at runtime. [snichols] If I have some time I may try using it to expose some LDAP functions to Tcl using the popular Mozilla LDAP C API. ---- ''[escargo] 27 Oct 2005'' - I downloaded the [Microsoft Windows] binary-only version (not the starkit) and found two problems with its installation on my [ActiveState] 8.4.11 installation (on Windows XP Pro). * The file permissions on ffidl06.dll were not executable, so I had to change the permissions before it would load. * The pkgIndex.tcl file uses the odbc namespace, but it does not ensure that it is created. Once I made those changes, I was able to load snodbc. Once I loaded it, I tried this code: database datasources system I got a response: can't rename "{EngTestDB {SQL Server}}": command doesn't exist So there is still something not quite right with the binary-only installation. ''Later.'' I tried the same test using source to source the starkit version, and then package require. I get the same error as before. ''[A/AK] 02-Nov-2005'' - Fixed the error with ''datasources'' and ''drivers'', and added executable permissions for DLLs. As of ::odbc namespace, it is used in pkgIndex.tcl at the place where it is surely defined. If you see a message about an undefined namespace when loading the package, I would like to see the message and the stack trace. I've tested the package with ActiveTcl 8.4.1, dqkit, tclkit etc. No namespace-related errors have been noticed. Mea culpa: I've forgot to test "datasources" and "drivers" for 8.4 backport, and I've not noticed the DLL permissions issue because my unzipper doesn't set permissions on MS Windows; but it would be very strange if the ''namespace'' is OK on my machine and missing on some other one. 15nov05 [jcw] - Had to add a package require Tk before "source $starkit::topdir/help/help.tcl" in main.tcl, and noted that the starkit help will generate an error with 8.4, but with tclkit 8.5 the help came up fine (tried on Mac, I have no real ODBC driver for it, so it was just to see the docs). ---- 13April [snichols] - I fixed a bug with snodbc and SQL prepared statements. The bug has to do with using blank Tcl data (like set myvar {}) in SQL prepared statements. I guessed where to fix it in the code but it works. FYI... The original tclodbc package suffers from the same problem, but I don't have the C++ sources it fix it too. Here's what I changed in snodbc's odbc-obj.tcl package script to make prepared statements work with blank varchars passed from Tcl: # Old Way (find this line in odbc-obj.tcl) if {!$pprec} { set pprec $charlen} set bound [SQLBindParameter $hstmt $ip 1 $c_type $ptype $pprec $pscale [::ffidlx::buffer addr $buf] [string length $bytes] [expr {$theIndicator+$pib}]] # New Way if {!$pprec} { set pprec [expr {$charlen + 1}]} set bound [SQLBindParameter $hstmt $ip 1 $c_type $ptype $pprec $pscale [::ffidlx::buffer addr $buf] [expr {[string length $bytes] + 1}] [expr {$theIndicator+$pib}]] In the latter snipit I increased the allocated buffer by one. This shouldn't hurt anything that I know of. [Category Database] | [Category Package]