Sv Community El Salvador
Soporte y Tecnología => Programación => VB => Topic started by: ernestoelunico on October 13, 2008, 03:23:37 am
-
esto es usando el microsoft dao 3.51 para abrir la base de datos
Public ruta As String
Public db1 As DAO.Recordset
ruta = App.Path & "\Mi empresa\registros.mdb "
Set base = OpenDatabase(ruta, False, False, ";PWD=clave")
Set db1 = base.OpenRecordset _
("Select*from compra", dbOpenDynaset, dbOptimistic)
db1.AddNew
db1!Fecha = Calendar1.Value
db1!Concepto = Text7.text
db1!Debe = Val(Text2.text)
db1.Update
db1.close
no estoy seguro si es en el db1.update o db.close
-
3 cosas:
1. Adivinando me imagino que te estas refiriendo con db1 a un adodc. Lo siento ernestoelunico, pero el mismo tiempo que usas para redactar y elaborar la pregunta, asi es el tiempo y ganas que se invierte en responderla.
2. Haz realizado varias consultas y no has dado por finalizada la mayoría de ellas. Te recomiendo que vayas consulta por consulta y abras otra nueva hasta que finalices la anterior.
3. Con respecto a tu pregunta, eso se detalla en el MSDN:
ADODC ~ Close (http://msdn.microsoft.com/en-us/library/ms675814(VS.85).aspx)
ADODC ~ Update (http://msdn.microsoft.com/en-us/library/ms676529(VS.85).aspx)
-
2. Haz realizado varias consultas y no has dado por finalizada la mayoría de ellas. Te recomiendo que vayas consulta por consulta y abras otra nueva hasta que finalices la anterior.
ok vlad lo siento mucho ya cerre los temas resueltos lo q pasa es q se me habia olvidado hacerlo :phew: :phew: :phew: :phew:
cual quier otra observacionn soy todo oidos
por otro lado revisa mi primer mensaje ya agregue mas detalles
saluditos
-
Gracias por coloborar :thumbsup:
Y bueno, la respuesta no varia, como seguramente abras visto en los enlaces, el Update es el que se encarga de vaciar los datos a la base de datos.
-
d = Val(Text1) + Val(Text2)
h = Val(Text3) + Val(Text4) + Val(Text5) + Val(Text6)
c = 1
b = 0
If Text7.text = "" Or Text7.text = "Escriba aqui el concepto de la partida" Then
MsgBox "Error por favor introduzca un concepto para la partida", vbCritical
c = 0
Else
If d = h Then
If d <> 0 Then
If f = 1 Then
Call Form_Load
End If
If Combo1.text = "Compras" And c = 1 Then
If Text1.text <> 0 Then
db1.AddNew
db1!Fecha = Calendar1.Value
db1!Concepto = Text7.text
db1!Debe = Val(Text1.text)
db1.Update
End If
Else
b = 1
c = 0
End If
If Check2.Value = Checked Then
If Combo2.text = "IVA Credito Fiscal" And c = 1 Then
If Text2 <> 0 Then
db6.AddNew
db6!Fecha = Calendar1.Value
db6!Concepto = Text7.text
db6!Debe = Val(Text2.text)
db6.Update
End If
Else
b = 1
c = 0
End If
End If
If Check3.Value = Checked Then
If Combo3.text = "Caja" And c = 1 Then
If Text3 <> 0 Then
db2.AddNew
db2!Fecha = Calendar1.Value
db2!Concepto = Text7.text
db2!Haber = Val(Text3.text)
db2.Update
Else
If Combo3.text = "Banco" And c = 1 Then
If Text3 <> 0 Then
db3.AddNew
db3!Fecha = Calendar1.Value
db3!Concepto = Text7.text
db3!Haber = Val(Text3.text)
db3.Update
End If
Else
b = 1
c = 0
End If
End If
End If
End If
If Check4.Value = Checked Then
If Combo4.text = "Proveedores" And c = 1 Then
If Text4 <> 0 Then
db4.AddNew
db4!Fecha = Calendar1.Value
db4!Concepto = Text7.text
db4!Haber = Val(Text4.text)
db4.Update
End If
Else
If Combo4.text = "Acreedores" And c = 1 Then
If Text4 <> 0 Then
db5.AddNew
db5!Fecha = Calendar1.Value
db5!Concepto = Text7.text
db5!Haber = Val(Text4.text)
db5.Update
End If
Else
b = 1
c = 0
End If
End If
End If
If Check5.Value = Checked Then
If Combo5.text = "Documentos por Pagar " And c = 1 Then
If Text5 <> 0 Then
db8.AddNew
db8!Fecha = Calendar1.Value
db8!Concepto = Text7.text
db8!Haber = Val(Text5.text)
db8.Update
End If
Else
b = 1
c = 0
End If
End If
If Check1.Value = Checked Then
If Combo6.text = "IVA Percibido" And c = 1 Then
If Text6 <> 0 Then
db7.AddNew
db7!Fecha = Calendar1.Value
db7!Concepto = Text7.text
db7!Haber = Val(Text6.text)
db7.Update
End If
Else
c = 0
b = 1
End If
End If
Else
MsgBox "error todos los campos no pueden tener el mismo valor 0"
c = 0
End If
Else
MsgBox "Error valores incorrectos en el cargo y el Abono por favor verifique", vbCritical
c = 0
End If
End If
If b = 1 Then
MsgBox "Error elija una cuenta", vbCritical
c = 0
End If
If c = 1 Then
MsgBox "Datos guardados exitosamente", vbInformation
Text1.text = "0.00"
Text2.text = "0.00"
Text3.text = "0.00"
Text4.text = "0.00"
Text5.text = "0.00"
Text6.text = "0.00"
Text7.text = "Escriba aqui el concepto de la partida"
Command2.Caption = "Atras"
db1.Close
db2.Close
db3.Close
db4.Close
db5.Close
db6.Close
db7.Close
db8.Close
f = 1
End If
End Sub
yo tengo este codigo entonces para validar la escritura de los datos para obtimizar el codigo deberia entoces pasar los update hasta el finaldonde tengo los db.close
yo siento que me funciona pero no quiero dar lugar a errores en la adicion como duplicidad de informacion
-
En ese caso no, porque no siempre se van a producir todos los update y podrias ocasionar un error (por ej. hacer update en una tabla que no lo necesita o que no esta en condiciones der ser actualizada)
-
entonces en tu opinio esta bien el codigo... por que me preocupa qu epor ejemplo solo se valide el combo 1 los demas no y me escriba los datos del combo1 y cuando rorija los errores en tiempo de ejecucion como usuario me de problemas duplicando registro so mejor dicho registrandolos innesesariamente... :phew:
-
La verdad es que ahi tenes un solo spaggeti de codigo :phew:
Empezando porque en lugar de "c = 0" deberías usar de una vez Exit Sub.
Consejo: Evalua primero todas las condiciones de error posibles y termina con Exit Sub si alguna se cumple, asi vas a poder poner el codigo util depues de esas comprobaciones de error sin necesidad de preocuparte de tantas condiciones mezcladas.
Otra cosa: Siempre usa OPTION EXPLICIT :)
-
si pero para mandar un mensaje de alerta con el exit sub porq me botaria de la funcion y no podria mandar una alerta
-
...
Codigo
if Usuario_hizo_algo_malo = True then
msgbox "Por favor vuelva a leer el manual"
Exit sub
end if
...
-
si funciona la idea pero imaginate q llega a la mitad y se presenta el problema q de ahi para abajo ya nada sirve
siempre guardara los datos de arriba y no me srive asi yo quiero q hasta el fina q ya se haya comprobado todo ver si funciona o q para guardar los datos
-
Casualmente estaba leyendo esto y lo que esta al final es practicamente lo que queria explicar: Coding standards (http://trac.kmess.org/wiki/Coding%20standards) ( donde dice: Error handling ).
Hablemos con un ejemplo:
If Text7.text = "" Or Text7.text = "Escriba aqui el concepto de la partida" Then
MsgBox "Error por favor introduzca un concepto para la partida", vbCritical
c = 0
Else
...
Que pasa despues de eso?, nada, por que lo que esta en el "else" no se ejecuta, y despues esta la comprobación de "if c = 1 then..." que tampoco se cumple y luego termina el proceso.
Por casos asi te digo lo de "exit sub", que lo anterior quedaría asi:
If Text7.text = vbNullString Or Text7.text = "Escriba aqui el concepto de la partida" Then
MsgBox "Error por favor introduzca un concepto para la partida", vbCritical
Exit Sub
End If
Empezando por ahi ya te evitas el primer "else". Y luego en otras partes como: "If Combo1.text = "Compras" And c = 1 Then" te podes evitar el "And c = 1" puesto que sabes que si paso el exit sub anterior, entonces "c" por fuerza tiene que ser "1".
En fin, te lo digo porque si no cada vez se te va a complicar mas y mas el codigo innecesariamente y luego es que surgen las confusiones y los problemas.
-
excelende tu idea pero quizas fue mio el error al no saberme explicar y tenes razon me ahorro mas codigo
(http://farm4.static.flickr.com/3231/2958963351_8a1571d819.jpg?v=0)
el punto es que debe de cumplirse que debe de aver un cargo y un abono por lo menos y que la suma de los cargo debe de ser igual a la suma de los abonos de lo contrario no se puede escribir el archivo espero averme explicado
gracias :yahoo:
saludos
-
no pude evitar el notar que estas haciendo un sistema contable y que ese formalario es para generar partidas de compra y venta...por que no en lugar de los textbox ocupas un grid o un listview...si el problema es que vos queres validar primero....solo ingresas los datos al listview o al flexgrid si afectar nada en la base...luego haces un barrido por todo el listado actualizando cada vez....lo que haces es un while que termine cuando se llega al final de los registros en el ....pero vos queres que la partida cuadre....cada vez que agregas registros al grid lo que tenes que hacer es sumar las 2 columnas en donde estan los cargos y los abonos...yo los pondria en unos textbox para que puedan ver el descuadre...podes ocupar 3 textbox...unos con la suma de los debe y otro con la suma de los haberes....el tercero para que al cambiar los otros 2 te compare ambos textbox y te muestre el resultado si esta cuadrada la partida y si no cuanto es tu descuadre...creo que nada mas....lo que estas haciendo es solo un sistema contable..??
-
excelente obsevacion mi querido amigo pop486 asi es pero quize salir de lo comun utilizando algo mas grafico y la aplicacion de este sistema es para estudiantes no es tan completo sino lo elemental todas las ventanas se parecen a esa el catalogo de cuentas por asi desirlo esta incluido en el sistema en los combobox y hay tablas en una base de datos que contienen los nombres de las cuentas.
si te vijas en el codigo este solo es para crear los libros mayores aun no tengo el libro diario porq tengo problemas al hacer las partidas ya que no deja sangria para las cuentas abonadas y no se como ir cambiando el numero de la partida
para lo ultimo tenia pensado usar contadores que lo fuera guardando en un .dat y que al hacer la partida tomar el valor lo uniera a la cadena de caracteres "Partida" y luego guardara ese contador pero sumado 1
no se cualquier sugerencia es bien benida date una vuelta por este lado
Ayuda programa de contabilidad sugerencias (http://www.svcommunity.org/forum/index.php?topic=55659.0)
-
yo lo hago algo asi....
For i = 1 To ListView1.ListItems.Count
If ild = 1 Then
Rst_Data.Open "select * from contransaccion", cn, adOpenStatic, adLockOptimistic
Rst_Data.AddNew
Rst_Data!numpartida = NPARTIDA
Rst_Data!ctacontable = ListView1.ListItems(i)
Rst_Data!concepto = ListView1.ListItems(i).SubItems(2)
Formato = "#######.00"
If ListView1.ListItems(i).SubItems(3) <> 0 Then
Rst_Data!tip_mov = "DEUDOR"
valor = Format(ListView1.ListItems(i).SubItems(3), Formato)
Rst_Data!monto = valor
Else
Rst_Data!tip_mov = "ACREEDOR"
valor = Format(ListView1.ListItems(i).SubItems(4), Formato)
Rst_Data!monto = valor
End If
Rst_Data!fecha = DTPicker1
Rst_Data!tip_par = "DIARIO"
Rst_Data!estado = "NO AFECTA"
Rst_Data!idmes = idm
Rst_Data.Update
ElseIf ild = 2 Then
Rst_Data.Open "select * from contransaccion", cn, adOpenStatic, adLockOptimistic
Rst_Data.AddNew
Rst_Data!numpartida = NPARTIDA
Rst_Data!ctacontable = ListView1.ListItems(i)
Rst_Data!concepto = ListView1.ListItems(i).SubItems(2)
Formato = "#######.00"
If ListView1.ListItems(i).SubItems(3) <> 0 Then
Rst_Data!tip_mov = "DEUDOR"
valor = Format(ListView1.ListItems(i).SubItems(3), Formato)
Rst_Data!monto = valor
Else
Rst_Data!tip_mov = "ACREEDOR"
valor = Format(ListView1.ListItems(i).SubItems(4), Formato)
Rst_Data!monto = valor
End If
Rst_Data!fecha = DTPicker1
Rst_Data!tip_par = "INGRESO"
Rst_Data!estado = "NO AFECTA"
Rst_Data!idmes = idm
Rst_Data.Update
ElseIf ild = 3 Then
Rst_Data.Open "select * from contransaccion", cn, adOpenStatic, adLockOptimistic
Rst_Data.AddNew
Rst_Data!numpartida = NPARTIDA
Rst_Data!ctacontable = ListView1.ListItems(i)
Rst_Data!concepto = ListView1.ListItems(i).SubItems(2)
Formato = "#######.00"
If ListView1.ListItems(i).SubItems(3) <> 0 Then
Rst_Data!tip_mov = "DEUDOR"
valor = Format(ListView1.ListItems(i).SubItems(3), Formato)
Rst_Data!monto = valor
Else
Rst_Data!tip_mov = "ACREEDOR"
valor = Format(ListView1.ListItems(i).SubItems(4), Formato)
Rst_Data!monto = valor
End If
Rst_Data!fecha = DTPicker1
Rst_Data!tip_par = "EGRESO"
Rst_Data!estado = "NO AFECTA"
Rst_Data!idmes = idm
Rst_Data.Update
End If
Rst_Data.Close
Next i
solo recorro un listview donde tengo todos los datos cargados para despues actualizar la tabla....
con lo del numero de la partida....por que no solo haces una consulta...llamas a la tabla le decis que se mueva al ultimo registro y le sumas uno...y alli tenes el siguiente numero que va....aunque la consulta quizas sea mas complicada si llevas periodos contables y meses para cada periodo que seria lo ideal....
-
pensaba en la solucion de eso tratar de llevar varias base de datos por mes o meter un filtro para al hacer la consulta lo haga por meses pero lio de hacer base de datos por meses seria meter el ultimo registro del diario q tenga la tabla si el salgdo diferente de cero al primer registros de las tablas del siguiente mes