Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Salve, sto armeggiando un po con le stringhe SQL su Access utilizzando il codice VBA. Purtroppo non sto avendo buoni risultati... per cui chiedo consiglio a voi, se mi potete correggere dove sbaglio.
La stringa seguente dovrebbe inserire in una tabella 3 campi, presi da un altra tabella e manipolati al fine di ottenere questo:
* Il primo campo NON deve avere uno zero in seconda posizione, e copiare nel caso il primo, il terzo, il quarto e il quinto carattere, nel cas altro i primi 5 dal campo F1 di una tabella.
* Il secondo campo deve contenere i restanti caratteri (per una questione di formattazione del testo so che non deve prendere i primi 12 caratteri del campo) dallo stesso campo di cui sopra.
* Il terzo campo è uguale al primo, differenziato dal fatto che deve essere escluso l'ultimo carattere.
La condizione è che nelle celle della tabella di origine siano presenti un certo numero di spazi (per la precisione 5) prima del testo.
Il codice da me eseguito è il seguente:
Codice sorgente - presumibilmente Delphi
Set rs = DB.OpenRecordset("insert into TB_ATC4(ATC4, ATC4_DESCRIZIONE, ATC3) " _
Le operazioni su stringhe sono supportate da SQL, ad esempio:
Codice sorgente - presumibilmente Visual Basic 6
Set rs2 = DB.OpenRecordset("select ID, F1 from TB_IMPORT where (len(F1) - len(ltrim(F1))) = 3 and ID between ...
(un altra stringa del codice) viene letta correttamente e non ritorna errore.
Se dovessi togliere quei valori dalla stringa immagino che l'option explicit mi avvertirebbe che la variabile f1 non è stata dichiarata (in quanto campo della tabella DB_Import).
Ultima modifica effettuata da Iohoilpotere il 10/11/2010 alle 15:33
INSERT INTO TB_ATC4 ( ATC4, ATC3, ATC4_DESCRIZIONE )
SELECT IIf(Mid(Trim([TB_Import]![F1]),2,1)=0,Left(Left(Trim([TB_Import]![F1]),4),1)+Right(Left(LTrim([TB_Import]![F1]),5),3),Left(Trim([TB_Import]![F1]),5)) AS Espr1, IIf(Mid(Trim([TB_Import]![F1]),2,1)=0,Left(Left(Trim([TB_Import]![F1]),4),1)+Right(Left(LTrim([TB_Import]![F1]),4),2),Left(Trim([TB_Import]![F1]),4)) AS Espr2, Trim(Right([TB_Import]![F1],Len([TB_Import]![F1])-12)) AS Espr3
FROM TB_Import
WHERE (((Len([F1])-Len(LTrim([F1])))=7));
O utilizzi SQL (come hai fatto tu) e viene fuori un vero casino - quella Query non è ne modificabile ne capibile, dai! - oppure usi VBA e ti fai le modifiche PRIMA di comporre la query
La query è sia modificabile che capibile, basta saper leggere. Utilizzare VBA per fare le modifiche non mi servirebbe a niente, già fatto, composto codice con 2 cicli, ma è troppo lenta l'esecuzione.
il mio capo mi licenzierebbe all'istante se gli presentassi una roba simile....
non importa se un guru di sql(o uno che ne conosce abbastanza) possa capirla o no, la questione è che se fosse necessario cambiare alcune join(ci sono n join innestati, un suicidio dal punto di vista della manutenzione) sarebbe necessario riscrivere la query.
Queste cose, specialmente in SQL, è sempre meglio farle separate, magari usando tabelle di appoggio.
Lo dico per esperienza personale.
Ultima modifica effettuata da lorenzo il 18/11/2010 alle 19:46