Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

partir un campo

Estas en el tema de partir un campo en el foro de Bases de Datos General en Foros del Web. hola a todos, tengo en una tabla un campo de la siguiente forma: 00.00.00000 y quiero partir ese campo justo a la altura de los ...
  #1 (permalink)  
Antiguo 25/05/2005, 08:47
 
Fecha de Ingreso: octubre-2003
Mensajes: 392
Antigüedad: 20 años, 6 meses
Puntos: 1
partir un campo

hola a todos, tengo en una tabla un campo de la siguiente forma:

00.00.00000 y quiero partir ese campo justo a la altura de los puntos y olvidarme de los puntos y crear una tabla con 3 campos nuevos y dejar el resto de los campos igual.

Estoy hablando de Access. Alguien puede ayudarme.


Saludos
  #2 (permalink)  
Antiguo 25/05/2005, 09:54
 
Fecha de Ingreso: abril-2002
Mensajes: 1.014
Antigüedad: 22 años
Puntos: 8
Puedes hacerlo creando previamente los 3 campos, y luego programas un módulo (en vbA) recorres cada registro, recortas la cadena y la vas guardando en cada campo, una cosa así:

Código:
Dim rs As New ADODB.Recordset
Dim sql

rs.Open "select [REF ACTUAL],[REF NUEVA],[REG INTERNO],[OBSERVACIONES] from AGAETE", CurrentProject.Connection, adOpenDynamic, adLockBatchOptimistic


While Not rs.EOF
  
    'Separar la REFERENCIA ACTUAL en UTM y PLANO
    If (rs.Fields("REF ACTUAL") <> "") Then
    
        sql = "UPDATE AGAETE SET Referencia_Actual_UTM = '" & Mid(rs.Fields("REF ACTUAL"), 1, 7) & "' WHERE [REF ACTUAL] = '" & rs.Fields("REF ACTUAL") & "'"
        CurrentProject.Connection.Execute sql
        
        sql = "UPDATE AGAETE SET Referencia_Actual_Plano = '" & Mid(rs.Fields("REF ACTUAL"), 8, 7) & "' WHERE [REF ACTUAL] = '" & rs.Fields("REF ACTUAL") & "'"
        CurrentProject.Connection.Execute sql
                
    End If
  #3 (permalink)  
Antiguo 27/05/2005, 00:00
 
Fecha de Ingreso: octubre-2003
Mensajes: 392
Antigüedad: 20 años, 6 meses
Puntos: 1
Gracias MikiBroki
pero con una tabla en access como creo un modulo en vba, en informes y formularios si me lo permite, pero con una tabla o consulta creo que no, se que estoy equivocado y se podrá, pero como se puede hacer.

Saludos
  #4 (permalink)  
Antiguo 27/05/2005, 02:15
 
Fecha de Ingreso: abril-2002
Mensajes: 1.014
Antigüedad: 22 años
Puntos: 8
Hola,

Al abrir una BASE DE DATOS tienes un menú en la parte izquierda, en el que seleccionas Módulos. Es así desde Access 2000 creo.

Sino también puedes acceder desde el menú "Insertar, Módulo de Clase".

Desde el módulo puedes acceder a cualquier tabla de la BD.

Saludos.
  #5 (permalink)  
Antiguo 06/06/2005, 10:23
 
Fecha de Ingreso: octubre-2003
Mensajes: 392
Antigüedad: 20 años, 6 meses
Puntos: 1
hola, estoy tratando de hacerlo, hasta ahora me ha sido imposible, pero tengo algunas dudas.

ADODB.- esto es el nombre de mi base de datos donde está ese campo 00.00.000000 no?
[REF ACTUAL],[REF NUEVA],[REG INTERNO],[OBSERVACIONES].- porque son 4 referencias y no 3, porque eso son los "3" campos que creo aparte no es así?

Perdona mi ignorancia y muchas gracias
  #6 (permalink)  
Antiguo 06/06/2005, 11:47
 
Fecha de Ingreso: abril-2002
Mensajes: 1.014
Antigüedad: 22 años
Puntos: 8
Buenas,

El nombre de la BD no necesitas indicarlo, pues el módulo se guarda en el mismo fichero de la BD, y desde él ya accedes a las tablas que ésta posee sin necesidad de conexión.

Con ADODB.RecordSet creas una variable del tipo Recordset (rs), que es la que usas para recoger lo que te devuelve la consulta con:

rs.Open "SELECT...."

El cuarto campo tienes razón, no es necesario... temas de copy/paste... y es el nombre de tu campo (entre corchetes)

