以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  从数据库表复制一列的内容到另一新建表的同名列的问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=47871)

--  作者:fubblyc
--  发布时间:2014/3/18 22:18:00
--  从数据库表复制一列的内容到另一新建表的同名列的问题

各位老师好:

 

我想实现从数据库里的一个表的一个列复制到新建的一个表的一个同名列里,试了以下几种方式:

 

1.filler填充,

dim f As New Filler
f.SourceTable = DataTables("订单") \'指定数据来源
f.SourceCols = "产品,客户" \'指定数据来源列
f.DataTable = DataTables("统计") \'指定数据接收表
f.DataCols = "产品,客户" \'指定数据接收列
f.Fill() \'填充数据

发现 只能填充已经加载了的数据,数据库里的数据没有加载

 

2.直接编码:

dim r as row = Tables("订单").Current
dim  dr As DataRow  = DataTables("统计表").Addnew
dr("产品") = r("产品")
dr("客户") = r("客户")

 

也是只有加载了的数据。

 

3.

假定有一个产品表和一个库存表,两个表都有产品编号、产品名称、产品规格三列,但是没有建立关联,我们希望:

1、在产品表增加一个产品,库存表对应也增加此产品。
2、在产品表删除一个产品,库存表对应也删除此产品。
3、在产品表更改某产品的产品编号、产品名称或产品规格后,库存表也能同步修改。

设计步骤

1、将产品表的DataColChanged事件代码设置为

也是只有加载了的数据

 

4.

Dim Vals As List(of String())
Vals = DataTables("来源表").GetValues("产品|客户")
For
i As Integer = 0 To Vals.Count - 1
    Dim
dr As DataRow = DataTables("接收表").AddNew()
    dr(
"产品") = Vals(i)(0)
    dr(
"客户") = Vals(i)(1)
Next

 

GetValues("产品|客户")
可以用SQLGetValues("产品|客户"
)可以实现数据库里的数据填充

但是却不能排除已有内容!

 

想过  如果加上不能输入重复值,也许有效:

 

Select Case e.DataCol.name
    Case
"型号","规格"
       
Dim dr As DataRow = e.DataRow
       
If dr.IsNull("型号") = False AndAlso dr.IsNull("规格") = False Then
            If e.DataTable.Compute("Count([_Identify])","型号 = \'" & dr("型号") & "\' And 规格 = \'" & dr("规格") & "\'") > 1 Then
                MessageBox.Show(
"已经存在相同型号和规格的行!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
                e.
DataRow(e.DataCol.Name) = e.OldValue \'取消输入
           
End If
        End
If
End
Select

 

但是执行填充的计划管理却报错。

 

 

 

哎,有木有什么办法可以实现呢?


--  作者:有点酸
--  发布时间:2014/3/18 22:35:00
--  
Dim Vals As List(of String())
Vals = DataTables("来源表").GetValues("产品|客户")
For i As Integer = 0 To Vals.Count - 1
    if DataTables("接收表").Find("产品 = \'" & Vals(i)(0) & "\' And 客户 = \'" & Vals(i)(1) & "\'") Is Nothing then
        Dim dr As DataRow = DataTables("接收表").AddNew()
        dr("产品") = Vals(i)(0)
        dr("客户") = Vals(i)(1)
    end if
Next
 
怎么判断不存在,你应该会的。

--  作者:fubblyc
--  发布时间:2014/3/19 21:17:00
--  

恩恩。现在会了。  if DataTables("接收表").Find("产品 = \'" & Vals(i)(0) & "\' And 客户 = \'" & Vals(i)(1) & "\'") Is Nothing then  我改为 SQLFind  就可以排除接收表数据库表里已有的内容。

 

谢谢有点酸老师!!