如何在LiveCode中导入数据库及CSV文件?求技术实现方案
LiveCode中CSV导入Stack开发与数据库集成方案
一、CSV文件导入Stack实现
核心逻辑实现
LiveCode的脚本系统可以直接处理文件读取与CSV解析,无需依赖外部工具:
- 读取CSV内容:通过
url("file:" & tFilePath)快速获取文件内容,再拆分行列。注意处理带引号的字段(避免逗号拆分错误):on importCSV pFilePath put url("file:" & pFilePath) into tCSVContent -- 处理Windows换行符 replace lf with cr in tCSVContent split tCSVContent by cr into tRows put empty into tDataArray repeat for each key tRowNum in tRows put tRows[tRowNum] into tCurrentRow -- 处理带引号的字段:先替换引号内的逗号为临时标记 repeat while tCurrentRow contains quote & comma & quote replace quote & comma & quote with quote & "@@COMMA@@" & quote in tCurrentRow end repeat split tCurrentRow by comma into tFields -- 还原引号内的逗号 repeat for each key tFieldNum in tFields if tFields[tFieldNum] starts with quote and tFields[tFieldNum] ends with quote then delete char 1 and last char of tFields[tFieldNum] replace "@@COMMA@@" with comma in tFields[tFieldNum] end if end repeat put tFields into tDataArray[tRowNum] end repeat return tDataArray end importCSV - UI交互绑定:添加按钮触发文件选择,调用导入函数后用表格控件展示数据:
on mouseUp answer file "选择CSV文件" with type "CSV文件|*.csv|所有文件|*.*" if it is not empty then put importCSV(it) into tImportedData -- 将数组数据写入表格字段 put empty into tTableText repeat for each key tRow in tImportedData combine tImportedData[tRow] with tab put tImportedData[tRow] & cr after tTableText end repeat delete last char of tTableText -- 移除最后一个换行符 put tTableText into field "数据表格" end if end mouseUp
二、自定义数据操作实现
LiveCode的脚本语言完全支持无预设限制的数据操作,你可以:
- 直接操作数据数组:针对导入后的数组执行任意逻辑,比如按自定义规则排序、批量修改字段:
function sortByCustomRule pDataArray,pTargetCol local tSortedKeys,tTempArray -- 提取目标列值作为排序依据 repeat for each key tRow in pDataArray put pDataArray[tRow][pTargetCol] & "@@" & tRow into tTempArray[tRow] end repeat sort lines of tTempArray ascending -- 生成排序后的数组 repeat for each line tLine in tTempArray split tLine by "@@" into tParts put pDataArray[tParts[2]] into tSortedKeys[the number of lines in tTempArray] end repeat return tSortedKeys end sortByCustomRule - 自定义持久化存储:将处理后的数据存入stack的自定义属性集(Custom Properties),实现数据绑定:
on saveData pDataArray set the cImportedData of this stack to pDataArray end saveData -- 读取时直接调用:put the cImportedData of this stack into tSavedData
三、数据库导入到LiveCode的方法
LiveCode支持多种数据库连接方式,常用方案:
- SQLite本地数据库:无需额外依赖,直接连接SQLite文件导入数据:
on importFromSQLite pDBPath sqlite_connect pDBPath,"localDB" sqlite_execute "localDB","SELECT * FROM target_table",tResult sqlite_disconnect "localDB" split tResult by cr into tRows put empty into tDBData repeat for each line tRow in tRows split tRow by tab into tFields put tFields into tDBData[the number of lines in tRows] end repeat return tDBData end importFromSQLite - 远程数据库(MySQL/PostgreSQL):安装对应驱动插件后,通过
revOpenDatabase连接并导入:on importFromMySQL pHost,pDBName,pUser,pPass,pQuery put revOpenDatabase("mysql",pHost,pDBName,pUser,pPass) into tDBID if tDBID is a number then put revDataFromQuery(tab,cr,tDBID,pQuery) into tResult revCloseDatabase tDBID -- 转换为数组逻辑同SQLite split tResult by cr into tRows ... end if end importFromMySQL - 其他数据库(FileMaker/Access):先将数据导出为CSV或SQL脚本,再用CSV导入逻辑处理;或通过ODBC连接直接读取(LiveCode支持ODBC驱动)。
内容的提问来源于stack exchange,提问作者David Short
相关产品推荐
相关产品推荐

