删除FileMaker Pro表上的所有索引

问题描述 投票:1回答:1

我们继承了一个包含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

indexing filemaker
1个回答
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,否则您可能会为该布局上的任何可索引字段返回索引。他是对的,没有办法以编程方式阻止创建新索引,必须手动完成。

© www.soinside.com 2019 - 2024. All rights reserved.