资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

vb点虐 关联数据表 vbnet连接数据库

一对多关联的数据库在VB.NET中如何新增记录

script type="text/javascript" src="" /script

创新互联-专业网站定制、快速模板网站建设、高性价比双柏网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式双柏网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖双柏地区。费用合理售后完善,十多年实体公司更值得信赖。

script type="text/javascript" src="" /script

有两个表order(orderid,ordername,totalprice), orderdetail(orderid,productid,productname,price) 已经建立一对多

关联(orderid). 用VB.NET建立一个窗体, 用于主表和明细表的数据录入及更新.

在窗体上增加两个sqldataadapter,分别选择order和orderdetail表, 并生成数据集,在DATASET中建立关联(orderid) 主表中:ORDERID,ORDERNAME 绑定在两个TEXTBOX文本框中,用于接受用户的输入,totalprice接受明细表中price

的汇总值.

明细表绑定到一个DATAGRID控件, datasource:dsorder; datamember:order.orderorderdetail建立的关联名称

问题: 在主表中新增一个记录,用户录入orderid和ordername后,进入明细表的录入,用户录入productid, productname, price后,提示 “明细orderID列不允许空值,要更正该值吗?” 是什么原因?

用于连接主表的明细orderID如果输入跟主表一样的orderID时提示“ForeignKeyconstraint 要求在交叉表中存在子键值。要更正该值吗?”

只有录入主表中的orderid和ordername后, 先更新主表数据源,才可以编辑更新明细表,这是为什么? 请问,有没有其他更好的方法, 实现主表和明细表的新增记录同时更新呢? 谢谢关照! 网友:方宇 回复:

附部分源代码:

Public Class fmOrders

Inherits System.Windows.Forms.Form

Dim WithEvents dtOrderDetails As New DataTable()

Dim BmOrders As BindingManagerBase

Dim BmOrderDetails As BindingManagerBase

Dim OrderDetailsHasChange As Boolean

Dim orderid As DataColumn

dim ordername as datacolumn

Dim SubTotal As DataColumn Private Sub bnFirst_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bnFirst.Click

BmOrders.Position = 0

End Sub

Private Sub bnPrior_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bnPrior.Click

BmOrders.Position -= 1

End Sub

Private Sub bnNext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bnNext.Click

BmOrders.Position += 1

End Sub

Private Sub bnLast_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bnLast.Click

BmOrders.Position = BmOrders.Count - 1

End Sub Private Sub bnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bnAdd.Click

Try

BmOrders.EndCurrentEdit()

BmOrders.AddNew()

Catch err As System.SystemException

MessageBox.Show(err.ToString)

End Try

End Sub

Private Sub bnLoad_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bnLoad.Click

FillData()

End Sub Private Sub bnUpdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bnUpdate.Click

Dim dsTestOrdersChange As DataSet BmOrderDetails.EndCurrentEdit()

BmOrders.EndCurrentEdit()

If Not dsTestOrders.HasChanges(DataRowState.Deleted) Then

Try

daOrders.Update(dsTestOrders, "Orders")

daOrderDetails.Update(dsTestOrders, "OrderDetails")

dsTestOrders.AcceptChanges()

Catch err As System.SystemException

dsTestOrders.RejectChanges()

MessageBox.Show(err.ToString)

Throw

End Try

Else

Try

daOrderDetails.Update(dsTestOrders, "OrderDetails")

daOrders.Update(dsTestOrders, "Orders")

dsTestOrders.AcceptChanges()

Catch err As System.SystemException

dsTestOrders.RejectChanges()

MessageBox.Show(err.ToString)

Throw

End Try

End If

End Sub Private Sub fmOrders_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

FillData()

dtOrderDetails = dsTestOrders.Tables("OrderDetails")

BmOrders = Me.BindingContext(dsTestOrders, "Orders")

