Autogenerar código ayudame

La idea es autogenerar un código (100220110001) que es la fecha 10022011 más un correlativo de 4 dígitos (0001)
Por ejemplo
fecha 10/02/2011
Registro 1 (100220110001)
Registro 2 (100220110002)
...
fecha 11/02/2011
Registro 1 (110220110001)
Registro 2 (110220110002)
Haci quiero el formato del código pero hasta aquí llegue por favor ayudame
el problema esta con el primer registro del día ya que cuando hago la consulta no encuentra ningún registro y me sale error y no se como depurarlo
mando el código en vb 2008 con access 2007 gracias
Dim rs As ADODB.Recordset
        Dim maxcodigo As String
        Dim y, mm, m, d As String
        Dim cadena, aumenta As String
        d = dtp1.Value.Date.ToString("dd")
        mm = dtp1.Value.Date.Month.ToString
        If Len(mm) = 1 Then
            m = 0 & dtp1.Value.Date.Month.ToString
        Else
            m = dtp1.Value.Date.Month.ToString
        End If
        y = dtp1.Value.Date.ToString("yyyy")
        cadena = d & m & y
        sql = "SELECT MAX(idpedido)FROM pedidos where idpedido like '%" & cadena & "%'"
        rs = conexion.Execute(sql)
'aqui me manda error cuando no encuentra ningun registro
        maxcodigo = rs.Fields(0).Value
'aqui aumento
        aumenta = Mid(maxcodigo, 9) + 1
'aqui supuestamente es cuando no encuentra registro aumenta en uno
        'txtnumcuota.Text = cadena & "0001"
'aqui encuentra registro y lo suma 1
        txtnumcuota.Text = cadena & "000" & aumenta

1 respuesta

Respuesta
1
Primero que nada ese código parece VB6 y no 2008 que comentas, trabajas muy a lo viejo.
Segundo, el Recordset es antiguo, lento y no puedes manejar cosas como la que te pasan.
Cambia la forma de conectar a la base de datos y usa DataSet para cargar tus datos, con DataSet podrás manejar mejor los errores, y si la consulta devuelve 0 registro no te dará error.
Te dejo un link que te da un ejemplo de como conectar con VB2008 a Access (sin seguir en lo arcaico) y da un ejemplo de DataSet.
http://social.msdn.microsoft.com/Forums/es/vbes/thread/567ce165-6df9-4dc5-a7de-6898e0a2cda5
Si tienes dudas me lo haces saber.
Gracias por la sinceridad amigo experto te hice caso y averigüe lo que me dices con dataset pero en internet no hay muchos ejemplos demostrativos estoy haciendo un pequeño sistemita basado en información que me dio mi enamorada de su trabajo que no tiene sistema y utilizan excel para todo (esto lo hice como un reto para mi no remunerado) y estoy tratando de cambiar al dataset pero es un poco difícil como entenderás no se si podrías mandarme un pequeño ejemplo de inserción, update, eliminación, consultas con tablas relacionadas, etc con dataset en visual 2008 estoy utilizando access 2007 algo pequeño nada más que me sirvar de guía soy de perú por cierto todo lo que aprendí lo hice de internet y algunos cursillos por allí pero no sabia que era antiguito jajaja mira te mando el sistema que estoy haciendo y haci me dices si voy por buen camino falta depurar mucho
entra a esta página https://www.dropbox.com/
password 123456 se encuentra en la carpeta public se llama natural (seguramente debes arreglar la ruta de la base de datos )
El sistema se trata de compra y ventas y control de pagos de cuotas de productos naturales al contado 40, prepago 45 (2 cuotas de 22.50 pagado la primera en ese momento ) y crédito 50(5 cuotas de 10 la primera pagado en ese momento)
por otra parte
con este código me salido como yo quería gracias a tu idea pero en la salida del resultado en t1 no me convence
Dim y, mm, m, d As String
        Dim cadena, aumenta As String
        d = dtp1.Value.Date.ToString("dd")
        mm = dtp1.Value.Date.Month.ToString
        If Len(mm) = 1 Then
            m = 0 & dtp1.Value.Date.Month.ToString
        Else
            m = dtp1.Value.Date.Month.ToString
        End If
        y = dtp1.Value.Date.ToString("yyyy")
        cadena = d & m & y
        Dim fila As Integer = 0
        Dim ds As New DataSet
        Dim cnn As New OleDb.OleDbConnection("provider = Microsoft.jet.oledb.4.0;Data source = C:\Users\marco\NARTURAL\connecion\bin\Debug\NATURAL.mdb;user id = admin;password =;")
        Dim consulta As New OleDb.OleDbDataAdapter("SELECT MAX(idpedido) as [max]  FROM pedidos where idpedido like '%" & cadena & "%'", cnn)
        Dim maxcodigo As New DataTable()
        consulta.Fill(maxcodigo)
        Dim valor As String
        valor = Convert.ToString(maxcodigo.Rows(0)("max"))
//// aqui en la salida del t1 cuando lo encuentra aumenta 1 perooooooooo
/////por ejemplo si esta el registro 110220110009 (12 caracteres) con este
//////procedimiento devolveria 1102201100010 (13 caracteres) y como tu sabes q esta //////es la llave primaria va a mandar error
////// ¿Existe alguna manera de corregirlo yo lo puedo hacer un if y a la fuerza arreglarlo como lo hice más arriba con el mes (me salia un dígito y yo quería que me muestre los los dígitos) esa es mi pregunta? (Bueno si la hay mi profesor lo hizo pero no me acuerdo ayudame por favor )
        If valor <> "" Then
            aumenta = Mid(valor, 9) + 1
            t1.Text = cadena & "000" & aumenta
        Else
            t1.Text = cadena & "0001"
        End If
        Me.DataGridView1.DataSource = maxcodigo  / / solamente para q me de la idea q esta en la variable
