Filemaker:值形成相关表格

时间:2015-08-02 08:03:02

标签: filemaker

基于DATA的关系中,我有2个表IMAGESitem_numberDATA中的记录每个都有IMAGES收集的3条记录。

例如,item_number 010050的记录与IMAGES中的这些记录相关联:

  • 010050.eps
  • 010050_table.tif
  • 010050_drawing.png

在DATA中的相应记录中,我有以下字段:

  • main
  • table
  • drawing

我的目标是在DATA中设置字段,如:

  • 010050.eps =>主
  • 010050_table.tif =>表
  • 010050_drawing.png =>绘制

我试过了:

ExecuteSQL("SELECT filename FROM images WHERE filename = ?"; ""; ""; "010050_drawing")

谁可以给我一个暗示?

3 个答案:

答案 0 :(得分:0)

老实说,除非你的内容比你所描述的更多,否则你就太难了。

如果每条DATA记录总是有3条IMAGE记录,特别是如果您想将每张图像直接关联到特定类型,则不需要IMAGE表。一个更简单的解决方案是在DATA表中添加3个容器字段(例如,main_image,table_image,drawing_image)。您不需要SQL或门户网站,您也不必担心将相关图像与其类型相关联。

OTOH,如果你真的需要一个单独的表,考虑硬连接三个专用的1:1关系,每个图像类型一个。为此,在DATA:(main_image_id等)中添加3个特殊键字段,并为每个图像类型创建一个关系,每个图像类型都在这些字段之一和主IMAGE之间。然后,每当您创建DATA记录和3个相关的IMAGE记录时,将匹配图像的键放在匹配的DATA :: xxx_image_id字段中。这样,您就拥有了干净的1:1关系,并且每个相关图像都会被锁定到其类型。

答案 1 :(得分:0)

感谢您的回复

我需要这些字段中的图像值才能将其导出到XML和InDesign(进入表格单元格)。
问题是我知道文件名,即item_number后跟_drawing或_table,但不知道正手上的扩展名(许多文件和来自不同的来源) 因此,文件格式不同 我现在的解决方案是:
- 导入相关的所有图像(item_number,他也是文件名的一部分)一个FMP表
- 我计算了文件是表格,图纸还是插图,并将这些值放在“亲切”字段中:

Case (
  PatternCount ( filename ; "_drawing." )  ;
  "drawing" ;

  PatternCount ( filename ; "_table." ) ;
  "table" ;

  Length ( filename )=10 ;
  "main" ;

  ""
)


- 然后我在每个字段中进行查询,主表 - 绘图。下面的一个是“表格”字段中的计算。

ExecuteSQL("
  SELECT path_xml 
  FROM images 
  WHERE item_number = ? and kind = ?";
  "";""; item_number ; "table"); ""
) 


也许有点笨拙,但它现在有效。

答案 2 :(得分:0)

  

我无法弄清楚如何在xslt中做到这一点。

举一个简单的例子,假设您已从Data表导出,导出中只包含两个字段:Data::ItemNumberImages::FileName。您的原始导出将看起来像这样(显示两个记录):

<强> XML

<?xml version="1.0" encoding="UTF-8"?>
<FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult">
   <ERRORCODE>0</ERRORCODE>
   <PRODUCT BUILD="" NAME="FileMaker" VERSION=""/>
   <DATABASE DATEFORMAT="" LAYOUT="" NAME="" RECORDS="" TIMEFORMAT=""/>
   <METADATA>
      <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="ItemNumber" TYPE="NUMBER"/>
      <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="Images::FileName" TYPE="NUMBER"/>
   </METADATA>
   <RESULTSET FOUND="2">
      <ROW MODID="0" RECORDID="1">
         <COL>
            <DATA>010050</DATA>
         </COL>
         <COL>
            <DATA>010050.eps</DATA>
            <DATA>010050_table.tif</DATA>
            <DATA>010050_drawing.png</DATA>
         </COL>
       </ROW>
      <ROW MODID="0" RECORDID="2">
         <COL>
            <DATA>2345</DATA>
         </COL>
         <COL>
            <DATA>2345_extra.gif</DATA>
            <DATA>2345_table.gif</DATA>
            <DATA>2345_drawing.jpg</DATA>
            <DATA>2345.tiff</DATA>
         </COL>
      </ROW>
   </RESULTSET>
</FMPXMLRESULT>

请注意第二条记录中的不同顺序以及额外图像。

应用以下样式表后:

<强> XSLT

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fmp="http://www.filemaker.com/fmpxmlresult"
exclude-result-prefixes="fmp">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:template match="/">
    <root>
        <xsl:for-each select="fmp:FMPXMLRESULT/fmp:RESULTSET/fmp:ROW">
            <xsl:variable name="item-no" select="fmp:COL[1]/fmp:DATA"/>
            <item>
                <number>
                    <xsl:value-of select="$item-no"/>
                </number>
                <main>
                    <xsl:value-of select="fmp:COL[2]/fmp:DATA[starts-with(., concat($item-no, '.'))]"/>
                </main>
                <table>
                    <xsl:value-of select="fmp:COL[2]/fmp:DATA[starts-with(., concat($item-no, '_table.'))]"/>
                </table>
                <drawing>
                    <xsl:value-of select="fmp:COL[2]/fmp:DATA[starts-with(., concat($item-no, '_drawing.'))]"/>
                </drawing>
            </item>
        </xsl:for-each>
    </root>
</xsl:template>

</xsl:stylesheet>

你会得到:

<强>结果

<?xml version="1.0" encoding="UTF-8"?>
<root>
   <item>
      <number>010050</number>
      <main>010050.eps</main>
      <table>010050_table.tif</table>
      <drawing>010050_drawing.png</drawing>
   </item>
   <item>
      <number>2345</number>
      <main>2345.tiff</main>
      <table>2345_table.gif</table>
      <drawing>2345_drawing.jpg</drawing>
   </item>
</root>