| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 922 人关注过本帖
标题:vfp 链接 sql 代码查询并保存为 vfp 表。
只看楼主 加入收藏
hyz00001
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:168
专家分:137
注 册:2012-10-5
结帖率:100%
收藏
已结贴  问题点数:100 回复次数:9 
vfp 链接 sql 代码查询并保存为 vfp 表。
自己编写的sql代码之前的方式是直接在“sql查询分析器”中查询并保存为csv格式,然后在VFP中切csv文档。

看到有一个VFP自带程序,能自动从SQL里面导出数据,看看能不能实现直接用vfp从sql导出数据。最好是可以一次性导出两张表的数据,并保存为对应的表名,谢谢。

可能实现该功能的vfp代码:

   nCon=SQLSTRINGCONNECT("driver=SQL Server;Server=192.168.1.250;Uid=cwnew;pwd=sv;database=AIS20050914072538")
   ndd=SQLEXEC(ncon,"SELECT * FROM T_ITEM",'自定义游标名')
   select * from 自定义游标名 into table po

sql代码:(这里显示两个不同表的获取。第一个表:po,第二个表item。)

Po    采购订单
    select  
    t1.FbillNo as 订单编号,
    t1.fentryid as 订单序号,
    CONVERT(varchar(100), t1.Fdate, 23),
    t1.FsupplyIDName as 供应商,
    t1.FFullNumber as 物料长代码,
    t1.FbaseUnitId as 单位,
    t1.FtaxRate as 税率,
    t1.FbaseQty as 数量,
    t1.famount/t1.fbaseqty as 单价,
    t1.FAmount as 金额,
    t1.fclose as 结案
    from vwICBill_26 t1
   
item    物料表
    select
    t1.FItemID as 物料内码,
    t1.fnumber 物料编码,
    replace(replace(t1.Fname,',',' '),' ','') 物料名称,
    replace(replace(t1.FModel,',',' '),' ','') 规格型号,
    t1.FERPCLSID as 物料属性内码,
    case when t1.FERPCLSID=1 then '外购' when t1.FERPCLSID=2 then '自制'  when t1.FERPCLSID=3 then '委外加工' else '未知' end as  物料属性 ,
    t1.FDefaultLoc as 默认仓库内码,
    t2.FName as 默认仓库,
    t1.F_106 as 是否为结构件内码,
    case when t1.F_106=1 then '是'  when  t1.F_106=0 then '否' else '未知' end as 是否为结构件,
    t3.fcreatedate 创建日期,
    t4.fnumber 存货科目,
    t4.fnumber 收入科目,
    t4.fnumber 成本科目,
    t1.fdeleted 禁用与否,
    t10.fname 物料类型,
    t11.flowestbomcode
    from t_icitem t1 left join t_stock t2 on t1.FDefaultLoc=t2.FItemID
    left join t_baseproperty t3 on t1.fitemid=t3.fitemid
    left join t_account t4 on t1.facctid =t4.faccountid--存货科目
    left join t_account t5 on t1.fsaleacctid=t5.faccountid--收入科目
    left join t_account t6 on t1.fcostacctid=t6.faccountid--成本科目
    left join t_submessage t10 on t1.F_123=t10.FinterID --物料类别
    left join t_lowestbomcode t11 on t1.fitemid =t11.fitemid
    where t3.ftypeid =3 and t1.fnumber<>' '
搜索更多相关主题的帖子: 最好 database 
2014-06-29 09:18
hyz00001
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:168
专家分:137
注 册:2012-10-5
收藏
得分:0 
经过努力思考使用了下面这些代码,请帮忙参考谢谢。
下面代码的想法是通过一个prg的表格(三个字段:prg 备注型,主要用来存储获取资料的sql代码.    name:需要保存的文件名,        cfm:确定是否需要循环。)
来实现之前的要求。

这里的问题在于我已经知道了m.name就是我需要保存的文件名,而且x也是我从sql里面获取之后的临时表

需要报临时表X保存为m.name所规范好的名字。

用宏替换&m.name也还是不行。请帮忙看看,谢谢。

PUBLIC m.name,m.prg
    nCon=SQLSTRINGCONNECT("driver=SQL Server;Server=192.168.1.250;Uid=cwnew;pwd=sv;database=AIS20050914072538")
CLOSE TABLES
USE prg
SCAN FOR cfm ='y'
    m.prg=prg
    m.name=name
    ?m.name
    ?m.prg
    ndd=SQLEXEC(ncon, m.prg,'X')
ENDSCAN
2014-06-29 17:47
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:10 
    ?m.name
    ?m.prg
结果是什么?
2014-06-29 17:55
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11786
专家分:43421
注 册:2006-5-13
收藏
得分:10 
尽量避免用保留字作变量名!

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2014-06-29 18:01
hyz00001
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:168
专家分:137
注 册:2012-10-5
收藏
得分:0 
以下是引用tlliqi在2014-6-29 17:55:45的发言:

    ?m.name
    ?m.prg
