我们继承了一个包含500多个字段的表,几乎所有字段都被编入索引。我们试图通过ODBC访问此表,但由于索引数量巨大而无法访问。
我们正在寻找有关如何迭代所有字段的帮助,查看它是否已编入索引并删除索引(如果是)。
我们偶然发现了几个小时并没有取得任何进展,所以希望有人可以提供帮助!
我们对可以提供帮助的插件或其他解决方案持开放态度,或者只是通过FileMaker Pro脚本提供一些建议。
先感谢您!
Ben
PS我们在FileMaker Pro 17 for Windows上这是我们尝试过的:我们尝试将Execute SQL与DROP INDEX函数一起使用,但似乎每个字段都需要它,每个字段都需要一个新的Exectute SQL语句,这意味着结束500条陈述。这也是一个问题,因为并非所有字段都有索引,因此不会抛出错误,这似乎会阻止脚本运行。
更新:感谢@AndreasT,我能够让这个工作!我加粗了关键的项目。
步骤1.创建一个包含我想要的字段的视图2.编写一个脚本(见下文)以获取字段的变量3.循环遍历字段集,使用Calculated SQL删除字段
容易脱皮!再次感谢@AndreasT!你是一个金色的神!
Set Error Capture [ On ]
Set Variable [ $fieldlist; Value:FieldNames ( Get(FileName); “__BENTEST”) ]
Set Variable [ $fieldcount; Value:ValueCount($fieldlist) ]
Loop
Set Variable [ $counter; Value:$counter + 1 ]
Set Variable [ $fieldname; Value:GetValue($fieldlist;$counter) ]
Execute SQL [ ODBC Data Source: “FM_Constituents”; Calculated SQL Text: “DROP INDEX on Constituents.” & $fieldname ]
[ No dialog ]
Exit Loop If [ $counter = $fieldcount ]
End Loop
脚本引擎或计算引擎中没有任何功能可以影响数据库架构。但是,在将数据库用作ODBC源时,可以从字段创建或删除索引。您可以获取列(字段)名称列表并迭代这些名称并在每个字段上执行DROP INDEX语句。
更多信息,请参见本文件的第22页:FileMaker 16 SQL Reference
编辑:您也可以尝试使用插件并在循环脚本的计算中运行它。这个似乎支持DROP Index语句。 myFMBUTLER DoSQL plugin
可能还有其他插件也会这样做。
编辑2:像这样的东西应该做的伎俩,但由于索引太多而无法通过ODBC访问文件的根本问题似乎很奇怪,应该进行调查。该文件可能已损坏,您可以尝试对恢复的版本进行恢复和测试。
这是循环脚本的原理。
创建一个新布局并向其添加所有需要的字段。从字段选择器拖放是一种简单的方法。您可以按字段类型排序,只根据需要拖动文本和数字字段。
In your script, Set error capture to On.
Set a varible $fieldlist to FieldNames ( Get(FileName );"Your new layout name").
Now you have your list of fields/columns.
Set a $fieldcount variable to count the fields ValueCount($fieldlist)
Set a $counter variable to 1
Start a loop
Get the first column name by setting a variable to GetValue($fieldlist;$counter)
Do the SQL to DROP INDEX on this column
Increment the $counter
Exit loop when $counter > $fieldcount
End loop
Sam在评论中说的是真的,因此在相关布局上禁用Quickfind,否则您可能会为该布局上的任何可索引字段返回索引。他是对的,没有办法以编程方式阻止创建新索引,必须手动完成。