删除 FileMaker Pro 上的所有索引 Table
Drop all Indexes on a FileMaker Pro Table
我们继承了一个table,里面有超过500个字段,几乎所有的字段都被索引了。我们正在尝试通过 ODBC 访问此 table,但由于索引数量巨大而无法访问。
我们正在寻求有关如何迭代所有字段的帮助,查看它是否被索引,如果是则删除索引。
我们摸索了几个小时,没有任何进展,希望有人能提供帮助!
我们愿意接受可以提供帮助的插件或其他解决方案,或者只是关于如何通过 FileMaker Pro 脚本执行此操作的一些建议。
提前致谢!
本
PS 我们在 FileMaker Pro 17 上 Windows 这是我们尝试过的:
我们尝试将 Execute SQL 与 DROP INDEX 函数一起使用,但似乎每个字段都需要它,并且每个字段都需要一个新的 Exectute SQL 语句,这意味着超过 500 个语句。这也是一个问题,因为并非所有字段都有索引,所以不抛出错误的字段似乎停止了脚本 运行.
更新:感谢@AndreasT,我能够让这个工作!我将关键的项目加粗了。
STEPS
- 创建包含我想要的字段的视图
- 写一个脚本(见下文)获取字段的一个变量
- 遍历字段集,使用 Calculated SQL
删除字段
轻松愉快!再次感谢@AndreasT!你是金色的神!
注意:__BENTEST 是一个布局,其中包含我需要处理的 table 中的所有字段。
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 在评论中所说的是真实的,因此请在相关布局上禁用快速查找,否则您可能会为该布局上的任何可索引字段取回索引。他是对的,没有办法阻止以编程方式创建新索引,必须手动完成。
我们继承了一个table,里面有超过500个字段,几乎所有的字段都被索引了。我们正在尝试通过 ODBC 访问此 table,但由于索引数量巨大而无法访问。
我们正在寻求有关如何迭代所有字段的帮助,查看它是否被索引,如果是则删除索引。
我们摸索了几个小时,没有任何进展,希望有人能提供帮助!
我们愿意接受可以提供帮助的插件或其他解决方案,或者只是关于如何通过 FileMaker Pro 脚本执行此操作的一些建议。
提前致谢!
本
PS 我们在 FileMaker Pro 17 上 Windows 这是我们尝试过的: 我们尝试将 Execute SQL 与 DROP INDEX 函数一起使用,但似乎每个字段都需要它,并且每个字段都需要一个新的 Exectute SQL 语句,这意味着超过 500 个语句。这也是一个问题,因为并非所有字段都有索引,所以不抛出错误的字段似乎停止了脚本 运行.
更新:感谢@AndreasT,我能够让这个工作!我将关键的项目加粗了。
STEPS
- 创建包含我想要的字段的视图
- 写一个脚本(见下文)获取字段的一个变量
- 遍历字段集,使用 Calculated SQL 删除字段
轻松愉快!再次感谢@AndreasT!你是金色的神!
注意:__BENTEST 是一个布局,其中包含我需要处理的 table 中的所有字段。
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 在评论中所说的是真实的,因此请在相关布局上禁用快速查找,否则您可能会为该布局上的任何可索引字段取回索引。他是对的,没有办法阻止以编程方式创建新索引,必须手动完成。