结果是什么?




这两个是我自己检测用的,只是需要知道哪些已经编辑在案的sql代码已经运行。
?m.name 显示的是prg表中name字段,也就是需要保存的文件名。
?m.prg  显示的是prg表中prg字段,也就是需要执行的sql代码。


以下是引用hu9jj在2014-6-29 18:01:37的发言:

尽量避免用保留字作变量名!


我换一个名字之后还是不行。

[ 本帖最后由 hyz00001 于 2014-6-30 09:03 编辑 ]
2014-06-30 08:36
qingfameng
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:35
帖 子:964
专家分:3019
注 册:2010-2-6
收藏
得分:10 
楼主在2楼的程序段应该没有问题。发生问题的地方,像是在 prg 字段中的 sql 语句本身。楼主可以先用几条简单的 sql语句,写在 prg 字段内试试,成功后再写入复杂语句,逐渐检测问题的所在。
2014-06-30 23:38
hyz00001
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:168
专家分:137
注 册:2012-10-5
收藏
得分:0 
以下是引用qingfameng在2014-6-30 23:38:09的发言:

楼主在2楼的程序段应该没有问题。发生问题的地方,像是在 prg 字段中的 sql 语句本身。楼主可以先用几条简单的 sql语句,写在 prg 字段内试试,成功后再写入复杂语句,逐渐检测问题的所在。

prg是备注型字段,这个是经过在sql里面逐渐测试过的,没有问题,而且prg运行所产生的x临时表也没有问题,问题就在于不能将临时表按照我给它定义的名字name进行保存。
在select * from x into table m.name,这个过程中出现错误,直接保存的表名字就是“m.name”而不是m.name在该行所代表的po_a。
2014-07-01 13:38
sash
Rank: 4
等 级:业余侠客
威 望:6
帖 子:64
专家分:245
注 册:2014-4-25
收藏
得分:60 
楼主:以下是我按照你的思路,所写的一段语句,达到了你的要求:
CREATE CURSOR prg (prg M(8,0),name C(10,0),cfm C(1,0))
INSERT INTO prg(prg,name,cfm) VALUES ("select * from authors","authors","y")
INSERT INTO prg(prg,name,cfm) VALUES ("select * from jobs","jobs","y")
CLEAR
nCon=SQLSTRINGCONNECT("driver=SQL Server;Server=.;Uid=sa;pwd=;database=pubs")
SELECT prg
SCAN FOR cfm ='y'
    m.prg=ALLTRIM(prg)
    m.name=ALLTRIM(name)
    ?m.name
    ?m.prg
    ndd=SQLEXEC(nCon,m.prg,m.name)
ENDSCAN
请你看看,你的做法不成功的最主要原因出在哪里

  我实在猜不出你为什么要这么做?除非特殊需要,一般程序是不能这么写的.再有如非特别需要.尽量不要使用全局变量!
搞不好出了错都找不到原因.
2014-07-01 18:14
qingfameng
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:35
帖 子:964
专家分:3019
注 册:2010-2-6
收藏
得分:10 
楼主在循环段中,没写出保存临时表名的语句,可能是宏代换弄得不合适吧?既然‘能够’生成临时表,表名本身是个字串,先把它赋给一个参数,保存参数应该是可以的吧。
2014-07-02 01:23
hyz00001
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:168
专家分:137
注 册:2012-10-5
收藏
得分:0 
以下是引用sash在2014-7-1 18:14:11的发言:

楼主:以下是我按照你的思路,所写的一段语句,达到了你的要求:
CREATE CURSOR prg (prg M(8,0),name C(10,0),cfm C(1,0))
INSERT INTO prg(prg,name,cfm) VALUES ("select * from authors","authors","y")
INSERT INTO prg(prg,name,cfm) VALUES ("select * from jobs","jobs","y")
CLEAR
nCon=SQLSTRINGCONNECT("driver=SQL Server;Server=.;Uid=sa;pwd=;database=pubs")
SELECT prg
SCAN FOR cfm ='y'
    m.prg=ALLTRIM(prg)
    m.name=ALLTRIM(name)
    ?m.name
    ?m.prg
    ndd=SQLEXEC(nCon,m.prg,m.name)
ENDSCAN
请你看看,你的做法不成功的最主要原因出在哪里

  我实在猜不出你为什么要这么做?除非特殊需要,一般程序是不能这么写的.再有如非特别需要.尽量不要使用全局变量!
搞不好出了错都找不到原因.



你好 ,按照 你的 方法 问题迎刃而解,谢谢 。
现在 有 另外 一个 问题 在 获取之后 发现 有些事 备注型字段,显示的是 Memo,如果 让这些值显示为正常的内容 。谢谢 。
此问题我将另外 开 一个 百分英雄帖,请 帮忙过来看看,谢谢 。
2014-07-02 09:19
快速回复:vfp 链接 sql 代码查询并保存为 vfp 表。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016535 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved