【问题标题】:Using TADOQuery result in another query?使用 TADOQuery 会导致另一个查询?
【发布时间】:2011-01-31 10:05:34
【问题描述】:

使用 Delphi 2009。我有一个 TADOConnection 到包含 csv 文件的文件夹和一个 TADOQuery,它从那里的 csv 文件中提取数据(称为 TADOQueryCSV)。这行得通。

我还有一个到 Access 数据库的第二个 TADOConnection,它有一个名为 AccessTbl_TEMP 的表和在那里处理数据的各种 TADOQueries。他们工作正常。

现在我想处理 TADOQueryCSV 返回的数据并将其插入到 Access 数据库中的表中。但是如何引用从csv文件返回的数据呢?

我需要这样的东西,但不知道如何编写 FROM 子句。

插入 AccessTbl_TEMP (Field1,Field2) 选择 csvField1,csvField2 从 TADOQueryCSV;

【问题讨论】:

    标签: sql delphi ms-access csv ado


    【解决方案1】:

    您可以在 Delphi 中移动代码中的数据。 dsSource 是 TADOQueryCSV,dsTarget 是表 AccessTbl_TEMP。

    dsSource.First;
    while not dsSource.Eof do
    begin
        dsTarget.Append;
        // Assign field values from dsSource to dsTarget
        dsTarget.Post;
        dsSource.Next;
    end;
    

    【讨论】:

      【解决方案2】:

      您必须使用 MS Access 链接表,其中链接表将指向 CSV 文件。

      【讨论】:

      • 这就是我目前所做的。我试图摆脱 MSAccess 表链接的麻烦(尤其是安装在客户机器上时)并在 delphi 中完成所有操作,而将 access 数据库作为数据库。很快我想放弃访问并使用 firebird 或更好的东西,所以需要 delphi 来进行处理。
      • 然后您可以将数据移动到临时表中,然后在查询中使用它的内容。但这会减慢整个操作的速度。
      • 您可以使用 IN 运算符在 FROM 子句中包含连接字符串。确切的语法将取决于您的详细信息,但我总是做的是创建一个链接表,然后获取生成的连接字符串,然后使用查询设计器,并将连接字符串部分粘贴到两个相关的查询属性中,源数据库和源连接字符串。
      【解决方案3】:

      试试这个更快的方法:

      for x := 0 to Source.fieldcount - 1 do
      begin
      Target.fieldbyname(Source.fields[x].fieldname).value :=
      Source.fields[x].value;
      except
      end;
      end;
      

      使用 value 将为您转换数据。 使用 try / except 概念将使您不必确定是否 字段在那里

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多