好象VF的insert语句后面只能是value赋值,而不能使用select语句

解决方案 »

  1.   

    不是吧,VFP中insert语句也可以用做select语句的!
    行从头查吧,首先你和的是一条语句,前两行结尾必须用分号,即:
    INSERT mytable (first_column,second_column);
    SELECT another_first,another_second;
    FROM anothertable;
    WHERE another_first=’Copy Me!’
    (如果你已经知道了这种规则的话,也许我的考虑是多余的)
      

  2.   

    xiaowei_2002(小魏!) :
    我已经把语句都写程一行了,可是还是同样的错误!
      

  3.   

    上面的回复中代码是错的,这样的命令在VFP中根本就执行不了!有关具体代码你还是参见INSERT-SQL命令吧!~
      

  4.   

    是的,: xiaowei_2002(小魏!) 你能看看这些代码吗?在vfp中写的:
    close table
    sele 1
    use e:\dbftemp\show128.dbf
    sele 2
    use e:\dbftemp\my.dbf
    sele 2
    insert my (a,b);
    select S1,S2 form show128 where S1 like '000001'
    最后一句有错,我要如何修改这句话了?
      

  5.   

    S1和S2是什么呀?
    先这样改:
    close table
    use e:\dbftemp\show128.dbf in 1
    use e:\dbftemp\my.dbf in 2
    sele 2
    最后一句先等一下,我去查查
      

  6.   

    insert into my(a,b) values(show128.s1,show128.s2) where show128.s1 like '000001'
    试试吧,如果不行就得在表show128中用if语句了。
    注:INSERT – SQL Command
    Appends a record to the end of a table that contains the specified field values.
    INSERT INTO dbf_name [(fname1 [, fname2, ...])]
       VALUES (eExpression1 [, eExpression2, ...])
    -or-
    INSERT INTO dbf_name FROM ARRAY ArrayName | FROM MEMVAR
      

  7.   

    VFP沿用foxpro或xbase的語法, 只支援部份SQL的語法.
    要真正地用sql, 還是用MS SQL了.
      

  8.   

    不要试了,VFP的INSERT根本不支持SELECT,只支持明确的单条记录插入由于VFP是面向数据记录的,所以对SQL支持的有限,一些集合性质的操作并不支持,或者支持的不好
      

  9.   

    有一个方法:
         下面的方法是从c#转化过来,希望你在Vc中能用。但是道理一样的。
         这个方法可以使到你在vc中更新dbf数据的接口简单很多。就是使用vfp的存储过程。建议你安装ole db for visual foxpro7。0
        据一个例子给你。
    *---- 这是存储过程
    *---- 在这个存储过程中你可以使用多记录更新
    *---- 前提你熟悉vfp的语法
     FUNCTION InsertCustomer
           LPARAMETERS lcCompany, lcContact, lnMaxOrdAmt        lcCustId = LEFT( UPPER(lcCompany), 5)        INSERT INTO Customer (CUST_ID,Company, Contact, MaxOrdAmt) 
                   VALUES (lcCustId,lcCompany,lcContact,lnMaxOrdAmt) 
             RETURN lcCustId
       ENDFUNC*---- 执行
    方法和前面一样的,我不知道vc里面有没有ExecuteNoQuery这个函数了。
    m_pCommand->ExecuteNoQuery(&vNULL,&vNULL,adCmdText);
      

  10.   

    我补充一个c#例子吧:
    *--- 存储过程
    FUNCTION InsertCustomerLPARAMETERS lcCompany, lcContact, lnMaxOrdAmt lcCustId = LEFT( UPPER(lcCompany), 5)INSERT INTO Customer (CUST_ID,Company, Contact, MaxOrdAmt)   VALUES (lcCustId,lcCompany,lcContact,lnMaxOrdAmt) RETURN lcCustIdENDFUNC//c#代码
    public bool AddCustomer(string lcCompany, string lcContact, decimal lnMaxOrdAmt){ if (!this.Open()) {   return false;} OleDbCommand oCommand = new OleDbCommand();oCommand.Connection = this.oConn;oCommand.CommandText = "InsertCustomer('" + lcCompany + "','" +                                       lcContact + "',lnMaxOrdAmt.ToString())"; try {   oCommand.ExecuteNonQuery();}catch(Exception ex){   this.SetError(ex.Message);   return false;} return true;}
      

  11.   

    谢谢各位!
    真有点搞不清vfp的存储过程该如何写。
    原来在vfp中的程序,完成一次表操作只要1,2秒,现在改用ado来做,因为至今还没有找到对2个表直接用一条sql语句就搞定的方法,所以现在我只能先从源表中取出纪录的值,保存为变量,然后再用insert into .. values(变量)来做。结果就是慢到了10秒级了!!!!!
    不知有那位前辈曾经做过vfp,ado的编程,给小弟一点指导!
      

  12.   

    好好的研究一下VFP的查询设计吧