是的,: 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' 最后一句有错,我要如何修改这句话了?
S1和S2是什么呀? 先这样改: close table use e:\dbftemp\show128.dbf in 1 use e:\dbftemp\my.dbf in 2 sele 2 最后一句先等一下,我去查查
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
行从头查吧,首先你和的是一条语句,前两行结尾必须用分号,即:
INSERT mytable (first_column,second_column);
SELECT another_first,another_second;
FROM anothertable;
WHERE another_first=’Copy Me!’
(如果你已经知道了这种规则的话,也许我的考虑是多余的)
我已经把语句都写程一行了,可是还是同样的错误!
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'
最后一句有错,我要如何修改这句话了?
先这样改:
close table
use e:\dbftemp\show128.dbf in 1
use e:\dbftemp\my.dbf in 2
sele 2
最后一句先等一下,我去查查
试试吧,如果不行就得在表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
要真正地用sql, 還是用MS SQL了.
下面的方法是从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);
*--- 存储过程
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;}
真有点搞不清vfp的存储过程该如何写。
原来在vfp中的程序,完成一次表操作只要1,2秒,现在改用ado来做,因为至今还没有找到对2个表直接用一条sql语句就搞定的方法,所以现在我只能先从源表中取出纪录的值,保存为变量,然后再用insert into .. values(变量)来做。结果就是慢到了10秒级了!!!!!
不知有那位前辈曾经做过vfp,ado的编程,给小弟一点指导!