将所有索引拖放到FileMaker Pro表上

时间:2019-04-22 19:00:50

标签: indexing filemaker

我们继承了一个包含500多个字段的表,几乎所有字段都已建立索引。我们正在尝试通过ODBC访问该表,但是由于索引数量巨大,因此无法进行。

我们正在寻求有关如何迭代所有字段的帮助,请查看它是否已被索引,如果已索引则将其删除。

我们已经迷迷糊糊了好几个小时,并且没有取得任何进展,所以希望有人能提供帮助!

我们欢迎有帮助的插件或其他解决方案,或者只是一些有关如何通过FileMaker Pro脚本进行操作的建议。

提前谢谢!

PS我们正在使用Windows的FileMaker Pro 17,这是我们尝试的方法: 我们试图将Execute SQL与DROP INDEX函数一起使用,但是似乎每个字段都需要它,并且每个字段都需要一个新的Exectute SQL语句,这意味着有500多个语句。这也是一个问题,因为并非所有字段都具有索引,因此没有引发错误的字段似乎会停止脚本运行。

更新:感谢@AndreasT,我能够使它正常工作!我已经把关键的项目加粗了。

STEPS  1.使用所需字段创建一个视图  2.编写脚本(见下文)以获取字段的变量  3.遍历字段集,使用计算的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

1 个答案:

答案 0 :(得分:1)

脚本引擎或计算引擎中没有影响数据库架构的功能。但是,将数据库用作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,否则您可能会对该布局上的任何可索引字段重新获得索引。他是对的,没有办法以编程方式阻止创建新索引,而必须手动完成。