我不能插入行主 - 详细信息。
private string strSelectComprobante()
{
string strSQL;
strSQL = " SELECT ";
strSQL += " TbComprobante.NroCpte,";
strSQL += " TbComprobante.TipoCpte,";
strSQL += " TbComprobante.Fecha,"; //0
strSQL += " TbComprobante.Cliente,"; //1
strSQL += " TbComprobante.Usuario,";
strSQL += " TbComprobante.Descripcion";
strSQL += " FROM";
strSQL += " TbComprobante";
strSQL += " WHERE";
strSQL += " TbComprobante.TipoCpte = 'S'";
if (!blnTodos)
{
strSQL += " AND TbComprobante.NroCpte = 0 ";
}
return strSQL;
}
private string strUpdateComprobante()
{
string strSQL;
strSQL = " UPDATE TbComprobante SET ";
strSQL += " TbComprobante.Fecha = ?Fecha,"; //0
strSQL += " TbComprobante.Cliente = ?Cliente,"; //1
strSQL += " TbComprobante.Usuario = ?Usuario,";
strSQL += " TbComprobante.Descripcion = ?Descripcion";
strSQL += " WHERE";
strSQL += " TbComprobante.NroCpte = ?NroCpte";
strSQL += " AND TbComprobante.TipoCpte = 'S'";
return strSQL;
}
private string strInsertComprobante()
{
string strSQL;
strSQL = " INSERT INTO TbComprobante ( ";
strSQL += " NroCpte,"; //0
strSQL += " TipoCpte,";
strSQL += " Fecha,"; //2
strSQL += " Cliente,"; //3
strSQL += " Usuario,";
strSQL += " Descripcion)";
strSQL += " VALUES(";
strSQL += " ?NroCpte,"; //0
strSQL += " ?TipoCpte,";
strSQL += " ?Fecha,"; //2
strSQL += " ?Cliente,"; //3
strSQL += " ?Usuario,";
strSQL += " ?Descripcion)";
return strSQL;
}
private string strSelectDetalle()
{
string strSQL;
strSQL = " SELECT ";
strSQL += " TbDetalle.NroCpte,"; //0
strSQL += " TbDetalle.NroDetalle,"; //1
strSQL += " TbDetalle.TipoCpte,";
strSQL += " TbDetalle.Producto,"; //2
strSQL += " TbProducto.Denominacion,";
strSQL += " TbProducto.Unidad,";
strSQL += " TbDetalle.CostoUnt,"; //5
strSQL += " TbProducto.PrecioUnt,";
strSQL += " TbDetalle.Cantidad,";
strSQL += " TbDetalle.Descuento,";
strSQL += " TbDetalle.Monto";
strSQL += " FROM";
strSQL += " TbDetalle";
strSQL += " INNER JOIN TbProducto ON";
strSQL += " TbDetalle.Producto = TbProducto.Producto";
strSQL += " WHERE";
strSQL += " TbDetalle.TipoCpte = 'S'";
if (!blnTodos)
{
strSQL += " AND TbDetalle.NroCpte = 0 ";
}
strSQL += " ORDER BY";
strSQL += " TbDetalle.Producto";
return strSQL;
}
private string strUpdateDetalle()
{
string strSQL;
strSQL = " UPDATE TbDetalle SET ";
strSQL += " TbDetalle.TipoCpte = 'S',";
strSQL += " TbDetalle.CostoUnt = ?CostoUnt,"; //3
strSQL += " TbDetalle.PrecioUnt = ?PrecioUnt,";
strSQL += " TbDetalle.Cantidad = ?Cantidad,";
strSQL += " TbDetalle.Descuento = ?Descuento,";
strSQL += " TbDetalle.Monto = ?Monto";
strSQL += " WHERE";
strSQL += " TbDetalle.NroCpte = ?NroCpte";
strSQL += " AND TbDetalle.TipoCpte = 'S'";
strSQL += " AND TbDetalle.NroDetalle = ?NroDetalle";
return strSQL;
}
private string strDeleteDetalle()
{
string strSQL;
strSQL = " DELETE FROM TbDetalle ";
strSQL += " WHERE";
strSQL += " TbDetalle.NroCpte = ?NroCpte";
strSQL += " AND TbDetalle.TipoCpte = 'S'";
strSQL += " AND TbDetalle.NroDetalle = ?NroDetalle";
return strSQL;
}
private string strInsertDetalle()
{
string strSQL;
strSQL = " INSERT INTO TbDetalle ( ";
strSQL += " TbDetalle.NroCpte,"; //0
strSQL += " TbDetalle.NroDetalle,";
strSQL += " TbDetalle.TipoCpte,";
strSQL += " TbDetalle.Producto,"; //2
strSQL += " TbDetalle.CostoUnt,"; //5
strSQL += " TbDetalle.PrecioUnt,";
strSQL += " TbDetalle.Cantidad,";
strSQL += " TbDetalle.Descuento,";
strSQL += " TbDetalle.Monto)";
strSQL += " VALUES(";
strSQL += " ?NroCpte,";
strSQL += " ?NroDetalle,";
strSQL += " 'S',";
strSQL += " ?Producto,";
strSQL += " ?CostoUnt,";
strSQL += " ?PrecioUnt,";
strSQL += " ?Cantidad,";
strSQL += " ?Descuento,";
strSQL += " ?Monto)";
return strSQL;
}
private int GrabarNroCpte(long intNroCpte)
{
string strSQL;
MySqlCommand MyCmd;
int intRowsAfects = 0;
strSQL = " UPDATE TbNroCpte";
strSQL += " SET NroCpte = " + intNroCpte;
strSQL += " WHERE TipoCpte = 'S'";
try
{
MyCmd = new MySqlCommand();
MyCmd.Connection = Modulos.ClsGlobal.MyNetCnx;
MyCmd.CommandText = strSQL;
intRowsAfects = MyCmd.ExecuteNonQuery();
return intRowsAfects;
}
catch (MySqlException ex)
{
MessageBox.Show(ex.Message, "GrabarNroCpte", MessageBoxButtons.OK, MessageBoxIcon.Information);
return intRowsAfects;
}
}
private int GrabarComprobante(long intNroCpte)
{
int intRowsAfects = 0;
try
{
//Actualiza comprobante
CMDComprobante = new MySqlCommand(strUpdateComprobante(), Modulos.ClsGlobal.MyNetCnx);
CMDComprobante.Parameters.Add("?Fecha", MySqlDbType.Datetime);
CMDComprobante.Parameters["?Fecha"].Value = DtFecha.Value;
CMDComprobante.Parameters.Add("?Cliente", MySqlDbType.VarChar, 50, "Cliente");
CMDComprobante.Parameters.Add("?Usuario", MySqlDbType.VarChar, 5, "Usuario");
CMDComprobante.Parameters.Add("?Descripcion", MySqlDbType.VarChar, 100, "Descripcion");
CMDComprobante.Parameters.Add("?NroCpte", MySqlDbType.Int32, 4, "NroCpte").SourceVersion = DataRowVersion.Original;
SDAComprobante.UpdateCommand = CMDComprobante;
//Inserta comprobante
CMDComprobante = new MySqlCommand(strInsertComprobante(), Modulos.ClsGlobal.MyNetCnx);
CMDComprobante.Parameters.Add("?Fecha", MySqlDbType.Datetime);
CMDComprobante.Parameters["?Fecha"].Value = DtFecha.Value;
CMDComprobante.Parameters.Add("?Cliente", MySqlDbType.VarChar, 50, "Cliente");
CMDComprobante.Parameters.Add("?Usuario", MySqlDbType.VarChar, 5, "Usuario");
CMDComprobante.Parameters.Add("?Descripcion", MySqlDbType.VarChar, 100, "Descripcion");
CMDComprobante.Parameters.Add("?NroCpte", MySqlDbType.Int32, 4);
CMDComprobante.Parameters["?NroCpte"].Value = intNroCpte;
SDAComprobante.InsertCommand = CMDComprobante;
DataTable UpdateComprobante;
UpdateComprobante = dsData.Tables["Comprobante"].GetChanges(DataRowState.Modified);
if (UpdateComprobante != null)
{
intRowsAfects = SDAComprobante.Update(UpdateComprobante);
dsData.Tables["Comprobante"].AcceptChanges();
}
DataTable InsertComprobante;
InsertComprobante = dsData.Tables["Comprobante"].GetChanges(DataRowState.Added);
if (InsertComprobante != null)
{
intRowsAfects = SDAComprobante.Update(InsertComprobante);
dsData.Tables["Comprobante"].AcceptChanges();
}
return intRowsAfects;
}
catch (MySqlException ex)
{
MessageBox.Show(ex.Message, "GrabarComprobante", MessageBoxButtons.OK, MessageBoxIcon.Information);
return intRowsAfects;
}
}
private int GrabarDetalle(long intNroCpte)
{
int intRowsAfects = 0;
try
{
//Actualiza Detalle
CMDDetalle = new MySqlCommand(strUpdateDetalle(), Modulos.ClsGlobal.MyNetCnx);
CMDDetalle.Parameters.Add("?NroDetalle", MySqlDbType.Int32, 4, "NroDetalle");
CMDDetalle.Parameters.Add("?Producto", MySqlDbType.VarChar, 10, "Producto");
CMDDetalle.Parameters.Add("?CostoUnt", MySqlDbType.Decimal, 7, "CostoUnt");
CMDDetalle.Parameters.Add("?PrecioUnt", MySqlDbType.Decimal, 2, "PrecioUnt");
CMDDetalle.Parameters.Add("?Cantidad", MySqlDbType.Int32, 4, "Cantidad");
CMDDetalle.Parameters.Add("?Descuento", MySqlDbType.Int32, 3, "Descuento");
CMDDetalle.Parameters.Add("?Monto", MySqlDbType.Decimal, 2, "Monto");
CMDDetalle.Parameters.Add("?NroCpte", MySqlDbType.Int32, 4, "NroCpte");
SDADetalle.UpdateCommand = CMDDetalle;
//Eliminar fila de Detalle
CMDDetalle = new MySqlCommand(strDeleteDetalle(), Modulos.ClsGlobal.MyNetCnx);
CMDDetalle.Parameters.Add("?NroCpte", MySqlDbType.Int32, 4, "NroCpte");
CMDDetalle.Parameters.Add("?NroDetalle", MySqlDbType.Int32, 4, "NroDetalle");
SDADetalle.DeleteCommand = CMDDetalle;
//Insertar fila en Detalle
CMDDetalle = new MySqlCommand(strInsertDetalle(), Modulos.ClsGlobal.MyNetCnx);
CMDDetalle.Parameters.Add("?NroCpte", MySqlDbType.Int32, 4);
CMDDetalle.Parameters["?NroCpte"].Value = intNroCpte;
CMDDetalle.Parameters.Add("?NroDetalle", MySqlDbType.Int32, 4,"NroDetalle");
CMDDetalle.Parameters.Add("?Producto", MySqlDbType.VarChar, 10, "Producto");
CMDDetalle.Parameters.Add("?CostoUnt", MySqlDbType.Decimal, 7, "CostoUnt");
CMDDetalle.Parameters.Add("?PrecioUnt", MySqlDbType.Decimal, 2, "PrecioUnt");
CMDDetalle.Parameters.Add("?Cantidad", MySqlDbType.Int32, 4, "Cantidad");
CMDDetalle.Parameters.Add("?Descuento", MySqlDbType.Int32, 3, "Descuento");
CMDDetalle.Parameters.Add("?Monto", MySqlDbType.Decimal, 2, "Monto");
SDADetalle.InsertCommand = CMDDetalle;
DataTable ChangeRecordsDetalle;
ChangeRecordsDetalle = dsData.Tables["Detalle"].GetChanges(DataRowState.Modified);
if (ChangeRecordsDetalle != null)
{
intRowsAfects = SDADetalle.Update(ChangeRecordsDetalle);
dsData.Tables["Detalle"].AcceptChanges();
}
DataTable DeleteRecordsDetalle;
DeleteRecordsDetalle = dsData.Tables["Detalle"].GetChanges(DataRowState.Deleted);
if (DeleteRecordsDetalle != null)
{
intRowsAfects = SDADetalle.Update(DeleteRecordsDetalle);
dsData.Tables["Detalle"].AcceptChanges();
}
DataTable InsertRecordsDetalle;
InsertRecordsDetalle = dsData.Tables["Detalle"].GetChanges(DataRowState.Added);
if (InsertRecordsDetalle != null)
{
intRowsAfects = SDADetalle.Update(InsertRecordsDetalle);
dsData.Tables["Detalle"].AcceptChanges();
}
return intRowsAfects;
}
catch (MySqlException ex)
{
MessageBox.Show(ex.Message, "GrabarDetalle", MessageBoxButtons.OK, MessageBoxIcon.Information);
return intRowsAfects;
}
}
private Boolean CrearDSRegSalida()
{
this.Cursor = Cursors.WaitCursor;
MySqlCommand CMDComprobante;
try
{
blnTodos = false;
CMDComprobante = new MySqlCommand(strSelectComprobante(), Modulos.ClsGlobal.MyNetCnx);
SDAComprobante = new MySqlDataAdapter();
SDAComprobante.MissingSchemaAction = MissingSchemaAction.AddWithKey;
SDAComprobante.SelectCommand = CMDComprobante;
SDAComprobante.FillSchema(dtComprobante, SchemaType.Source);
SDAComprobante.Fill(dtComprobante);
SDADetalle = new MySqlDataAdapter(strSelectDetalle(), Modulos.ClsGlobal.MyNetCnx);
SDADetalle.FillSchema(dtDetalle, SchemaType.Mapped);
SDADetalle.Fill(dtDetalle);
dsData.Tables.Add(dtComprobante);
dsData.Tables.Add(dtDetalle);
dtComprobante.PrimaryKey = new DataColumn[] { dtComprobante.Columns["NroCpte"] };
dtDetalle.PrimaryKey = new DataColumn[] { dtDetalle.Columns["NroCpte"], dtDetalle.Columns["NroDetalle"] };
//Create RelationShip Comprobante - Detalle
DataColumn parentColumn = new DataColumn();
parentColumn = dsData.Tables["Comprobante"].Columns["NroCpte"];
//parentColumn.AutoIncrement = true;
//parentColumn.AutoIncrementSeed = 1;
//parentColumn.AutoIncrementStep = 1;
parentColumn.Unique = true;
DataColumn childColumn = new DataColumn();
childColumn = dsData.Tables["Detalle"].Columns["NroCpte"];
//childColumn.AutoIncrement = true;
//childColumn.AutoIncrementSeed = 1;
//childColumn.AutoIncrementStep = 1;
childColumn.Unique = false;
DataColumn childColumnKey = new DataColumn();
childColumnKey = dsData.Tables["Detalle"].Columns["NroDetalle"];
childColumnKey.AutoIncrement = true;
childColumnKey.AutoIncrementSeed = 1;
childColumnKey.AutoIncrementStep = 1;
//childColumn.Unique = true;
DataRelation relation = new DataRelation("REL_Cmpte_Detalle", parentColumn, childColumn, true);
dsData.Relations.Add(relation);
relation.ChildKeyConstraint.AcceptRejectRule = AcceptRejectRule.Cascade;
relation.ChildKeyConstraint.DeleteRule = Rule.Cascade;
relation.ChildKeyConstraint.UpdateRule = Rule.Cascade;
//ForeignKeyConstraint fk = new ForeignKeyConstraint("ForeignKey", dsData.Tables["Comprobante"].Columns["NroCpte"], dsData.Tables["Detalle"].Columns["NroCpte"]);
//ForeignKeyConstraint fk = new ForeignKeyConstraint("ForeignKey", parentColumn, childColumn);
//fk.DeleteRule = Rule.Cascade;
//fk.UpdateRule = Rule.Cascade;
//dtDetalle.Constraints.Add(fk);
//Create RelationShip Comprobante - controls forms
TxtNroCpte.DataBindings.Add(new Binding("Text", dsData.Tables["Comprobante"].DefaultView, "NroCpte"));
CmbCliente.DataBindings.Add(new Binding("Text", dsData.Tables["Comprobante"].DefaultView, "Cliente"));
TxtDescripcion.DataBindings.Add(new Binding("Text", dsData.Tables["Comprobante"].DefaultView, "Descripcion"));
DtFecha.DataBindings.Add(new Binding("Value", dsData.Tables["Comprobante"].DefaultView, "Fecha"));
DGVDetalle.DataSource = dsData.Tables["Detalle"].DefaultView;
DGVDetalle.Columns[ColNroCpte.Index].DataPropertyName = "NroCpte";
DGVDetalle.Columns[ColNroDetalle.Index].DataPropertyName = "NroDetalle";
DGVDetalle.Columns[ColProducto.Index].DataPropertyName = "Producto";
DGVDetalle.Columns[ColDenominacion.Index].DataPropertyName = "Denominacion";
DGVDetalle.Columns[ColUnidad.Index].DataPropertyName = "Unidad";
DGVDetalle.Columns[ColCosto.Index].DataPropertyName = "CostoUnt";
DGVDetalle.Columns[ColPrVenta.Index].DataPropertyName = "PrecioUnt";
DGVDetalle.Columns[ColCantidad.Index].DataPropertyName = "Cantidad";
DGVDetalle.Columns[ColDescuento.Index].DataPropertyName = "Descuento";
DGVDetalle.Columns[ColMonto.Index].DataPropertyName = "Monto";
//bindingmanager
BMBComprobante = this.BindingContext[dsData.Tables["Comprobante"].DefaultView];
BMBComprobante.PositionChanged += new EventHandler(Binding_PositionChanged);
dtComprobante.TableNewRow += new DataTableNewRowEventHandler(dtComprobante_NewRow);
dtDetalle.TableNewRow += new DataTableNewRowEventHandler(dtDetalle_NewRow);
this.Cursor = Cursors.Default;
return true;
}
catch (Exception e)
{
MessageBox.Show(e.Message, "CrearDSRegSalida", MessageBoxButtons.OK, MessageBoxIcon.Error);
this.Cursor = Cursors.Default;
return false;
}
}
private void Binding_PositionChanged(object sender, System.EventArgs e)
{
string filter;
DataRow selectedRow;
if (this.BindingContext[dsData.Tables["Comprobante"].DefaultView].Position >= 0)
{
selectedRow = dtComprobante.Rows[this.BindingContext[dsData.Tables["Comprobante"].DefaultView].Position];
strCurrentNroCpte = selectedRow["NroCpte"].ToString();
filter = "NroCpte=" + strCurrentNroCpte;
dsData.Tables["Detalle"].DefaultView.RowFilter = filter;
}
}
private void dtComprobante_NewRow(object sender, DataTableNewRowEventArgs e)
{
e.Row["TipoCpte"] = "S";
e.Row["Fecha"] = DateTime.Now;
e.Row["Usuario"] = Modulos.ClsGlobal.Usuario;
e.Row["Descripcion"] = "nuevo";
}
private void dtDetalle_NewRow(object sender, DataTableNewRowEventArgs e)
{
if (strCurrentNroCpte.Trim().Length != 0)
{
Boolean result = long.TryParse(strCurrentNroCpte, out intNroCpte);
e.Row["NroCpte"] = intNroCpte;
e.Row["TipoCpte"] = "S";
}
}
private Boolean GrabarRegSalida()
{
int returnValue = 0;
try
{
BMBComprobante.EndCurrentEdit();
BMBDetalle.EndCurrentEdit();
if (dsData.HasChanges())
{
using (TransactionScope scope = new TransactionScope())
{
Modulos.ClsGlobal.MyNetCnx.Open();
if (blnNuevoCpte)
{
intNroCpte = objF.GetNumeroCpte("S");
returnValue = GrabarNroCpte(intNroCpte);
}
else
returnValue = 1;
returnValue = GrabarComprobante(intNroCpte);
returnValue += GrabarDetalle(intNroCpte);
scope.Complete();
}
Modulos.ClsGlobal.MyNetCnx.Close();
}
if (returnValue > 0)
return true;
else
return false;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "GrabarRegSalida", MessageBoxButtons.OK, MessageBoxIcon.Information);
Modulos.ClsGlobal.MyNetCnx.Close();
return false;
}
}
private void DGVDetalle_Enter(object sender, EventArgs e)
{
this.BindingContext[dsData, "Comprobante"].EndCurrentEdit();
//BMBComprobante.EndCurrentEdit();
dsData.AcceptChanges();
Boolean str = dtComprobante.HasErrors;
}
当我想插入一个新的主行时,我有这个错误: ForeignKeyConstraint REL_Cmpte_Detalle requires the child key values (0) to exist in the parent table
请帮我。
提前致谢。
--
--表的定义tbcomprobante
DROP TABLE IF EXISTS `tbcomprobante`;
CREATE TABLE `tbcomprobante` (
`idTbComprobante` int(10) unsigned NOT NULL auto_increment,
`NroCpte` int(10) unsigned NOT NULL,
`TipoCpte` varchar(1) NOT NULL,
`Factura` varchar(10) default NULL,
`Fecha` datetime NOT NULL,
`Proveedor` varchar(50) default NULL,
`Cliente` varchar(50) default NULL,
`Usuario` varchar(5) NOT NULL,
`Descripcion` varchar(100) default NULL,
PRIMARY KEY USING BTREE (`idTbComprobante`)
) ENGINE=InnoDB AUTO_INCREMENT=42 DEFAULT CHARSET=latin1;
--
--表的定义tbdetalle
DROP TABLE IF EXISTS `tbdetalle`;
CREATE TABLE `tbdetalle` (
`idTbDetalle` int(10) unsigned NOT NULL auto_increment,
`NroCpte` int(10) unsigned NOT NULL,
`Producto` varchar(10) NOT NULL,
`Cantidad` int(10) unsigned NOT NULL default '0',
`CostoUnt` decimal(10,7) default '0.0000000',
`Monto` decimal(10,2) default '0.00',
`TipoCpte` varchar(1) NOT NULL,
`PrecioUnt` decimal(10,2) default '0.00',
`Descuento` int(10) unsigned NOT NULL,
`NroDetalle` int(10) unsigned NOT NULL,
PRIMARY KEY USING BTREE (`idTbDetalle`)
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=latin1;