我很难找到一张有关系的桌子。问题出现了,我有一个具有许多关系的复杂查询,当我问这个问题时,他们帮助我提高了查询的效率和速度,但是当我将它放在我的基于 VB.NET 的程序中时,我得到了以下错误:
No se pudieron habilitar las restricciones. Una o varias filas contienen valores que infringen las restricciones NON-NULL, UNIQUE o FOREIGN-KEY.
系统必须通过一个datagridview在屏幕上显示所有的产品,简单的话执行起来很复杂。
我为每一件事都做了类,因为系统变得越来越复杂,我把所有东西都分成了类。
datagridview 使用了一个 bindingsource,如下:
Public datosdeproductos As New BindingSource
Private listadodeproducto As New DataSet
datosdeproductos.DataSource = listadodeproducto
Using conexion As New MySqlConnection(conexionstring)
conexion.Open()
If listadodeproducto Is Nothing Then
listadodeproducto = New DataSet()
listadodeproducto.BeginInit()
End If
dim consulta as string = "SELECT pr.id, pr.nombre as Nombre, cp.nombre AS Categoria, pv.nombre AS Proveedor, cantidad as Cantidad, stockminimo AS 'Stock Mínimo', (p.precio) AS Precio, (p.precio2) AS 'Precio %', (p.costo) AS 'P. costo', (p.ganancia) AS Ganancia, ultimamodificacion AS 'Fecha última modificación', cod.codigobarras AS 'Código de Barras' FROM productos pr INNER JOIN precios p ON p.idproducto = pr.id INNER JOIN proveedores pv ON pv.id = pr.proveedor INNER JOIN categoriadeproductos cp ON cp.id = pr.categoria INNER JOIN codigobarras cod ON cod.idproducto = pr.id WHERE p.numerodepreciodelista = 0 AND pr.eliminado = 0;"
Using adaptador As New MySqlDataAdapter(consulta, conexion)
adaptador.Fill(listadodeproducto, "listadodeproductos")
End using
conexion.close
End using
planillalistadeproductos.datasource = listadodeproducto '
planillalistadeproductos es el datagridview
planillalistadeproductos.DataMember = "listadodeproductos"
我正在使用的查询如下:
SELECT
pr.id,
pr.nombre as Nombre,
cp.nombre AS Categoria,
pv.nombre AS Proveedor,
cantidad as Cantidad,
stockminimo AS 'Stock Mínimo',
(p.precio) AS Precio,
(p.precio2) AS 'Precio %',
(p.costo) AS 'P. costo',
(p.ganancia) AS Ganancia,
ultimamodificacion AS 'Fecha última modificación',
cod.codigobarras AS 'Código de Barras'
FROM productos pr
INNER JOIN precios p ON p.idproducto = pr.id
INNER JOIN proveedores pv ON pv.id = pr.proveedor
INNER JOIN categoriadeproductos cp ON cp.id = pr.categoria
INNER JOIN codigobarras cod ON cod.idproducto = pr.id -- Probablemente devuelva mas de un resultados si tenes mas de un Codigo de Barra para un solo producto
WHERE
p.numerodepreciodelista = 0 AND pr.eliminado = 0;
这个查询是功能性的,我的意思是我在数据库服务器控制台中运行它,它回答正确,没有错误,很快,这个查询就是另一个问题的答案,问题的链接在下面。
数据集目前还没有加载任何表,但是加载这个表后,我需要添加更多,所以我不能使用数据表,我必须使用 if 或 if 数据集。
如您所见,在代码中,填写数据集时,“listadodeproducto”给出了错误(无法启用...),我已经尝试了所有方法,但找不到解决方案。
所有查询详细信息都在这个问题中:stackoverflow
从已经非常感谢
如果发生在某人身上!我通过以下方式解决了这个问题
简单来说,我把表去掉,虚拟查询,最重要的是,我在引用的相关表的每个标识符中都添加了KEY索引,结果很简单,查询更有效!感谢那些试图帮助我的人!