Sql 多个表的绑定按钮
我正在设计一个windows用户窗体。您可以看到表单,问题是大多数文本框从未填充数据。我试图使用表单顶部的按钮来“浏览”数据库并添加、修改和删除记录 我似乎没有正确的SQL查询来从不同的表中获取所有数据,以便我的Sql 多个表的绑定按钮,sql,vb.net,visual-studio-2010,ms-access,Sql,Vb.net,Visual Studio 2010,Ms Access,我正在设计一个windows用户窗体。您可以看到表单,问题是大多数文本框从未填充数据。我试图使用表单顶部的按钮来“浏览”数据库并添加、修改和删除记录 我似乎没有正确的SQL查询来从不同的表中获取所有数据,以便我的DataAdapter可以将其发送到表单。我正在寻找帮助,以生成正确的查询并将数据传递给表单。您可以看到数据库的组成。如果有人能帮我,那就太棒了 表格的代码如下所示 Imports System.Data.OleDb Public Class DeviceEditorForm Dim
DataAdapter
可以将其发送到表单。我正在寻找帮助,以生成正确的查询并将数据传递给表单。您可以看到数据库的组成。如果有人能帮我,那就太棒了
表格的代码如下所示
Imports System.Data.OleDb
Public Class DeviceEditorForm
Dim tabletDataAdapter As OleDbDataAdapter
Dim tabletDataSet As DataSet
Private Sub DeviceEditorForm_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Me.DeviceTableAdapter.Fill(Me.BIT_3444_DatabaseDataSet.Device)
Dim sqlStatement As String = "select * from Device"
Dim tabletConnectionStr As String = "provider=microsoft.ace.oledb.12.0;data source=" & Application.StartupPath & "\BIT 3444 Database.accdb"
tabletDataAdapter = New OleDbDataAdapter(sqlStatement, tabletConnectionStr)
tabletDataSet = New DataSet
tabletDataAdapter.Fill(tabletDataSet, "Device")
DeviceBindingSource.DataSource = tabletDataSet.Tables(0)
BindingNavigator1.BindingSource = DeviceBindingSource
Dim batterySizeBinding As New Binding("text", DeviceBindingSource, "Battery_Size")
BatterySizeTextBox.DataBindings.Add(batterySizeBinding)
Dim IDBinding As New Binding("text", DeviceBindingSource, "ID")
DeviceIdTextBox.DataBindings.Add(IDBinding)
Dim nameBinding As New Binding("text", DeviceBindingSource, "Device_Name")
DeviceNameTextBox.DataBindings.Add(nameBinding)
Dim manufacturerBinding As New Binding("text", DeviceBindingSource, "Manufacturer")
ManufacturerTextBox.DataBindings.Add(manufacturerBinding)
Dim modelYearBinding As New Binding("text", DeviceBindingSource, "Model_Year")
ModelYearTextBox.DataBindings.Add(modelYearBinding)
Dim osBinding As New Binding("text", DeviceBindingSource, "Operating_System")
OperatingSystemTextBox.DataBindings.Add(osBinding)
Dim osVersionBinding As New Binding("text", DeviceBindingSource, "Operating_System_Version")
OsVersionTextBox.DataBindings.Add(osVersionBinding)
Dim priceBinding As New Binding("text", DeviceBindingSource, "Price")
PriceTextBox.DataBindings.Add(priceBinding)
End Sub
Private Sub ToolStripButton1_Click(sender As System.Object, e As System.EventArgs) Handles ToolStripButton1.Click
DeviceBindingSource.EndEdit()
Dim tabletCommandBuilder As New OleDbCommandBuilder(tabletDataAdapter)
tabletDataAdapter.InsertCommand = tabletCommandBuilder.GetInsertCommand()
tabletDataAdapter.DeleteCommand = tabletCommandBuilder.GetDeleteCommand()
tabletDataAdapter.UpdateCommand = tabletCommandBuilder.GetUpdateCommand()
Dim numOfRecords As Integer = tabletDataAdapter.Update(tabletDataSet, "Device")
MsgBox(numOfRecords & " records have been updated.")
End Sub
End Class
虽然您已经从表单设计和数据绑定的角度提出了问题,但是您需要先返回并对数据模型进行一些更改。您的数据模型存在一些基本问题,这些问题将使您难以构建应用程序。一旦解决了这些问题,您就会发现构建表单和操作数据要容易得多 目前除[Device]外的所有表都有一个[Device_ID]外键,该外键指向[Device]表中的相关记录。这使得[Device]表成为父表,而另一个表成为子表,这种关系的本质是一个母亲(父表)可以有多个孩子,但一个孩子只能有一个母亲。在您的情况下,这种关系在您的表中并不总是有意义的 问题:[物理规格]作为子表 将[物理规格]作为子表是没有意义的。属性[颜色]、[重量]等应在[设备]表中,因为每个设备只能有一个属性值(例如,一个设备只能有一个[重量])。此外,保存[颜色]、[高度]、[宽度]、[重量]的所有可能组合。。。在一个单独的参考表中,可能与其他设备重复使用并没有提供任何实际好处 您应该考虑将[Connectivity]和[Storage]属性也合并到[Device]表中是否有意义 问题:[屏幕]作为子表 当[Screen]是子表时,您必须为每个[Device]维护单独的[Screen]记录,如果多个设备使用同一屏幕,则您必须在[Screen]表中复制该信息。这是倒退。实际上,单个屏幕(OEM部分)可以被许多设备使用,但任何给定的设备都只有一个屏幕。当前数据模型的设置方式正好相反:设备(父设备)可以有多个屏幕(子设备),但屏幕记录(子设备)只能有一个父记录 [Device]表不应在[Screen]中具有[Device_ID]外键,而应具有指向相应[Screen]记录的[Screen_ID]外键。这允许多个设备引用相同的[Screen]记录,并且每个设备将只有一个这样的引用(即,每个设备将只有一个屏幕) 我在这里特别提到了[Screen],但同样的道理也适用于[Battery]和[Camera]表 没问题:[图片]和[评论]作为子表
正如您为这些表指定的复数名称所暗示的,将它们作为子表是有意义的,因为您可以为给定的产品提供多个图片或评论,并且这些图片或评论中的每一个都指向一个设备。尽管您已经在表单设计和数据绑定方面提出了问题,您首先需要返回并对数据模型进行一些更改。您的数据模型存在一些基本问题,这些问题将使您难以构建应用程序。一旦解决了这些问题,您就会发现构建表单和操作数据要容易得多 目前除[Device]外的所有表都有一个[Device_ID]外键,该外键指向[Device]表中的相关记录。这使得[Device]表成为父表,而另一个表成为子表,这种关系的本质是一个母亲(父表)可以有多个孩子,但一个孩子只能有一个母亲。在您的情况下,这种关系在您的表中并不总是有意义的 问题:[物理规格]作为子表 将[物理规格]作为子表是没有意义的。属性[颜色]、[重量]等应在[设备]表中,因为每个设备只能有一个属性值(例如,一个设备只能有一个[重量])。此外,保存[颜色]、[高度]、[宽度]、[重量]的所有可能组合。。。在一个单独的参考表中,可能与其他设备重复使用并没有提供任何实际好处 您应该考虑将[Connectivity]和[Storage]属性也合并到[Device]表中是否有意义 问题:[屏幕]作为子表 当[Screen]是子表时,您必须为每个[Device]维护单独的[Screen]记录,如果多个设备使用同一屏幕,则您必须在[Screen]表中复制该信息。这是倒退。实际上,单个屏幕(OEM部分)可以被许多设备使用,但任何给定的设备都只有一个屏幕。当前数据模型的设置方式正好相反:设备(父设备)可以有多个屏幕(子设备),但屏幕记录(子设备)只能有一个父记录 [Device]表不应在[Screen]中具有[Device_ID]外键,而应具有指向相应[Screen]记录的[Screen_ID]外键。这允许多个设备引用相同的[Screen]记录,并且每个设备将只有一个这样的引用(即,每个设备将只有一个屏幕) 我在这里特别提到了[Screen],但同样的道理也适用于[Battery]和[Camera]表 不是一个