Y el nombre de la TABLA es el que va después del FROM.

Un saludo.

Última edición por MikiBroki; 06/06/2005 a las 11:59
  #7 (permalink)  
Antiguo 06/06/2005, 11:58
 
Fecha de Ingreso: abril-2002
Mensajes: 1.014
Antigüedad: 22 años
Puntos: 8
Se me olvidaba, fíjate que los [campos] que ves en el SELECT son para recoger en la consulta los valores de los que te interesan de la tabla (realmente en esa porción de código con el primero bastaba).

lo que hace a partir del IF es: si el registro actual contiene algo, entonces:

1º) Le das como valor al campo Referencia_Actual_UTM, los siete primeros caracteres del campo REF ACTUAL

2º) Le das como valor al campo Referencia_Actual_Plano, los siete caracteres a partir del 8º (incluido) del campo REF ACTUAL

Esto se podía poner todo en la misma sentencia SQL, pero lo hago así para que sea más claro a la hora de leer el código.

Para cerrar el bucle (no creí necesario ponerlo):

Código:
    rs.MoveNext
Wend
Porque sino estarías en un bucle infinito.

Salu2
  #8 (permalink)  
Antiguo 06/06/2005, 23:59
 
Fecha de Ingreso: octubre-2003
Mensajes: 392
Antigüedad: 20 años, 6 meses
Puntos: 1
Mira si está correcto porfavor, pero al ejecutarlo me da un error en el primer sql y me marca lo siguiente:
CurrentProject.Connection.Execute sql

Cual puede ser el problema.
Saludos y muchas gracias

Option Compare Database


Sub mcSepararCodigos()
Dim rs As New ADODB.Recordset
Dim sql

rs.Open "select [Codigo]from VentasPeriodoArticuloNoAgrup", CurrentProject.Connection, adOpenDynamic, adLockBatchOptimistic


While Not rs.EOF

'Separar la REFERENCIA ACTUAL en Familia, SubFamilia y Artículo
If (rs.Fields("Codigo") <> "") Then

sql = "UPDATE AGAETE SET Referencia_familia = '" & Mid(rs.Fields("Codigo"), 1, 2) & "' WHERE [Codigo] = '" & rs.Fields("Codigo") & "'"
CurrentProject.Connection.Execute sql

sql = "UPDATE AGAETE SET Referencia_subfamilia = '" & Mid(rs.Fields("Codigo"), 4, 2) & "' WHERE [Codigo] = '" & rs.Fields("Codigo") & "'"
CurrentProject.Connection.Execute sql

sql = "UPDATE AGAETE SET Referencia_articulo = '" & Mid(rs.Fields("Codigo"), 7, 8) & "' WHERE [Codigo] = '" & rs.Fields("Codigo") & "'"
CurrentProject.Connection.Execute sql

End If
Wend
End Sub
  #9 (permalink)  
Antiguo 07/06/2005, 00:30
 
Fecha de Ingreso: abril-2002
Mensajes: 1.014
Antigüedad: 22 años
Puntos: 8
Mira a ver si es que no has puesto un espacio entre el campo y el FROM (y que tengas esos campos en tu tabla...):

[Codigo]from
  #10 (permalink)  
Antiguo 07/06/2005, 02:46
 
Fecha de Ingreso: octubre-2003
Mensajes: 392
Antigüedad: 20 años, 6 meses
Puntos: 1
Si tengo el espacio y si tengo ese campo.

Podrías mandarme esa base de datos donde tu has hecho el modulo para verlo insitu.
Mi mail es [email protected]

Saludos y muchas gracias por la ayuda que me estás prestando
  #11 (permalink)  
Antiguo 07/06/2005, 23:50
 
Fecha de Ingreso: octubre-2003
Mensajes: 392
Antigüedad: 20 años, 6 meses
Puntos: 1
o yo mandarte la mía para que vieras como lo he hecho
  #12 (permalink)  
Antiguo 08/06/2005, 07:49
 
Fecha de Ingreso: marzo-2005
Mensajes: 20
Antigüedad: 19 años, 1 mes
Puntos: 0
Avisame si no has podido resolver y te enviaré un pequeño código que te resolverá el problemita que tienes.

[email protected]
  #13 (permalink)  
Antiguo 09/06/2005, 08:03
 
Fecha de Ingreso: octubre-2003
Mensajes: 392
Antigüedad: 20 años, 6 meses
Puntos: 1
muchas gracias ricardo de verdad, eres un fenómeno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:29.