este ejemplo esta al ejecutar ----------te vas a procesos - ventas -ingresar pedido - te vas al boton buscar seleccionas un registro y presionas backspace tes vas al boton cancelacion cuotas y t sale una ventanita donde se paga las cuotas (me falta depurarlo pero funciona) y alli hay el datagridview1 (el mas chiquito),datepicker y el t1.text alli y un boton 2 presiona y sale el codigo autogenerado
gracias
Primero que nada, el DataSet o RecordSet no son ejecutantes de sentencias SQL, son receptores de lo que esas sentencias responden.
DataSet es para trabajar desconectado, es decir, sin conexión a la BD.
Te dejo muchos ejemplos de trabajar con DataSet:
http://www.google.com/search?aq=f&sourceid=chrome&ie=UTF-8&q=dataset#sclient=psy&hl=es&q=dataset%20site%3Aelguille.info&aq=&aqi=&aql=&oq=&pbx=1&fp=2df68ec5bf9c96e9&pf=p&pdl=3000
Yo también vivo en Perú.
Discupa para entrar a dropbox click sobre log in tienes que poner mi correo [email protected] y el código 123456
Gracias por la páginas dadas amigo experto una pregunta sabes que estoy programando en visual basic 2008 con access 2007 y mi pregunta es como puedo hacer filtros por rango fechas lo que pasa es que hago el filtro y para algunas fechas me cambia el mes por el día en tiempo de ejecución (lo se por que lo depuro y veo eso valores en el datapicker ) y el datagridview no me muestranada y no se como solucionarlo me dijeron que c lo haga con parámetros pero no encuentro ningún ejemplo que me funque a mi aplicación (el problema no es la consulta ya que me defiendo bastante en eso el problema es como programarlo)
Gracias de antemano
Usa Between de SQL para un rango de fecha.
Para que no te suceda eso, debes generar la fecha y guardarla siempre igual.
Puedes hacer algo así:
Código:
Dim cultura As IFormatProvider = new CultureInfo("es-ES",true)
DateTime.Parse(Fecha,cultura)
Dentro del DateTime. Parse está la variable Fecha que debes tu asignarle o cambiar por la fecha a cambiar.
CultureInfo te permite trabajar con distintos formatos de fecha, debes usarlo para asentar las fecha en la BD y para trabajarla.
Más info de CultureInfo:
http://msdn.microsoft.com/es-es/library/87k6sx8t(v=vs.80).aspx
Si tienes dudas me lo haces saber.
no me sale ayudame tengo registro en el dia 12/02/2011 pero el filtro sale vacio verifico la variable y la fecha esta bien pero no lo filtro y la consulta esta bien por favor ayudame
dim f2, f1 as string
dim cultura as iformatprovider = new globalization.cultureinfo("es-es", true)
f1 = dtpinicio.value.date
f2 = dtpfin.value.date
datetime.parse(f1, cultura)
datetime.parse(f2, cultura)
dim conpedidos as new oledb.oledbdataadapter("select pedidos.fechapedido as [fecha pedido], pedidos.estado as [estado pedido], pedidos.idpedido as [numero pedido],pedidos.numficha as [numero ficha], clientes.idcliente as [codigo cliente], clientes.apecliente as [apellido cliente], clientes.nomcliente as [nombre cliente], clientes.dni as [dni], clientes.telfcasa as [telefono casa], clientes.teltrabajo as [telefono trabajo], clientes.celular as [celular], clientes.direccion as [direccion], distritos.nomdistrito as [distrito], empleados.idempleado as [codigo empleado], empleados.apeempleado as [apellido empleado], empleados.nomempleado as [nombre empleado],pedidos.totalinicial as [total inicial],pedidos.totalpendiente as [total pendiente],pedidos.totalcobrado as [total cobrado] from distritos, clientes, empleados, pedidos where fechapedido between #" & f1 & "# and #" & f2 & "# and clientes.idcliente=pedidos.idcliente and empleados.idempleado=pedidos.idempleado and distritos.iddistrito=clientes.iddistrito and distritos.iddistrito=empleados.iddistrito and pedidos.estado like '%" & cmbest.text & "%' and pedidos.idpedido like '%" & txtnumpedido.text & "%' and pedidos.numficha like '%" & txtnumficha.text & "%' and  clientes.apecliente like '%" & txtapecli.text & "%' and  clientes.nomcliente like '%" & txtnomcli.text & "%' and empleados.apeempleado like '%" & txtapevend.text & "%' and empleados.nomempleado like '%" & txtnomvend.text & "%' ", cnn)
dim ds as new dataset
conpedidos.fill(ds)
dtvpedidos.datasource = ds.tables(0)
Primero que nada está echo una chanfaina. No entiendo nada.
Segundo, si la fecha en la BD es diferente a la que le mandas para consular, ni aún uses el CultureInfo podrás obtener un resultado, debes cambiar la fecha al tipo que tienes en tu BD.
Pásame el código en un TXT o algo que esté con forma así se puede leer así como me lo pones no entiendo ni J.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas