Entradas al Almacén
Diseño de la pantalla
Empezaremos diseñando la pantalla de entradas (formulario frmEntrada), la apariencia debe de quedar mas o menos así:A continuacion una tabla descriptiva con los nombres de los objetos:
Objeto | Propiedad | Valor |
Label | Name | lblFechaEntrada |
Text | Fecha Entrada: | |
DateTimePicker | Name | dtpFechaEntrada |
Format | Custom | |
CustomFormat | dd/MM/yyyy | |
Label | Name | lblFechaFactura |
Text | Fecha Factura: | |
DateTimePicker | Name | dtpFechaFactura |
Format | Custom | |
CustomFormat | dd/MM/yyyy | |
Label | Name | lblFolioFactura |
Text | Folio Factura: | |
TextBox | Name | txtFolioFactura |
Label | Name | lblNombreProveedor |
Text | Nombre del Proveedor: | |
TextBox | Name | txtNombreProveedor |
Label | Name | lblIdArticulo |
Text | Articulo: | |
TextBox | Name | txtIdArticulo |
Label | Name | lblCantidad |
Text | Cantidad: | |
TextBox | Name | txtCantidad |
Label | Name | lblPrecioCompra |
Text | Precio: | |
TextBox | Name | txtPrecioCompra |
Button | Name | btnAgregar |
Text | Agregar | |
Button | Name | btnGrabar |
Text | Grabar | |
Button | Name | btnCancelar |
Text | Cancelar | |
ListView | Name | lvEntrada |
FullRowSelect | True | |
GridLines | True | |
HideSelection | False |
Programación
La parte de la programación es la mas enredada. Voy a considerar que el lector es un novato con nociones bastantebásicas e insuficientes como para comprender la estructura de la programación C#. Recomiendo al lector poner mucha atención
a los pasos que aqui se describan y no omitir nada, leer y re-leer hasta que haya comprendido lo que tiene que hacer.
Comprendiendo el código de un formulario C#
Con mucho cuidado haremos doble clic sobre el formulario asegurándonos de no tocar con el puntero del mouse ningun objeto. Veremos un códigomuy parecido al siguiente:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace almacen.Formularios { public partial class frmEntrada : Form { public frmEntrada() { InitializeComponent(); } private void frmEntrada_Load(object sender, EventArgs e) { } } }
A continuación incluiré comentarios en esta misma porción de código con la finalidad de que podamos identificar claramente su organización:
/** * Aqui se agrupan los espacios de nombres * Son necesarios para facilitarnos el acceso * a ciertas librerias o DLLs */ using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; //Aqui inicia nuestro espacio de nombres namespace almacen.Formularios { //aqui inicia la clase public partial class frmEntrada : Form { //este es el constructor predeterminado public frmEntrada() { InitializeComponent(); } //Aqui declararemos nuestras variables private void frmEntrada_Load(object sender, EventArgs e) { /** * Aqui incia la ejecución del Formulario */ } //Aqui se ubican los procedimientos y funciones } //Fin de la clase, normalmente no se utiliza } /** * Fin del Espacio de Nombres * Este espacio no lo utilizaremos, * normalmente no se utiliza */
Así se organiza el código de un formulario C#. Debemos notar que todo inicia y termina con las llaves { }, existen algunos casos en los que
puede omitirse el uso de las llaves, principalmente en las estructuras de desición if, pero
para este tutorial, me aseguraré de escribir tanto mucho o tanto poco (mucho o poco) código segun sea necesario para evitar confusiones.
Ahora comenzaremos a programar, iniciamos nuestra tarea declarando todas las variables que vamos a utilizar.
En la zona de declaraciones, declaramos las siguientes variables:
DataTable tmpEntrada = new DataTable(); string CnnStr = @" Provider=Microsoft.Jet.OLEDB.4.0; "+ "Data Source=D:\\DOCS\\tyrodeveloper\\almacen.mdb; "+ "Jet OLEDB:Database Password=; Persist Security Info=False;";
Ahora escribiremos el código de las funciones y procedimientos:
void generaColumnas() { lvEntrada.Clear(); lvEntrada.View = View.Details; lvEntrada.Columns.Add("", 0, HorizontalAlignment.Left); lvEntrada.Columns.Add("Id ", 100, HorizontalAlignment.Left); lvEntrada.Columns.Add("Producto", 240, HorizontalAlignment.Left); lvEntrada.Columns.Add("Cantidad", 60, HorizontalAlignment.Right); lvEntrada.Columns.Add("Precio", 60, HorizontalAlignment.Right); lvEntrada.Columns.Add("Total", 80, HorizontalAlignment.Right); } void mostrarEntrada() { try { double varIVA = 0; double varTOTAL = 0; lvEntrada.Items.Clear(); for (int i = 0; i < tmpEntrada.Rows.Count; i++) { lvEntrada.Items.Add(tmpEntrada.Rows[i]["id"].ToString()); lvEntrada.Items[i].SubItems.Add(tmpEntrada.Rows[i]["id_articulo"].ToString()); lvEntrada.Items[i].SubItems.Add(tmpEntrada.Rows[i]["articulo"].ToString()); lvEntrada.Items[i].SubItems.Add(String.Format("{0:N}", Convert.ToDouble(tmpEntrada.Rows[i]["cantidad"]))); lvEntrada.Items[i].SubItems.Add(String.Format("{0:C}", Convert.ToDouble(tmpEntrada.Rows[i]["precio_compra"]))); lvEntrada.Items[i].SubItems.Add(String.Format("{0:C}", (Convert.ToDouble(tmpEntrada.Rows[i]["precio_compra"]) * Convert.ToDouble(tmpEntrada.Rows[i]["cantidad"])))); varTOTAL += Convert.ToDouble(tmpEntrada.Rows[i]["precio_compra"]) * Convert.ToDouble(tmpEntrada.Rows[i]["cantidad"]); varIVA += (Convert.ToDouble(tmpEntrada.Rows[i]["cantidad"]) * Convert.ToDouble(tmpEntrada.Rows[i]["precio_compra"])) - ((Convert.ToDouble(tmpEntrada.Rows[i]["cantidad"]) * Convert.ToDouble(tmpEntrada.Rows[i]["precio_compra"])) / (1.16)); } } catch (Exception ex) { MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } bool agregarArticulo(string prmId, double prmCantidad, double prmPrecioCompra, double prmIVA) { try { string varId = ""; string varNombre = ""; OleDbConnection cnn = new OleDbConnection(CnnStr); cnn.Open(); string strSQL="select articulo from articulos "+ "where id_articulo='"+ prmId +"'"; OleDbCommand cmd = new OleDbCommand(strSQL, cnn); OleDbDataReader dr = cmd.ExecuteReader(); if (dr.Read()) { varId = prmId; varNombre = dr["articulo"].ToString(); ; //agregamos la venta a la tabla temporal DataRow row = tmpEntrada.NewRow(); row["id_articulo"] = varId; row["articulo"] = varNombre; row["cantidad"] = prmCantidad; row["precio_compra"] = prmPrecioCompra; row["iva"] = prmIVA; tmpEntrada.Rows.Add(row); } else { MessageBox.Show("El articulo no existe", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return (false); } dr.Close(); cnn.Close(); return (true); } catch (Exception ex) { MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return (false); } } bool grabarEntrada(string prmFechaEntrada, string prmFechaFactura, string prmFolioFactura, string prmNombreProveedor, string prmUserLogin) { try { OleDbConnection cnn = new OleDbConnection(CnnStr); cnn.Open(); OleDbTransaction tran = cnn.BeginTransaction(); OleDbCommand cmd = new OleDbCommand(); cmd.Connection = cnn; cmd.Transaction = tran; //insertamos el registro de la Entrada try { cmd.CommandText = "insert into entradas(fecha_entrada,fecha_factura,folio_factura,proveedor,user_login) " + " values (#" + prmFechaEntrada + "#,#" + prmFechaFactura + "#,'" + prmFolioFactura + "','" + prmNombreProveedor + "','" + prmUserLogin + "')"; cmd.ExecuteNonQuery(); //obtenemos el folio int _FolioEntrada = 0; cmd.CommandText = "select @@identity"; _FolioEntrada = Convert.ToInt32(cmd.ExecuteScalar()); //insertamos el detalle de laentrada for (int i = 0; i < tmpEntrada.Rows.Count; i++) { string _IdArticulo = Convert.ToString(tmpEntrada.Rows[i]["id_articulo"]); double _Cantidad = Convert.ToDouble(tmpEntrada.Rows[i]["cantidad"]); double _IVA = Convert.ToDouble(tmpEntrada.Rows[i]["iva"]); double _PrecioCompra = Convert.ToDouble(tmpEntrada.Rows[i]["precio_compra"]); double _CostoPromedio = 0; //insertamos el articulo cmd.CommandText = "insert into entradas_detalle(id_entrada,id_articulo,cantidad,precio_compra,iva) " + "values(" + _FolioEntrada + ",'" + _IdArticulo + "'," + _Cantidad + "," + _PrecioCompra + "," + _IVA + ")"; cmd.ExecuteNonQuery(); //actualizamosexistencias cmd.CommandText = "update articulos set " + " existencia=existencia + " + _Cantidad + "" + " where id_articulo='" + _IdArticulo + "'"; cmd.ExecuteNonQuery(); //establecemos el costo promedio cmd.CommandText = "select avg(precio_compra) " + " from entradas_detalle " + " where id_articulo='" + _IdArticulo + "'"; _CostoPromedio = Convert.ToDouble(cmd.ExecuteScalar()); cmd.CommandText = "update articulos set " + " costo_promedio=" + _CostoPromedio + "" + " where id_articulo='" + _IdArticulo + "'"; cmd.ExecuteNonQuery(); } //finalizamos la transaccion tran.Commit(); cnn.Close(); MessageBox.Show("Entrada grabada correctamente", "Información del Sistema", MessageBoxButtons.OK, MessageBoxIcon.Information); return (true); } catch (OleDbException errEntrada) { tran.Rollback(); cnn.Close(); MessageBox.Show(errEntrada.Message); return (false); } } catch (Exception ex) { MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return (false); } }
Ahora damos doble clic sobre el botón Agregar (btnAgregar) y escribimos el siguiente código:
try { if (agregarArticulo(txtIdArticulo.Text, Convert.ToDouble(txtCantidad.Text), Convert.ToDouble(txtPrecioCompra.Text), 0.16)) { mostrarEntrada(); } } catch (Exception ex) { MessageBox.Show(ex.Message); }
Ahora, agregaremos el código para grabar la entrada, hacemos doble clic sobre el botón Grabar (btnGrabar) y escribimos el siguiente código:
if (grabarEntrada(dtpFechaEntrada.Value.ToShortDateString(), dtpFechaFactura.Value.ToShortDateString(), txtFolioFactura.Text, txtNombreProveedor.Text,"admin")) { this.Close(); }
El código que pondremos en el Form_Load es el siguiente:
//>Definimos la tabla para las ventas Temporales DataColumn idColumn = new DataColumn("id", typeof(int)); idColumn.Unique = true; idColumn.AutoIncrement = true; idColumn.AutoIncrementSeed = 1; idColumn.AutoIncrementStep = 1; tmpEntrada.Columns.Add(idColumn); //declaramos el resto de los campos tmpEntrada.Columns.Add("id_articulo", typeof(string)); tmpEntrada.Columns.Add("articulo", typeof(string)); tmpEntrada.Columns.Add("cantidad", typeof(Double)); tmpEntrada.Columns.Add("precio_compra", typeof(Double)); tmpEntrada.Columns.Add("iva", typeof(Double)); //agregamos un primary key tmpEntrada.PrimaryKey = new DataColumn[] { tmpEntrada.Columns["id"] }; //<termina la deficinicón de la tabla temporal generaColumnas(); mostrarEntrada();
En el botón Salir (btnSalir) escribimos esto:
this.Close();
Para efectos de aprendizaje basico me aseguré de no poner funcionalidad demasiado complicada. Lo que tratamos de desarrollar es un sistema de almacén
sencillo, no se trata de desarrollar un sistema comercial cero errores, tratamos de sentar las bases técnicas para, en un futuro, lograr un gran sistema de almacén
con toda la funcionalidad comercial.
Aqui un ejemplo de la pantalla funcionando:
Hola, soy nuevo en esto de la programación he leido mucho acerca de las bases de datos porque queria crear un control de inventarios sencillo y tu tutorial me vino como anillo al dedo , lo he seguido al pie de la letra, pero tengo una duda, todo esto me funcionara bien si tengo win7 64 bits, access 2010? ya que me salen varios mensajes de error "Error 1 The type or namespace name 'OleDbConnection' could not be found (are you missing a using directive or an assembly reference?) C:\Users\usuario\Documents\Visual Studio 2010\Projects\Almacen\Almacen\Formularios\frmEntrada.cs 31 2017 Almacen
ResponderEliminar" Gracias.
Hola! Pues vieras que yo tenia ese problema con un programa de Avalúos que estoy tratando de hacer. Ese problema pasa con los windows de 64 bits, lo que tienes q hacer es que el programa compile en 32 bits (x86) y listo.
EliminarAgrega:
ResponderEliminarusing System.Data.OleDb;
Tambien cambia las propiedades de la depuracion,..
Normalmente dice "Any CPU", cambialo a X86
Saludos
en donde se agrega es linea de codigo?
EliminarMuchas gracias por tu respuesta , agregue lo que me dijiste y ya no salen errores. Ahora el problema es cuando le doy en Build --» Build almacen y me sale le siguiente error:
ResponderEliminarError 1Program
'c:\users\usuario\documents\visual studio 2010\Projects\almacen\almacen\obj\x86\Debug\almacen.exe' does not contain a static 'Main' method suitable for an entry pointalmacen,
Del tutorial lo he hecho solo hasta aqui,, no se si tenga que terminarlo para poder ver la pantalla que tienes de ejemplo ya funcionando y mi base de datos tiene la extencion ".accdb" ya que fue hecha en access 2010, Saludos y Gracias ,,, de todos modos sigo buscando en google a ver si puedo resolver mi prblema,
esa parte la encuentras en la parte 7
ResponderEliminarhttp://www.tyrodeveloper.com/2011/07/creacion-de-un-sistema-de-almacen-con-c_12.html
Tengo una pregunta, para que usted utiliza una entrada_detalle y una salida_detalle, en que lo ayuda o cual es su funcion ?
ResponderEliminarPor favor podrias decir donde va el codigo fuente exactamente,y en el de abajo dice form_load,cual es ese
ResponderEliminartengo una duda, donde es que debo agregar
ResponderEliminarusing System.Data.OleDb;
ayuda por favor, veo muy interesante este tutorial, muchas gracias, sigue asi.
tengo un problema al ingresar una entrada
ResponderEliminarhola aque se refiere a tmpentrada
ResponderEliminartmpEntrada es una tabla temporal que se crea en tiempo de ejecución para almacenar los registros. Tales registros se vaciarán en la base de datos cuando se decida...
ResponderEliminarMe da un error en la parte double varIva que puedo hacer
ResponderEliminarverifica que la tengas bien ubicada, no olvides el punto y coma (;) y...
ResponderEliminarsi puedes decirnos el error exacto,...
YA LO REPARE EL VARIVA
ResponderEliminarHORA ME SALE ESTE ERROR
ResponderEliminarError 1 Program 'C:\Users\Leandro\Documents\Visual Studio 2010\Projects\Almacen\Almacen\obj\x86\Debug\Almacen.exe' does not contain a static 'Main' method suitable for an entry point Almacen
QUE DEBO DE HACER DONDE LO REPARO
Ese error es por que te hace falta un proecimiento llamado Main
ResponderEliminarC# respeta mayusculas y minusculas. Asegurate de que lo tienes y que dice:
static void Main(){
//contenido
}
a veces lo escribimos mal...
Otra situación puede ser que no has llegado a la parte en donde se crea ese procedimiento...
Saludos..
nesecito un poco de ayuda, cuando le doy al boton agregar me lansa el mensaje de "el archivo no esxiste" y no me hace nada solamente lo guarda en la base de datos directo
ResponderEliminarbuenas, pudiste solventar ese problema? a mi me sucede lo mismo.
EliminarErik Cabrera, pudiste solucionar el problema, podrias ayudarnos enviame respuesta a cg-isla@hotmail.com
Eliminarpudieron solucionar este problema? conmigo lo mismo :S
EliminarYo tampoco puedo corregir ese error
Eliminar¿supiste algo?
Alguna solución a esto?
EliminarBuenos dias, necesito un poco de ayuda tengo un problema y no si será por lo siguiente, al poner estos códigos:
ResponderEliminarDataTable tmpEntrada = new DataTable();
string CnnStr = @" Provider=Microsoft.Jet.OLEDB.4.0; "+
"Data Source=D:\\DOCS\\tyrodeveloper\\almacen.mdb; "+
"Jet OLEDB:Database Password=; Persist Security Info=False;";
Y siendo la ruta de mi proyecto un poco diferente:
"C:\Users\Hogar\Documents\Visual Studio 2010\Projects\Sistema de inventario\Sistema de inventario\Sistema de inventario.csproj"
El archivo.mdb al que ustedes hacen referencia donde lo puedo conseguir?? Ya que todos los comandos o códigos que comienzas por OleDb(Connection, Command, DataReader, Transaction, etc…) me aparecen subrayados y me dan el siguiente error: “The type or namespace name “OleDbXXXX” could not be found(are you missing a using directive or an assembly reference?)
Primeramente el archivo .mdb es la extencion del archivo de access, ya que dependiendo el access si es 2000 o 2007 te guardan con extenciones diferentes el 2000 te guarda en mdb y el 2007 es accdb.
ResponderEliminarEn la parte donde te da el error del "oledb" es por que tienes que agregar la libreria "using system.data.oledb", desde que agregues esa libreria todos los oledb que hallas agregado te funcionaran correctamente.
suerte!!
ok, gracias por la ayuda, pero en que parte del codigo agregaria la libreria que me estas mencionando???
ResponderEliminarAl inicio del programa donde veas las directivas using ahí se agrega todas las librerías
EliminarNecesarias que va solicitando el sistema.
cual es el form_load ?? ese codigo donde se pone ??? ahi me perdi
ResponderEliminarque es el form_load ????? donde se pone el penultimo codigo ????
ResponderEliminarEl form load(), se genera automáticamente, al dar doble click en el formulario o simplemente al dar doble click en un botón. Ahí se mandan llamar las conexiones a la base de datos o simplemente las funciones que deseas cargar como primera instancia en tu sistema.
EliminarDaniel Ramos, la libreria la cual menciono se agrega en la parte superior, data cuenta que en la parte superior de los codigos al pricipio, aparecen multiples librerias, hay es donde debes agregar el que menciono.
ResponderEliminarsuerte
Anonimo, el form_load lo sacas dando dos click en el form, temandara automaticamente a la linea de codigo del form exactamente al evento form_load.
ResponderEliminarsuerte!!
Muchas gracias, por la ayuda....
ResponderEliminarCon un favor.
ResponderEliminarMe manda un error cuando le doy guardar:
"No se puede agregar o cambiar el registro por que se necesita un registro relacionado en la tabla "users".
Por su apoyo muchas gracias.
al grabar una entrada me genera un cuadro de dialogo con el siguiente error
ResponderEliminarIncorrect Syntaxis near '#' espero puedas ayudarme...
También me manda este erro: "No se puede agregar o cambiar el registro por que se necesita un registro relacionado en la tabla "users". Necesitamos iniciar con un usuario y contraseña, para poder modificar datos.
ResponderEliminarCreo que falta esa parte dentro del tutorial, en conjunto de las ventanas para las entradas y salidas.
fijate que no me reconoce lvEntrada me podrias ayudar con eso porfa
ResponderEliminarHola pues e segido los pasos pero no me funciona agregue """"static void Main()"" pero ahora no se ejecuta la depuracion pero tampoco me genera ningun error podrian ayudarme. Si le quito el procedimiento static void Main() me marca este error
ResponderEliminarError 1 El programa 'C:\Users\Bynoter\documents\visual studio 2010\Projects\Almacen\Almacen\obj\x86\Debug\Almacen.exe' no contiene ningún método 'Main' estático adecuado para un punto de entrada Almacen
Hola muy bueno tu ejemplo muy simple y demaciado utilizable!! Perfecto
ResponderEliminar1 pregunta como puedo hacer que dentro de mi formulario o que mi formulario tenga apariencia de 1 libro?
Tengo listo todo el Proyecto, tengo un problema cuando grabo la salida o el ingreso, este error:
ResponderEliminarEl nombre "#10" no es valido en este contexto, las expresiones validas son constantes o expresiones de constantes y en algunos contexto, variables. No se permite nombres de columna.
Por favor si me puedes ayudar.
Iván López
como se pone el texto encima de los textbox?
ResponderEliminarmandame un mail a inievam@hotmail.es
me toy volviendo loco con visual studio 2010 para hacerlo.
gracias
Cuando intento GRABAR en el formulario entrada o salida me da el siguiente error: "No se puede agregar o quitar el registro relacionado con la tabla 'users'". No se puede grabar los datos. ¿Alguien me podría ayudar?
ResponderEliminarEs problema es por que en tu tabla de Access lo Tienes en relacion Al User_login user y entradas si lo quitas ya no te saldra es error
EliminarEs correcto, sólo ingresa a la BD Access y elimina la relación entre User y Entrada y es User_login.
EliminarSaludos
hola tengo un problema con la Tabla de entrada en el cuando doy agregar me da error El Articulo No Existe
ResponderEliminardisculpa he seguido los pasos al pie de la letra y la verdad me ayudo mucho tu tutorial gracias. Solo tengo un error con la base de datos
ResponderEliminarDataTable tmpEntrada = new DataTable();
string CnnStr = @" Provider=Microsoft.Jet.OLEDB.4.0; " +
"Data Source=C:\\Users\\Lourdes\\Desktop\\DatabaseAlamacen.accdb; " +
"Jet OLEDB:Database Password=; Persist Security Info=False;";
ya e cambiado dataSource donde esta mi archivo de base de datos pero me sale un error: "No se reconocio formato de base de datos" no se que estoy asiendo mal
por favor ayudame
Para resolver el problema con el Main , solo hay q añadir en InicioAplicacion.cs, una libreria la cual es:
ResponderEliminarusing System.Windows.Forms;
Despues agregar el Main, el cual quedaria asi:
static void Main(string[] args)
{
Application.Run(new Formularios.frmEntrada());
}
Y con eso se soluciona
hola buenos dias esta super este tutorial, apenas me estoy adentrando en lo que es la programacion en el lemguaje c#... no se creo que no me que da la base de datos o no porque al momento de que ejecuto la aplicacion. no marca ningun error pero cuando trato de llenar los campos me y termino doy agregar y dice que los datos no pueden ser cargar porque falta una referencia en la tabla users.
ResponderEliminarhola! excelente aporte, justo lo que estaba buscando. tengo un inconveniente, cuando ejecuto el formulario de entrada lleno todos los campos, al darle al boton "agregar" me indica q el articulo no existe. espero me puedan ayudar. Gracias!
ResponderEliminarHola Lo pudiste corregir?
Eliminarse me cierra la aplicacion al momento de correrla, no marca ningun error
ResponderEliminarel codigo esta bien y el formulario de las entradas, solo me da un error al momento de yo introducir una entrada , agrego el folio, codigo, nombre proveedor, cantidad y precio y me da el error: format of the initialization string does not conform to specification starting at index 55
ResponderEliminary en la ventana de inmediato este otro
Excepción del tipo 'System.ArgumentException' en System.Data.dll
oye como saco el form porque no puedo añadir lo ultimo
ResponderEliminares el form_load
ResponderEliminarhola necesito saber porque me da el siguiente error "no se puede comvertir un objeto BDNullen otros tipos" CUANDO AGREGO LOS DATOS EJ:
ResponderEliminararticulo,cantidad y presio...
espero tu respuesta
puede ser por que alguno de los datos de retorno es nulo. Es decir, el problema podría no ser al agregar el registro, sinó al intentar mostrarlo en la pantalla
Eliminarmira ya me muestra pero no he podido pasar al otro formulario ya que ahora me sale porque OleDbConnection cnn = new OleDbConnection(CnnStr);me sale null en el boton grabar
EliminarEs raro ese error. Sería buena idea poner puntos de interrupción antes de grabar y verificar los valores se insertarán. Otra cosa importante es que los datos autonuméricos estén establecidos correctamente en la base de datos.
EliminarNesecito ayuda hago todo bn y corre el programa pero cuando introdusco un valor donde sea me dice: Error de disco o de red,
ResponderEliminarPerfecto
ResponderEliminar¿Alguien sabe por qué me sale Error de disco o de red? Si alguien me pudiera brindar una solución se lo agradecería muchísimo...
ResponderEliminartengo un problema ayudenme me sale k lvEntradas no existe por que sera
ResponderEliminaren que parte del código tendría que cambiarle para realisar consultas y que se conecte con una base de datos sqlServer porfavor espero tu resp gracias de antemano
ResponderEliminarHola Buenas noches nose si me podrias ayudar soy nuevo en este hermoso mundo de la programacion. Saben el erro que tengo es a la hora de registrar los datos al lvEntrada me dice que el Articulo NO EXISTE. Ya estube buscandole una solucion y no se la encuentro nose si ustedes me pueden ayudar?
ResponderEliminaralguien supo solucionar el probelma de IvEntrada?
ResponderEliminartego 3 datos almacenados enla base de datos, el data listado no me muestra nada, al momento de darle grabar me sale ke se grabo correctamente y se cierra y almomento de darle agregar me sale un error al go se los valores de los parametros son incorretos
ResponderEliminarAcabo de compilar y esperando el funcionamiento de la captura de entrada, sin embargo, me dice que "La columna precio_compra" no pertenece a la tabla.
EliminarRepasando el código veo lo siguiente:
bool agregarArticulo(string prmId, double prmCantidad, double prmPrecioCompra, double prmIVA)
{
try
{
string varId = "";
string varNombre = "";
OleDbConnection cnn = new OleDbConnection(CnnStr);
cnn.Open();
String strSQL = "select articulo from articulos " + "where id_articulo='" + prmId + "'";
OleDbCommand cmd = new OleDbCommand(strSQL, cnn);
OleDbDataReader dr = cmd.ExecuteReader();
if (dr.Read())
{
varId = prmId;
varNombre = dr["articulo"].ToString();
//agregamos la venta a la tabla temporal
DataRow row = tmpEntrada.NewRow();
row["id_articulo"] = varId;
row["articulo"] = varNombre;
row["cantidad"] = prmCantidad;
//Aquí comentarize "precio_compra" y me ahora me despliega; "iva" no pertenece a la tabla el //row["precio_compra"] = prmPrecioCompra;
row["iva"] = prmIVA;
tmpEntrada.Rows.Add(row);
}
else
{
MessageBox.Show("El artículo no existe", "Error",
MessageBoxButtons.OK, MessageBoxIcon.Error);
return (false);
}
dr.Close();
cnn.Close();
return (true);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK,
MessageBoxIcon.Error);
return (false);
}
}
Acabo de compilar y esperando el funcionamiento de la captura de entrada, sin embargo, me dice que "La columna precio_compra" no pertenece a la tabla.
ResponderEliminarRepasando el código veo lo siguiente:
bool agregarArticulo(string prmId, double prmCantidad, double prmPrecioCompra, double prmIVA)
{
try
{
string varId = "";
string varNombre = "";
OleDbConnection cnn = new OleDbConnection(CnnStr);
cnn.Open();
String strSQL = "select articulo from articulos " + "where id_articulo='" + prmId + "'";
OleDbCommand cmd = new OleDbCommand(strSQL, cnn);
OleDbDataReader dr = cmd.ExecuteReader();
if (dr.Read())
{
varId = prmId;
varNombre = dr["articulo"].ToString();
//agregamos la venta a la tabla temporal
DataRow row = tmpEntrada.NewRow();
row["id_articulo"] = varId;
row["articulo"] = varNombre;
row["cantidad"] = prmCantidad;
//Aquí comentarize "precio_compra" y me ahora me despliega; "iva" no pertenece a la tabla el //row["precio_compra"] = prmPrecioCompra;
row["iva"] = prmIVA;
tmpEntrada.Rows.Add(row);
}
else
{
MessageBox.Show("El artículo no existe", "Error",
MessageBoxButtons.OK, MessageBoxIcon.Error);
return (false);
}
dr.Close();
cnn.Close();
return (true);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK,
MessageBoxIcon.Error);
return (false);
}
}
Encontré la causa, fue que no estaba definida en la tabla temporal. había omitido "precio_compra","iva".
EliminarSaludos y muchas gracias.
Tengo un detalle, estoy corriendo la aplicación y al momento de guardar registro, me manda el siguiente mensaje "No se puede agregar o cambiar el registro porque se necesita un registro relacionado en la tabla Users", Sin embargo, revisando el proyecto no existe nada para el registro de usuario. Qué me recomiendan ?
ResponderEliminarPor el momento es eliminar la relación de Users y entrada en Access.
EliminarEstoy perdido, las variables realmente no se donde van, se remplaza "private void frmEntrada_Load(object sender, EventArgs e)" o va abajo?.
ResponderEliminarLo mismo con el Form_Load ni idea de exactamente donde va, al dar doble click en form me manda a "private void frmEntrada_Load(object sender, EventArgs e)" y como aqui no supe donde van las variables, menos donde va el codigo de form_load, exactamente.
cuando lo ejecuto en el ListViewer no me aparecen columnas
ResponderEliminarHola tengo un problema con el proyecto en el momento de guarda me dice error de disco o de red
ResponderEliminares lo mismo para hacerlo en mysql o sqlserver
ResponderEliminarError 1 El nombre 'prmFechaEntrada' no existe en el contexto actual F:\proyecto final\programa final\programa final\Formularios\frmEntrada.cs 110 29 programa final
ResponderEliminary asi me sale con prmFechaFactura,
prmFolioFactura + "','" + prmNombreProveedor + "','" + prmUserLogin
hola, he estoy tratanto de aprender un poco de Visual Studio, tu tutorial me parece muy bueno, pero me gustaria adaptarlo a SQL, me ayudas con la sentencia de coneccion a SQL server 2008?
ResponderEliminarPregunta
ResponderEliminarsuponiendo que el usuario agregó por error un producto a la lista
como sería el código para eliminarlo?
Me sale el error " Nose reconoce base de datos C:\Users\Andre\Tutoria 3 capas\BD\BasedeDatos_Almacen.accdb(Access 2013) segui cada paso comose menciono pero me sale ese error :s como podria solucionarlo
ResponderEliminarDataTable tmpEntrada = new DataTable();
Eliminarstring CnnStr = @" Provider=Microsoft.Jet.OLEDB.4.0; " +
"Data Source=C:\\Users\\Brandon\\Tutoria 3 capas\\BD\\BasedeDatos_Almacen.accdb; " +
"Jet OLEDB:Database Password=; Persist Security Info=False;";
Hola. Si usas access 2013. Cambia la version de conexion. es Microsoft.ACE.OLEDB.12.0...
Eliminarosea lo mismo q dice en el tuto. nomas que es 12.0. y cambia la extencion del archivo a accdb
DataTable tmpEntrada = new DataTable();
string CnnStr = @" Provider=Microsoft.Jet.OLEDB.12.0; " +
"Data Source=C:\\Users\\Brandon\\Tutoria 3 capas\\BD\\BasedeDatos_Almacen.accdb; " +
"Jet OLEDB:Database Password=; Persist Security Info=False;";
he hecho todo exactamente igual como esta en el tutorial, pero cuando voy a grabar o agregar me sale este error:
Eliminar"D:\DOCS\TYRODEVELOPER\almacen.mdb no es una ruta de acceso valida"
no se que hacer porfavor ayuda :(
ya logre terminar todo el tutorial
ResponderEliminarpero tengo una pregunta
suponiendo que el usuario agregó por error un producto a la lista
como sería el código para eliminarlo?
Se puede a medias con esto:
Eliminarprivate void lvEntrada_KeyDown(object sender, KeyEventArgs e)
{
if (Keys.Delete == e.KeyCode)
{
foreach (ListViewItem listViewItem in ((ListView)sender).SelectedItems)
{
listViewItem.Remove();
}
}
}
Sin embargo al agregar otro articulo, vuelve a aparecer el eliminado. imagino que el detalle es por la tabla temporal.
cuando ejecuto el boton grabar me sale un error que dice.. error de sintaxis cerca de '#.'
ResponderEliminarpor favor alguien me puede ayudar
Al darle al boton agregar me aparece un error
ResponderEliminarMicrosoft.Jet.OLEDB.12.0 Provider is not registered in the local machine'.
Alguien me puede ayudar? usé vs 2012 y acces 2016.
Saludos, como puedo descargar o conseguir todo de una vez?
ResponderEliminarGracias por el GRACIAS. Me alegra saber que les ha servido este pequeño esfuerzo. Saludos.
ResponderEliminar