Newsgroup: it.comp.lang.visual-basic
Titolo: [Semi OT][DAO] Equivalente di 'Replace' in query

Ho un problemino piuttosto urgente,
qualcuno sa se esiste una funzione equivalente alla replace, da utilizzare
direttamente all'interno di una query Access?
mi spiego: dovrei fare una INSERT in una tabella (diciamo Tabella1) con una
SELECT (su Tabella2), ma uno dei campi di Tabella2 contiene un carattere in
ogni record che devo sostituire.
Non vorrei fare un ciclo poichè i record sono molti e la query va eseguita
spesso.
Quindi come posso fare senza la replace (che JET non conosce)?
grazie a tutti
ciaociao

 Quindi come posso fare senza la replace (che JET non conosce)?
ti ricordi che nelle query di access puoi richiamare delle funzioni "home
made", vero?
-- 
Salutoni
Sergio
per rispondere... togli il group dall'indirizzo

 "home made", vero?
Ah sì? :-?
Purtroppo non sono un grande conoscitore di Access....:-(
Ma tu intendi dire nelle query salvate direttamente nel db, o si può fare
anche con una volgare Execute passando direttamente la stringa contenente la
query?
ciaociao

 contenente la query?
sto parlando delle query salvate nel db.
e la funzione, per quanto ne so, deve essere anch'essa definita nel db.


 db.
Dici che non si può salvare la funzione nel db e utilizzarla però con la
execute?
mmmm....ora mi documento un po', sarebbe interessante.
Intanto ti ringrazio
ciaociao

 Quindi come posso fare senza la replace (che JET non conosce)?
Non ho una soluzione "chiara" e quindi non posso aiutarti nell'urgenza, ma,
per meglio capire, puoi pubblicare il comando cosě com'č ora, citando qual č
il campo che deve essere valutato e cambiato?

 cambiato?
ok, ecco la query:
s_sql = "INSERT INTO dettagli_servizio (servizio, anno, memo_articolo,
articolo, qta, n_giro, prezzo, idarticolo) " & _
               "SELECT " & n_Servizio & " as servizio, " & Year(Date) & " as
anno, Z4E_OCL_RIGHE.articolo as memo_articolo, " & _
               "Z4E_OCL_RIGHE.descrizione as articolo,
Z4E_OCL_RIGHE.quantita_ordinata as qta, " & _
               "0 as n_giro, Z4E_OCL_RIGHE.prezzo_netto as prezzo,
Z4E_OCL_RIGHE.numero_riga as idarticolo " & _
               "FROM Z4E_OCL_RIGHE " & _
               "WHERE AZIENDA=1 AND NUMERO_PROVVISORIO=" &
xr_testata!numero_provvisorio
il campo che deve essere variato è Z4E_OCL_RIGHE.prezzo_netto, il quale
contiene il punto come separatore decimale e a me servirebbe la virgola.
Sarebbe bello avere la possibilità di usare una sorta di replace:
Replace(Z4E_OCL_RIGHE.prezzo_netto,'.',',') as prezzo.......
ciaociao

 virgola.
quindi prezzo_netto è una stringa?


 quindi prezzo_netto è una stringa?
No, in realtà è un campo numerico di una tabella Oracle collegata via ODBC a
un db access. Purtroppo sono a qualche centinaio di km dal posto in cui si
sta mettendo in piedi questa procedura, devo colloquiare con persone che non
sanno un accidente e posso solo modificare questo eseguibile.
Il problema è che da me in uficio, simulando la situazione, il campo lo vedo
con la virgola, mentre là si vede con il punto. Quindi per tagliare la testa
al toro avevo pensato di usare la replace e tanti saluti! Invece
cicca.....:-(
ciaociao

 ciaociao

 altra tabella.
grazie mille, intanto provo anch'io
ciaociao

 grazie mille, intanto provo anch'io
Ho provato: ciccia, la Replace non la prende. Temo che, essendo parte
integrante del comando SQL (e non, come si diceva ieri per quel Format, di
una stringa preparata e poi passata al motore) occorra contare sulle
funzioni previste dal motore e/o dal suo eventuale dialetto. Con Access non
m'è venuto in mente niente...

 dialetto. Con Access non m'è venuto in mente niente...
Appunto. cazzarola....va beh, grazie mille lo stesso!
Ora mi documento un po' sulla soluzione di Sergio (quella delle funzioni
'home made') e se riesco a farlo andare posto la soluzione
ciaociao

 ciaociao
mi pare che le tue funzioni debbano essere messe in un modulo dentro il db
Access. Praticamente, quello che ti serve è un modulo con una Public
Function ReplaceMia e poi puoi richiamarla da una query. Se non riesci a
modificare il tuo mdb da remoto, non credo che tu possa crearti la query
come vuoi. magari mi sbaglio, spero di sì......;-)
good coding, più che mai!!!
-- 
Alletun
"Io lo so che accadrà. La voce sussurra nei miei pensieri di Jair, Rone,
Allanon e soprattutto nelle Mortombre.
Sussurra segreti che mi sono tenuti nascosti, nella grigia oppressione
di questo giorno e nell'oscurità caliginosa di quello che mi aspetta.
Saremo distrutti. Tutti."
Brin Ohmsford - La Canzone di Shannara - T. Brooks

 good coding, piů che mai!!!
ciaociao piů che mai!!

 scrivere la funzione nel modulo access....
E' una boiata! :-)
ho scritto questa funzione in un modulo del db access:
Public Function MyReplace(FieldValue As String, OldChar As String, NewChar
As String) As String
Dim s_OldValue As String
Dim s_NewValue As String
Dim pos As Integer
Dim f_end As Boolean
    s_NewValue = ""
    s_OldValue = FieldValue
    pos = 0
    f_end = False
    Do While Not f_end
        pos = InStr(s_OldValue, OldChar)
        If pos > 0 Then
            s_NewValue = s_NewValue & Left(s_OldValue, pos - 1) & NewChar
            s_OldValue = Mid(s_OldValue, pos + 1)
        Else
            s_NewValue = s_NewValue & s_OldValue
            f_end = True
        End If
    Loop
    MyReplace = s_NewValue
End Function
e se faccio una query del tipo:
    UPDATE tabella1 SET campo1=MyReplace(Campo1,'A','B')
funge alla meraviglia! Anche con i campi numerici!!
infatti se ho dei valori con la virgola (Precisione Singola) in tabella1 e
faccio:
    INSERT INTO Tabella2 SELECT Tabella1.Campo1 as Campo1,
MyReplace(Tabella1.Campo2,',','.') as Campo2 FROM Tabella1
mi trovo in tabella2 i valori interi (giustamente, poichè il punto non è il
separatore decimale).
Simpatica questa cosa delle funzioni 'home made'! Non ci avevo mai
pensato......
.....chissà se da vb si riesce a salvare una funzione in un modulo di
access.....ora provo.
ciaociao

 ciaociao


Sarà fatto. ;-)
ciaociao

 Sarŕ fatto. ;-)
Niente da fare....
pare che si riesca solo a leggerne le proprietŕ e ad impostare i permessi,
ma di scrivere non se ne parla.
Per ora ho provato con DAO, adesso cerco un po' per ADOX, ma non ci spero
piů di tanto... a dopo
ciaociao

 spero più di tanto... a dopo
Temo che siano cose gestite esclusivamente dall'applicativo MsAccess e
quindi non "pubblicate" da Jet...
In fondo si tratta di VBA...