Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 多个表的绑定按钮_Sql_Vb.net_Visual Studio 2010_Ms Access - Fatal编程技术网

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

我正在设计一个windows用户窗体。您可以看到表单,问题是大多数文本框从未填充数据。我试图使用表单顶部的按钮来“浏览”数据库并添加、修改和删除记录

我似乎没有正确的SQL查询来从不同的表中获取所有数据,以便我的
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]表

不是一个