Data From MySQL to SQLite

Peter Haworth pete at lcsql.com
Thu May 23 19:33:47 EDT 2013


On Thu, May 23, 2013 at 2:31 PM, Devin Asay <devin_asay at byu.edu> wrote:

> Thanks, I'll give that a try. Any idea if this might work for records
> containing binary data? I have one table with around 74 MB of data that I
> need to transfer over.


Hi Devin,
Not knowing much about your data but allowing for as many gotchas as I can
think like binary data and the need to delimit single/double quotes, etc, I
think I'd be inclined to do this with revQueryDatabase to get a db cursor
and using the "variableslist" format for revExecuteSQL, although it's
easier to use an array that a load of variables.

It will make the script a bit more complicated but I think you would run
into less problems that way.

You could have a generic handler that might look something like this
(Untested) with ptable being the name of the table to be loaded and pselect
being the select for the source table.


command loadTable ptable,pselect

local tID,tArray,tNumRecs,tColNames,tValues,tColCount

put revQueryDatabase(mySQLDBID,pselect) into tID
if tID is not an integer then
   answer error ......
   exit loadTable
end if

put revNumberOfRecords(tID) into tNumRecs
put revDatabaseColumnCount(tID) into tColCount

put empty into tArray
put "(" into tValues
repeat with x=1 to tColCount
   put ":" & x & comma after tValues
end repeat
put ")" into char -1 of tValues

revExecuteSQL SQLiteDBID,"BEGIN"

put zero into tColNumber
repeat tNumRecs times
   repeat tColCount times
      add 1 to tColNumber
      get revDatabaseColumnNumbered(tID, tColNumber,tArray[tColNumber])
   end repeat
   revExecuteSQL SQLiteDBID,"INSERT INTO <tablename> VALUES" &&
tValues,"tArray"
   revMoveToNextRecord(tID)
end repeat
revExecuteSQL SQLiteDBID,"COMMIT"

end loadTable

More error checking needed of course, along with a ROLLBACK if any db stuff
fails.


Pete
lcSQL Software <http://www.lcsql.com>



More information about the use-livecode mailing list