BmOrderDetails = Me.BindingContext(dsTestOrders, "Orders.OrdersOrderDetails")

OrderDetailsHasChange = True

SubTotal = dsTestOrders.Tables("Orders").Columns("SubTotal")

SubTotal.DefaultValue = 0

Price = dsTestOrders.Tables("OrderDetails").Columns("Price")

Price.DefaultValue = 0

End Sub Private Sub FillData()

dsTestOrders.EnforceConstraints = False

daOrders.Fill(dsTestOrders)

daOrderDetails.Fill(dsTestOrders)

dsTestOrders.EnforceConstraints = True

End Sub

Private Sub dtOrderDetails_ColumnChanged(ByVal sender As Object, ByVal e As System.Data.DataColumnChangeEventArgs) _

Handles dtOrderDetails.ColumnChanged Dim drOrders As DataRow

Dim drOrderDetails As DataRow

Dim iSubTotal As Integer

Try

If OrderDetailsHasChange Then

OrderDetailsHasChange = False

drOrders = dsTestOrders.Tables("Orders").Rows(BmOrders.Position)

iSubTotal = 0

For Each drOrderDetails In drOrders.GetChildRows("OrdersOrderDetails")

iSubTotal = iSubTotal + drOrderDetails("price")

Next

drOrders.BeginEdit()

drOrders("SubTotal") = iSubTotal

drOrders.EndEdit()

End If

Finally

OrderDetailsHasChange = True

End Try

End Sub Private Sub bndelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bndelete.Click

If BmOrders.Count 0 Then

BmOrders.RemoveAt(BmOrders.Position)

End If

End Sub Private Sub bncancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bncancel.Click

BmOrders.CancelCurrentEdit() End Sub

End Class script type="text/javascript" src="" /script

script type="text/javascript" src="" /script

vb点虐 如何与excel建立连接,并从里面查询并读取数据?

1.新建一张表格,在表格中导入学生的成绩表,如图所示,将建立一个按钮,通过它来实现查找。

2.单击菜单栏中的“开发工具”——插入——表单控件——按钮,在出现的十字箭头上拖住画出一个按钮,如图所示。

3.在弹出的查找红对话框中选择“录制”,在弹出的“录制新宏”对话框中,修改宏名称为“查找”,单击确定。

4. 单击“开发工具”——查看代码,打开VBA编辑器,如图所示。

5.现在输入代码:

Sub 查找()

Dim jieguo As String, p As String, q As String

Dim c As Range

jieguo = Application.InputBox(prompt:="请输入要查找的值:", Title:="查找", Type:=2)

If jieguo = "False" Or jieguo = "" Then Exit Sub

Application.ScreenUpdating = False

Application.DisplayAlerts = False

With ActiveSheet.Cells

  Set c = .Find(jieguo, , , xlWhole, xlByColumns, xlNext, False)

  If Not c Is Nothing Then

      p = c.Address

      Do

          c.Interior.ColorIndex = 4

          q = q c.Address vbCrLf

          Set c = .FindNext(c)

      Loop While Not c Is Nothing And c.Address p

  End If

End With

MsgBox "查找数据在以下单元格中:" vbCrLf vbCrLf _

  q, vbInformation + vbOKOnly, "查找结果"

Application.ScreenUpdating = True

Application.DisplayAlerts = True

End Sub

6.现在回到EXCEL表格,右击按钮,选择“编辑文字”,修改按钮名称为“查找按钮”。

7. 现在单击查找按钮,出现对话框“请输入要查找的值”,在方框中输入“男”,单击确定,出现对话框“查找数据在一下单元格中”,单击确定,对应单元格就变成了亮色。

VB.NET中连接到数据库怎样关联到表啊?

要建立一个数据集,在把控件上的输入值赋值到数据集相应的字段就可以了


分享文章:vb点虐 关联数据表 vbnet连接数据库
分享链接:http://cdkjz.cn/article/ddisdhp.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220