Newsgroup: it.comp.appl.access
Titolo: cambiare posizione ai caratteri di un campo

Ho questa situazione; nel campo di una tabella ci sono n articoli del tipo:
X1234567890
Vorrei creare un'altra tabella in cui i caratteri di quel campo si scambiano 
di posizione e gli articoli diventano:
X4569012378
Come risolvo?
Grazie e saluti al ng. 

 ha scritto nel messaggio 
news:49140f97$0$1083$4faf...@reader2.news.tin.it...

mid left right? vedi help 

 mid left right? vedi help
Be si, MID direi... fin li ci sono!
Pensavo di creare un array tipo:
For n=1 to 11
MyArray(n)=mid(([articolo]);n;1)
next n
 e ricostruire l''articolo richiesto con qualcosa tipo:
articolonew=MyArray(1)&MyArray(5)&MyArray(6)&MyArray(7)&MyArray(10)&MyArray(11)&MyArray(2)&MyArray(3)&MyArray(4)&MyArray(8)&MyArray(9)
Ma come imposto il resto?
Cioč: come faccio a leggere tutti i dati della tabella e creare la nuova 
tabella con i nuovi articoli? 

 ha scritto nel messaggio 
news:49140f97$0$1083$4faf...@reader2.news.tin.it...

Prima di tutto bisogna stabilire una regola, un criterio:
come deve avvenire il cambio di posizione dei singoli caratteri?
Questa regola ha un solo criterio?
Se sì, esplicita il criterio. P.e.
Primo carattere invariato, ultimo carattere diventa il secondo, il penultimo 
il terzo, il secondo l'ultimo...e così via.
Sulla base del o dei criteri si passa alla costruzione dell'algoritmo.
Fatto questo sarà quasi un gioco da ragazzi accodare il nuovo valore 
risultante ad una seconda tabella esistente o da creare.
Ciao, Carlo 

 risultante ad una seconda tabella esistente o da creare.
Il criterio l'ho esplicitato nel post precedente, desumibile da:
articolonew=MyArray(1)&MyArray(5)&MyArray(6)&MyArray(7)&MyArray(10)&MyArray(11)&MyArray(2)&MyArray(3)&MyArray(4)&MyArray(8)&MyArray(9)

 ha scritto nel messaggio 
news:49142fc9$0$18154$4faf...@reader3.news.tin.it...

Dato per buono questo criterio io farei così:
creao una tabella TblCriterio con al suo interno un solo campo "Criterio" di 
tipo numerico, chiave primaria; gli scrivo dentro la mia sequenza (un numero 
per ogni record)
1
5
6
7
10
...ecc
Poi una semplice funzione del tipo (uso DAO):
Public Function DimmiNuovaStringa(XX As String) As String
'a XX devi passare la stringa originale
'X1234567890
Dim rcs As Recordset, i As Integer, NuovaStringa As String
Set rcs = CurrentDb.OpenRecordset("TblCriterio")
rcs.MoveLast
rcs.MoveFirst
For i = 1 To rcs.RecordCount
NuovaStringa = NuovaStringa & Mid(XX, rcs!criterio, 1)
rcs.MoveNext
Next i
rcs.Close
Set rcs = Nothing
DimmiNuovaStringa = NuovaStringa
End Function
Questo è solo un esempio e ci possono essere altre strade, ma a me sembra 
molto veloce, modificabile a piacere e semplice da realizzare.
Ciao, Carlo 

> [cut]

Grande Carlo! :)
L'ho provato in una maschera e tutto funziona perfettamente. Ho solo 
aggiunto il riferimento ad ADO in:
Dim rcs As ADO.Recordset, i As Integer, NuovaStringa As String
Ora dovrei processare l'intera tabella con i vecchi valori e crearne una con 
quelli nuovi... mi metteresti sulla strada? 

 Dim rcs As DAO.Recordset, i As Integer, NuovaStringa As String

 ha scritto nel messaggio 
news:491802ae$0$40302$4faf...@reader5.news.tin.it...

Ok.
Il tutto è perfettamente gestibile con due recordset:
il primo è la tabella(vecchia), la seconda la nuova.
La funzione può essere tranquillamente trasformata in una sub perchè non 
restituisce nulla;
anche la variabile XX può essere eliminata:
Public Sub DimmiNuovaStringa()
Dim rcs As Recordset, i As Integer, NuovaStringa As String
Dim RcsVecchia As Recordset, RcsNuova As Recordset
Dim ii As Integer
Set RcsVecchia = CurrentDb.OpenRecordset("Tbl1")
Set RcsNuova = CurrentDb.OpenRecordset("Tbl2")
RcsVecchia.MoveLast
RcsVecchia.MoveFirst
Set rcs = CurrentDb.OpenRecordset("TblCriterio")
rcs.MoveLast
rcs.MoveFirst
For ii = 1 To RcsVecchia.RecordCount
With RcsNuova
.AddNew
For i = 1 To rcs.RecordCount
NuovaStringa = NuovaStringa & Mid(RcsVecchia!CampoDaLeggere, rcs!criterio, 
1)
rcs.MoveNext
Next i
!CampoDaAggiornare = NuovaStringa
.Update
End With
RcsVecchia.MoveNext
NuovaStringa = ""
rcs.MoveFirst
Next ii
RcsVecchia.Close
Set RcsVecchia = Nothing
RcsNuova.Close
Set RcsNuova = Nothing
rcs.Close
Set rcs = Nothing
End Sub
Ciao, Carlo