para MANOLO
Publicado por fenix (97 intervenciones) el 27/04/2009 16:23:21
Saludos MANOLO.
Te comento lo que me a estado ocurriento.
De las dos recomendaciones, ambas las he probado. Con el metodo del formulario me funciono mientras lo tenia en desarrollo, pero cuando lo pose a produccion ya con multiples concurrencias, algunos usuarios iniciaron registros y no los terminaban durante una hora, (lo que significa que tomaban un numero pero no graban en el momento), otros usuarios tomaban el mismo numero, con el desenlace que se duplicaban los numeros. Esto me a obligado a generar el contador al momento de grabar el nuevo registro esto ya no me permite usar el metodo del formulario porque debe grabar primero..
Usando la otra tecnica. Te muestro el codigo usando SQL.
Este codigo la primera ves que lo corro me encuentra el numero mayor, tal como lo necesito. Lo que no entiendo es que continuo creando nuevos registros pero no los toma en cuenta, muestra el contador de la primera corrida.
Ej.
Numero Mayor antes de correr el SQL.
Año 2009
Numero mayor 149
Primera corrida - Encuentra el 150, se graba en el registro 1001
Segunda corrida - Encuentra el 150, se graba en el registro 1002
Tercera corrida - Encuentra el 150, se graba en el registro 1003
Cuarta corrida - Encuentra el 150, se graba en el registro 1004
Quinta corrida - Encuentra el 150, se graba en el registro 1005
Sexta corrida - Encuentra el 150, se graba en el registro 1006...
Algunas interrogantes que he tenido
--------------------------------------------------
- ¿No se corre el SQL realmente?
- ¿No bota la connexion y siempre busca en la misma instancia?
- ¿No graba en la DBF, inmediatamente?
- ¿Que puede estar ocurriendo?
Sub CreaNewGestion
Dim Path As String
Dim File As String
'------------------
CD = Chr(34) '--------- Comillas dobles para formar sentencias SQL
Path = CurrentDocument.Path '------ Via al documento
File = "LLTC01.DBF" '------ Nombre de archivo
mAnnio_Actual = Year(Today())
'----------------------- Inicializar variables
Set CON = New Connection
Set QRY = New Query
Set RST = New ResultSet
CON.ConnectTo("dBASE IV")
Set QRY.Connection = CON
QRY.TableName = Path + File
Set RST.Query = QRY
Table = Path + File
'------------ Ahora formamos la sentencia SQL. Sólo funciona la sentencia SELECT
'------------ no proebes con ninguna otra sentencia SQL, sólo va la SELECT.
QRY.SQL = "SELECT * FROM " & CD & Path & File & CD & " WHERE PERIODO ='" & mAnnio_Actual & "' ORDER BY cod_lla"
Set RST.Query = QRY
RST.Execute
RST.LastRow
' Messagebox "El último número es:" & RST.GetValue("cod_lla")
NewGestion = RST.GetValue("cod_lla")
NewGestion=Right(Str( Val(NewGestion) + 100001),5)
' Messagebox "El último número es:" & NewGestion
CurrentView.Body.COD_LLA.ReadOnly = False
'CurrentView.Body.COD_LLA.Text=Right(Str( Val(NewGestion) + 100001),5)
CurrentView.Body.COD_LLA.Text = NewGestion
' Messagebox "El último número es:" & CurrentView.Body.COD_LLA.Text
CurrentView.Body.COD_LLA.ReadOnly = True
'=================== fin de la secuencia
End Sub
Te comento lo que me a estado ocurriento.
De las dos recomendaciones, ambas las he probado. Con el metodo del formulario me funciono mientras lo tenia en desarrollo, pero cuando lo pose a produccion ya con multiples concurrencias, algunos usuarios iniciaron registros y no los terminaban durante una hora, (lo que significa que tomaban un numero pero no graban en el momento), otros usuarios tomaban el mismo numero, con el desenlace que se duplicaban los numeros. Esto me a obligado a generar el contador al momento de grabar el nuevo registro esto ya no me permite usar el metodo del formulario porque debe grabar primero..
Usando la otra tecnica. Te muestro el codigo usando SQL.
Este codigo la primera ves que lo corro me encuentra el numero mayor, tal como lo necesito. Lo que no entiendo es que continuo creando nuevos registros pero no los toma en cuenta, muestra el contador de la primera corrida.
Ej.
Numero Mayor antes de correr el SQL.
Año 2009
Numero mayor 149
Primera corrida - Encuentra el 150, se graba en el registro 1001
Segunda corrida - Encuentra el 150, se graba en el registro 1002
Tercera corrida - Encuentra el 150, se graba en el registro 1003
Cuarta corrida - Encuentra el 150, se graba en el registro 1004
Quinta corrida - Encuentra el 150, se graba en el registro 1005
Sexta corrida - Encuentra el 150, se graba en el registro 1006...
Algunas interrogantes que he tenido
--------------------------------------------------
- ¿No se corre el SQL realmente?
- ¿No bota la connexion y siempre busca en la misma instancia?
- ¿No graba en la DBF, inmediatamente?
- ¿Que puede estar ocurriendo?
Sub CreaNewGestion
Dim Path As String
Dim File As String
'------------------
CD = Chr(34) '--------- Comillas dobles para formar sentencias SQL
Path = CurrentDocument.Path '------ Via al documento
File = "LLTC01.DBF" '------ Nombre de archivo
mAnnio_Actual = Year(Today())
'----------------------- Inicializar variables
Set CON = New Connection
Set QRY = New Query
Set RST = New ResultSet
CON.ConnectTo("dBASE IV")
Set QRY.Connection = CON
QRY.TableName = Path + File
Set RST.Query = QRY
Table = Path + File
'------------ Ahora formamos la sentencia SQL. Sólo funciona la sentencia SELECT
'------------ no proebes con ninguna otra sentencia SQL, sólo va la SELECT.
QRY.SQL = "SELECT * FROM " & CD & Path & File & CD & " WHERE PERIODO ='" & mAnnio_Actual & "' ORDER BY cod_lla"
Set RST.Query = QRY
RST.Execute
RST.LastRow
' Messagebox "El último número es:" & RST.GetValue("cod_lla")
NewGestion = RST.GetValue("cod_lla")
NewGestion=Right(Str( Val(NewGestion) + 100001),5)
' Messagebox "El último número es:" & NewGestion
CurrentView.Body.COD_LLA.ReadOnly = False
'CurrentView.Body.COD_LLA.Text=Right(Str( Val(NewGestion) + 100001),5)
CurrentView.Body.COD_LLA.Text = NewGestion
' Messagebox "El último número es:" & CurrentView.Body.COD_LLA.Text
CurrentView.Body.COD_LLA.ReadOnly = True
'=================== fin de la secuencia
End Sub
Valora esta pregunta


0