以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  请教整表后台填充思路。(新问题)老师们来。  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=4929)

--  作者:菜鸟foxtable
--  发布时间:2009/11/9 19:07:00
--  请教整表后台填充思路。(新问题)老师们来。

项目采用SQL数据库。

表A满足条件的行从后台写入表B,采用何种思路比较合适?

这个操作每天执行的比较频繁,而且表B不允许直接编辑,因为涉及到计价,要求准确性较高。感觉用Fillter不太可靠。

[此贴子已经被作者于2009-12-24 2:30:43编辑过]

--  作者:kylin
--  发布时间:2009/11/9 19:15:00
--  
表B的表属性设为不可编辑

Dim drs As List(Of DataRow)
drs = DataTables("表A").Select("[产品] = \'PD01\' And [日期]= #1/4/1999#","数量 DESC")
For Each
dr As Datarow In drs
  
Dim ndr As DataRow = DataTables("表B").AddNew()
   ndr("第一列") = dr("对应列")
 .....
Next
DataTables("表B").Save()
供你参考
[此贴子已经被作者于2009-11-9 19:16:34编辑过]

--  作者:菜鸟foxtable
--  发布时间:2009/11/9 19:19:00
--  

K兄,这是一个办法,我也考虑过,有没有更好的?图片点击可在新窗口打开查看


--  作者:lxl
--  发布时间:2009/11/10 23:40:00
--  
用SQLCommand对象:

SET IDENTITY_INSERT
表B ON
INSERT INTO  表B ([_Identify],[其他列])     SELECT * FROM  表A WHERE  条件
Set Identity_Insert 表B OFF

如果表B没有自动增量列的话,第一行和第三行的SET可以不要

--  作者:菜鸟foxtable
--  发布时间:2009/11/11 7:48:00
--  
以下是引用lxl在2009-11-10 23:40:00的发言:
用SQLCommand对象:

SET IDENTITY_INSERT
表B ON
INSERT INTO  表B ([_Identify],[其他列])     SELECT * FROM  表A WHERE  条件
Set Identity_Insert 表B OFF

如果表B没有自动增量列的话,第一行和第三行的SET可以不要
L版这个我明白,我需要的是一个思路,不是方法。。。。
--  作者:lxl
--  发布时间:2009/11/11 9:27:00
--  

我是这个意思:
表A加一个字段post 默认为0

每次只要执行一次: INSERT INTO  表B (字段列表)     SELECT (对应字段列表) FROM  表A WHERE  post = 0 And 其他条件

就可以把表A的满足要求而且没有传送过的字段 插入到表B。不需要每条记录都INSERT INTO  
然后修改表A 的post字段 为1 ,防止重复插入。(虽然有主键约束,但是这样可以防止报错)


--  作者:菜鸟foxtable
--  发布时间:2009/12/23 15:17:00
--  
LXL老师,表A数据行较多时,如何判断后台SQLCommand已经完成执行?

用存储过程如何?
--  作者:lxl
--  发布时间:2009/12/23 19:02:00
--  

不用也可以实现。

ExecuteNonQuery

用于执行不返回任何值的SQL命令,例如DELETE和UPDATE命令。
该方法会返回一个整数,表示受影响的行数。

示例一

Dim cmd As New SQLCommand
Dim
Count AS Integer
cmd
.CommandText = "………………"
Count= cmd.ExecuteNonQuery()
Messagebox.Show(
"总共填充" & Count & "行!")


执行完SQL命令,代码才会往下走
--  作者:菜鸟foxtable
--  发布时间:2009/12/23 20:52:00
--  
以下是引用lxl在2009-12-23 19:02:00的发言:

不用也可以实现。

ExecuteNonQuery

用于执行不返回任何值的SQL命令,例如DELETE和UPDATE命令。
该方法会返回一个整数,表示受影响的行数。

示例一

Dim cmd As New SQLCommand
Dim
Count AS Integer
cmd
.CommandText = "………………"
Count= cmd.ExecuteNonQuery()
Messagebox.Show(
"总共填充" & Count & "行!")


执行完SQL命令,代码才会往下走

谢谢L版,学习了。


--  作者:菜鸟foxtable
--  发布时间:2009/12/24 1:53:00
--  
以下是引用lxl在2009-11-10 23:40:00的发言:
用SQLCommand对象:

SET IDENTITY_INSERT
表B ON
INSERT INTO  表B ([_Identify],[其他列])     SELECT * FROM  表A WHERE  条件
Set Identity_Insert 表B OFF

如果表B没有自动增量列的话,第一行和第三行的SET可以不要

表B是有自动增量列的,但我没用第一行和第三行也能执行。。。。。

原本手工录入时不会出错的动态关联,现在却在填充后出错,是哪里出问题了?


图片点击可在新窗口打开查看此主题相关图片如下:qq截图未命名.png
图片点击可在新窗口打开查看
[此贴子已经被作者于2009-12-24 1:53:56编辑过]