Trato de hacer es una actualización de una base de datos Oracle a partir de unos archivo .dbf
Hola no se si te acuerda, yo creo que no te cuento lo que trato de hacer es una actualización de una base de datos oracle a partir de unos archivo dbf, es terrible por que ejecuto y se cae no se donde no envía ni error al rutearlo después con F8 me arroga el error que te comente al ver la base de datos efectivamente hizo una actualización pero no de todo lo que debería te envío mi código para ver si esta bien definido los cursores y todo eso gracias
¿Cuándo se cae? Aveces en el primer dbf que estoy tirando para actualiza otras el segundo y otras en el tercero, nada obedece a un patrón, el cual pueda llevarme a una deducción de problema, el programa lo corro en mi equipo y la base de datos en un servidor aparte,
gracias Soledad
Private Sub Form_Load()
(DECLARACION DE VARIABLES)
On Error GoTo errore
With nidProgramData
.cbSize = Len(nidProgramData)
.hwnd = Me.hwnd
.uId = vbNull
.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
.uCallbackMessage = WM_MOUSEMOVE
.hIcon = Me.Icon
.szTip = "Traspasa Datos .DBF (Sistema Variables Criticas)" & vbNullChar
End With
STRConeLocal = "DSN=dsn;UID=usuario;PWD=passs"
Set cntObj = New ADODB.Connection
With cntObj
.CursorLocation = adUseServer
.IsolationLevel = adXactReadCommitted
.Mode = adModeShareDenyNone
.Open STRConeLocal
End With
j = 0
sw = False
cont = 0
Set RsOra = New ADODB.Recordset
' aca saco todos los archivos dbf que debo tomar para la actualizacion con su respectiva datos y los envio en un recordset
RsOra.Open "SELECT * FROM ARCH_DBF", cntObj
' manipulo fechas con el fin e evaluar la fecha de actualizacion
fechaSys = Format(Date, "dd/mm/yyyy")
App.LogEvent "" & App.EXEName & "fechaSys" & fechaSys, 4
fechaTope = DateAdd("d", "-1", Day(fechaSys) & "/" & Month(fechaSys) & "/" & Year(fechaSys))
App.LogEvent "" & App.EXEName & "fechaTope" & fechaTope, 4
fechaini = DateAdd("d", "-7", fechaTope)
App.LogEvent "" & App.EXEName & "fechaini" & fechaini, 4
' mientras encuentre registro que tengan dbf para actualizar la base de datos oracle hago...
Do While Not RsOra.EOF
Bdnom_Arch = RsOra("NOMBRE_ARCHIVO")
Bdruta = RsOra("RUTA")
NumV = RsOra("NUM_VARIABLES")
BuscaDirBdDbase$ = Dir(Bdruta$)
iFECu = Right(Trim(Bdnom_Arch), 2)
iCod_material = Left(Right(Trim(Bdnom_Arch), 5), 2)
ScodiPlan = Mid(Trim(Bdnom_Arch), 3)
If Len(ScodiPlan) > 8 Then
iCod_planta = Left(ScodiPlan, 2)
Else
iCod_planta = Left(ScodiPlan, 1)
End If
If iFECu = "08" Then
j = 1
End If
'verifico que la ruta a los dbf sea correcta
If BuscaDirBdDbase$ = "" Then
MsgBox "La siguente Ruta no Fue Encontrada." & Bdruta
End
Else
DirBdDbase$ = Bdruta$
Set BdDbase = OpenDatabase(DirBdDbase$, False, False, "dbase III")
Set TbDbasedbf = BdDbase.OpenTable(Bdnom_Arch)
' Redimenciono el arrglego que guardara datos de actualzacion
ReDim MatiCod_An(NumV)
If Not TbDbasedbf.EOF Then
For I = 1 To NumV
MatiCod_An(I) = TbDbasedbf.Fields(j + I).SourceField
Next I
On Error GoTo leer
TbDbasedbf.MoveNext
End If
ReDim MatiCod_Uni(NumV)
If Not TbDbasedbf.EOF Then
For I = 1 To NumV
MatiCod_Uni(I) = TbDbasedbf.Fields(j + I)
Next I
TbDbasedbf.MoveNext
End If
' ahora comienzo a enviar la actualizacion
Do While Not TbDbasedbf.EOF
If Not IsNull(TbDbasedbf("FECHA")) Then
fechaBd = FormatDateTime(TbDbasedbf("FECHA"), vbShortDate)
' si llos datos estan dentro de los rango de fecha
VAR = DateDiff("d", fechaBd, fechaini)
If DateDiff("d", fechaBd, fechaini) <= 0 Then
If iFECu = "08" Then
iTurno = TbDbasedbf.Fields(1)
j = 1
End If
For I = 1 To NumV
iCod_analisis = MatiCod_An(I)
iCod_unidad = Trim(MatiCod_Uni(I))
If Not IsNull(TbDbasedbf.Fields(j + 1)) And (InStr(TbDbasedbf.Fields(j + 1), "-") = 0) Then
iValor = TbDbasedbf.Fields(j + 1)
Else
iValor = 0
End If
'inserto en la tabla correspondiente
If iFECu = "08" Then
SQL = "insert into CCALIDAD.HRS_08( COD_PLANTA,COD_MATERIAL,COD_ANALISIS ,COD_UNIDAD,FECHA,TURNO,VALOR) values ('" & iCod_planta & "', '" & iCod_material & "','" & iCod_analisis & "','" & UCase(Trim(iCod_unidad)) & "', to_date('" & TbDbasedbf("FECHA") & "','" & " dd / mm / rrrr'),'" & iTurno & "'," & iValor & ")"
Else
SQL = "insert into CCALIDAD.HRS_" & iFECu & "( COD_PLANTA,COD_MATERIAL,COD_ANALISIS ,COD_UNIDAD,FECHA,VALOR) values ('" & iCod_planta & "', '" & iCod_material & "','" & iCod_analisis & "','" & UCase(Trim(iCod_unidad)) & "', to_date('" & TbDbasedbf("FECHA") & "','" & " dd / mm / rrrr')," & iValor & ")"
End If
On Error GoTo Errores
'con execute genero la insercion
cntObj.Execute (SQL)
Next I
End If
End If
'avansa en el dbf
TbDbasedbf.MoveNext
Loop ' fin loop que recorre el dbf
TbDbasedbf.Close ' sierro el objeto table que me conecta a los dbf
Set TbDbasedbf = Nothing ' lo limpuo
BdDbase.Close' sierro el obj data base
Set BdDbase = Nothing ' lo limpio
End If
RsOra.MoveNext ' me muevo en el recorsedt para buscar el nuevo nombre del otro dbf con se respectivos datos
Loop ' fin loop que recorre el recorsedt que contiene todos los dbf a actualizar
RsOra.Close ' lo sierra
Set RsOra = Nothing ' lo limpia
cntObj.Close' sierra la conexion
Set cntObj = Nothing' la limpia
errore:
App.LogEvent "" & App.EXEName & "Paso Linea" & wpaso & Err.Number & Err.Description, vbLogEventTypeError
Resume Next
leer:
Resume Next
Errores:
VAR = Err.Description
Resume Next
End Sub
Private Sub Form_Resize()
' Llamado a la API generalmente se pone el en evento resize
Shell_NotifyIconA NIM_ADD, nidProgramData
Me.Hide
End Sub
¿Cuándo se cae? Aveces en el primer dbf que estoy tirando para actualiza otras el segundo y otras en el tercero, nada obedece a un patrón, el cual pueda llevarme a una deducción de problema, el programa lo corro en mi equipo y la base de datos en un servidor aparte,
gracias Soledad
Private Sub Form_Load()
(DECLARACION DE VARIABLES)
On Error GoTo errore
With nidProgramData
.cbSize = Len(nidProgramData)
.hwnd = Me.hwnd
.uId = vbNull
.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
.uCallbackMessage = WM_MOUSEMOVE
.hIcon = Me.Icon
.szTip = "Traspasa Datos .DBF (Sistema Variables Criticas)" & vbNullChar
End With
STRConeLocal = "DSN=dsn;UID=usuario;PWD=passs"
Set cntObj = New ADODB.Connection
With cntObj
.CursorLocation = adUseServer
.IsolationLevel = adXactReadCommitted
.Mode = adModeShareDenyNone
.Open STRConeLocal
End With
j = 0
sw = False
cont = 0
Set RsOra = New ADODB.Recordset
' aca saco todos los archivos dbf que debo tomar para la actualizacion con su respectiva datos y los envio en un recordset
RsOra.Open "SELECT * FROM ARCH_DBF", cntObj
' manipulo fechas con el fin e evaluar la fecha de actualizacion
fechaSys = Format(Date, "dd/mm/yyyy")
App.LogEvent "" & App.EXEName & "fechaSys" & fechaSys, 4
fechaTope = DateAdd("d", "-1", Day(fechaSys) & "/" & Month(fechaSys) & "/" & Year(fechaSys))
App.LogEvent "" & App.EXEName & "fechaTope" & fechaTope, 4
fechaini = DateAdd("d", "-7", fechaTope)
App.LogEvent "" & App.EXEName & "fechaini" & fechaini, 4
' mientras encuentre registro que tengan dbf para actualizar la base de datos oracle hago...
Do While Not RsOra.EOF
Bdnom_Arch = RsOra("NOMBRE_ARCHIVO")
Bdruta = RsOra("RUTA")
NumV = RsOra("NUM_VARIABLES")
BuscaDirBdDbase$ = Dir(Bdruta$)
iFECu = Right(Trim(Bdnom_Arch), 2)
iCod_material = Left(Right(Trim(Bdnom_Arch), 5), 2)
ScodiPlan = Mid(Trim(Bdnom_Arch), 3)
If Len(ScodiPlan) > 8 Then
iCod_planta = Left(ScodiPlan, 2)
Else
iCod_planta = Left(ScodiPlan, 1)
End If
If iFECu = "08" Then
j = 1
End If
'verifico que la ruta a los dbf sea correcta
If BuscaDirBdDbase$ = "" Then
MsgBox "La siguente Ruta no Fue Encontrada." & Bdruta
End
Else
DirBdDbase$ = Bdruta$
Set BdDbase = OpenDatabase(DirBdDbase$, False, False, "dbase III")
Set TbDbasedbf = BdDbase.OpenTable(Bdnom_Arch)
' Redimenciono el arrglego que guardara datos de actualzacion
ReDim MatiCod_An(NumV)
If Not TbDbasedbf.EOF Then
For I = 1 To NumV
MatiCod_An(I) = TbDbasedbf.Fields(j + I).SourceField
Next I
On Error GoTo leer
TbDbasedbf.MoveNext
End If
ReDim MatiCod_Uni(NumV)
If Not TbDbasedbf.EOF Then
For I = 1 To NumV
MatiCod_Uni(I) = TbDbasedbf.Fields(j + I)
Next I
TbDbasedbf.MoveNext
End If
' ahora comienzo a enviar la actualizacion
Do While Not TbDbasedbf.EOF
If Not IsNull(TbDbasedbf("FECHA")) Then
fechaBd = FormatDateTime(TbDbasedbf("FECHA"), vbShortDate)
' si llos datos estan dentro de los rango de fecha
VAR = DateDiff("d", fechaBd, fechaini)
If DateDiff("d", fechaBd, fechaini) <= 0 Then
If iFECu = "08" Then
iTurno = TbDbasedbf.Fields(1)
j = 1
End If
For I = 1 To NumV
iCod_analisis = MatiCod_An(I)
iCod_unidad = Trim(MatiCod_Uni(I))
If Not IsNull(TbDbasedbf.Fields(j + 1)) And (InStr(TbDbasedbf.Fields(j + 1), "-") = 0) Then
iValor = TbDbasedbf.Fields(j + 1)
Else
iValor = 0
End If
'inserto en la tabla correspondiente
If iFECu = "08" Then
SQL = "insert into CCALIDAD.HRS_08( COD_PLANTA,COD_MATERIAL,COD_ANALISIS ,COD_UNIDAD,FECHA,TURNO,VALOR) values ('" & iCod_planta & "', '" & iCod_material & "','" & iCod_analisis & "','" & UCase(Trim(iCod_unidad)) & "', to_date('" & TbDbasedbf("FECHA") & "','" & " dd / mm / rrrr'),'" & iTurno & "'," & iValor & ")"
Else
SQL = "insert into CCALIDAD.HRS_" & iFECu & "( COD_PLANTA,COD_MATERIAL,COD_ANALISIS ,COD_UNIDAD,FECHA,VALOR) values ('" & iCod_planta & "', '" & iCod_material & "','" & iCod_analisis & "','" & UCase(Trim(iCod_unidad)) & "', to_date('" & TbDbasedbf("FECHA") & "','" & " dd / mm / rrrr')," & iValor & ")"
End If
On Error GoTo Errores
'con execute genero la insercion
cntObj.Execute (SQL)
Next I
End If
End If
'avansa en el dbf
TbDbasedbf.MoveNext
Loop ' fin loop que recorre el dbf
TbDbasedbf.Close ' sierro el objeto table que me conecta a los dbf
Set TbDbasedbf = Nothing ' lo limpuo
BdDbase.Close' sierro el obj data base
Set BdDbase = Nothing ' lo limpio
End If
RsOra.MoveNext ' me muevo en el recorsedt para buscar el nuevo nombre del otro dbf con se respectivos datos
Loop ' fin loop que recorre el recorsedt que contiene todos los dbf a actualizar
RsOra.Close ' lo sierra
Set RsOra = Nothing ' lo limpia
cntObj.Close' sierra la conexion
Set cntObj = Nothing' la limpia
errore:
App.LogEvent "" & App.EXEName & "Paso Linea" & wpaso & Err.Number & Err.Description, vbLogEventTypeError
Resume Next
leer:
Resume Next
Errores:
VAR = Err.Description
Resume Next
End Sub
Private Sub Form_Resize()
' Llamado a la API generalmente se pone el en evento resize
Shell_NotifyIconA NIM_ADD, nidProgramData
Me.Hide
End Sub
1 respuesta
Respuesta de pjlm99
1