Newsgroup: it.comp.lang.visual-basic
Titolo: Estarre una stringa MOLTO COMPLICATO.... per termopilucco od altro genio

Ero molto stanco ed ho scritto una sciocchezza
 
Si tratta di questo:
 
Ho questa stringa
 
"Select Nome as Pippo, ID AS Identificativo from tabella"
voglio ottenere Identificativo da una funzione passando ID e la stringa intera...
 
Per favore mi puoi aiutare?..
 
                                                               Grazie
 
                                                                Luigi
Nota che lo scopo della funzione è estrarre l'alias per qualsiasi campo primario
non solo per questo esempio particolare..

 campo primario non solo per questo esempio particolare..
Io continuo a non capire, ma di risposte, allora
(
http://makeashorterlink.com/?I48D22366
), ne hai avute, perň non ti sei piů
fatto sentire.
Ora una domanda la faccio io a te: Fai, per favore, un esempio che faccia
chiaramente capire cosa vuoi ottenere. Chiaramente. Chiaramente.
Chiaramente. Grazie.

 Chiaramente. Grazie.
credo che voglia una cosa tipo:
Public Function dimmiAliasCampo (StringaSQL as String, nomeCampoReale as
String)
End Function
cioč una funzione a cui si passa la stringa del costrutto SQL completa, in
questo caso
"Select Nome as Pippo, ID AS Identificativo from tabella"
poi gli si passa il nome del campo ID. La funzione deve restituire il suo
alias.
Basta lavorare con Mid$, InStr$ e cose del genere......
Qualche spunto: il nome dell'alias comincia da
Posizione = InStr$(1,StringaSQL,nomeCampoReale & " AS") + Len(nomeCampoReale
& " AS")
praticamente, si ricerca dentro la stringa sql completa la stringa "ID AS"
il valore ritornato č la posizione in cui inizia il nome dell'alias
assegnato a quel campo......
sbaglio?
good coding!!!
-- 
Alletun
Sorry, ask me if you want to get my e-mail!

 Qualche spunto: il nome dell'alias comincia da
Io che sono un'amante della Split() farei la split sullo spazio, cercherei
il campo con un loop, se l'elemento successivo č un "AS" quello dopo ancora
č l'alias, altrimenti l'alias č il campo stesso, "" se il campo non č stato
trovato.
Ciao
--
Math Parser : 
http://www.neodatatype.net
Sito Comune : 
http://www.it-lang-vb.net

[*Alletun* = 
nome...@hotmail.com
 in
news:bnrtrk$14v2ar$
1...@ID-134521.news.uni-berlin.de
] ha scritto:

Guarda, non lo so, ma ancora non ho capito. Visto che chi lancia la pietra
poi toglie la mano, concluderesti quel che hai scritto (che mi č chiarissimo
sino a "la funzione deve restituire il suo alias" escluso) con un esempio di
cosa dovrebbe restituire, realisticamente, la funzione che hai ipotizzato?
Grazie.

 Grazie.
deve ritornare la stringa "Identificativo". Il concetto č avere l'alias
assunto da un campo dato il nome del campo reale....
capito?
"select id, testo as nome_cavallo from tabella"
la funzione dovrebbe, data la stringa qui sopra e "testo" ritornare
"nome_cavallo"
dai, ti ho chiarito io le idee, no?


 dai, ti ho chiarito io le idee, no?
Sě, grazie.

 cosa dovrebbe restituire, realisticamente, la funzione che hai ipotizzato?
Non ho capito cosa non hai capito ;-)
Dato uno statement SQL tipo questo
str = "SELECT CAMPO1, CAMPO2 AS PIPPO, CAMPO3, CAMPO4 AS PLUTO FROM ...."
in cui 2 dei 4 campi selezionati sono stati rinominati con un alias, Luigi
vuole una funzione del genere
DimmiStoAlias(str, "CAMPO1") 'restituisce ""
DimmiStoAlias(str, "CAMPO2") 'restituisce "PIPPO"
DimmiStoAlias(str, "CAMPO4") 'restituisce "PLUTO"
Ora, si puo' certamente fare di meglio, per esempio chi ne capisce di
regular expressions, comunque questa dovrebbe funzionare:
Private Function DimmiStoAlias(ByVal SQL As String _
                , ByVal FieldName As String) As String
Dim StartPos As Integer
Dim EndPos As Integer
StartPos = InStr(1, SQL, " FROM ")
If StartPos > 0 Then
    'eliminiamo la parte che non ci interessa,
    'ovvero quella che segue l'elenco dei campi e
    'cerchiamo inoltre di semplificare alcuni casi particolari:
    '[Nome Campo] AS Alias
    'Funzione(NomeCampo) AS Alias
    'Funzione([Nome Campo]) AS Alias
    'NomeCampo AS [Alias Lungo]
    '
    'nonche' il caso dell'ultimo campo che non ha la virgola come separatore
    SQL = Mid$(SQL, 1, StartPos - 1) & ","
    SQL = Replace(SQL, ")", "")
    'ora cerchiamo il nome di campo, in
    'due tentativi per il caso particolare
    StartPos = InStr(1, SQL, FieldName & " AS ", vbTextCompare)
    If StartPos = 0 Then
        StartPos = InStr(1, SQL, FieldName & "] AS ", vbTextCompare)
        If StartPos > 0 Then StartPos = StartPos + Len(FieldName & "] AS ")
    Else
        StartPos = StartPos + Len(FieldName & " AS ")
    End If
    If StartPos > 0 Then
        EndPos = InStr(StartPos, SQL, ",")
        If EndPos > 0 Then
            DimmiStoAlias = Trim$(Mid$(SQL, StartPos, EndPos - StartPos))
        End If
    End If
End If
End Function

 Non ho capito cosa non hai capito ;-)
Ho capito dopo che Alletun ha spiegato ;-)
Ecco la mia ipotesi:
Private Sub Form_Load()
'       Prove, giuste e balorde
    nome_alias = rende_alias("Select Nome as Pippo, ID AS Identificativo
from tabella", "ID")
    nome_alias = rende_alias("Select Nome as Pippo,id AS Identificativo from
tabella", "Id")
    nome_alias = rende_alias("Select id AS Identificativo from tabella",
"Id")
    nome_alias = rende_alias("Select id AS Identificativo, xxx as giovanni
from tabella", "Id")
    nome_alias = rende_alias("Select id AS [Nome Campo Identificativo], xxx
as giovanni from tabella", "Id")
    nome_alias = rende_alias("Select id AS [Nome Campo Identificativo] from
tabella", "Id")
    nome_alias = rende_alias("Select id AS", "Id")
    nome_alias = rende_alias("Select id AX", "Id")
    nome_alias = rende_alias("Select id AS Pippo", "Id")
End Sub
Function rende_alias(stringa_intera, nome_campo)
    rende_alias = ""
    stringa_intera_interna = stringa_intera
    stringa_intera_interna = Replace(stringa_intera, "," & nome_campo & " AS
", ", " & nome_campo & " AS ", , , vbTextCompare)
    stringa_intera_interna = Replace(stringa_intera_interna, ",", " , ", , ,
vbTextCompare)
    stringa_intera_interna = Replace(stringa_intera_interna, "  ", " ", , ,
vbTextCompare)
    stringa_intera_interna = Replace(stringa_intera_interna, "[ ", "[", , ,
vbTextCompare)
    stringa_intera_interna = Replace(stringa_intera_interna, " ]", "]", , ,
vbTextCompare)
    p_start = InStr(1, stringa_intera_interna, nome_campo & " AS ",
vbTextCompare)
    If p_start Then
        p_start = p_start + Len(nome_campo & " AS ")
        p_end = InStr(p_start, stringa_intera_interna, " , ")
        If p_end = 0 Then
            p_end = InStr(p_start, stringa_intera_interna, " ")
            If p_end Then
                If Mid(stringa_intera_interna, p_start, 1) = "[" Then
                    p_end = InStr(p_start, stringa_intera_interna, "]") + 1
                End If
            Else
                p_end = Len(stringa_intera_interna) + 1
            End If
        End If
        If p_end Then
            rende_alias = Trim(Mid(stringa_intera_interna, p_start, p_end -
p_start))


 stringa intera...
Ti hanno già risposto nel thread, e però mi consenti una curiosità: a che ti
serve? Stai sviluppando un'interfaccia grafica a SQL? Altrimenti non riesco
a vederne l'utilità (o forse è tardi :-) ..
-- 
E` in corso la CFV per per
*it.comp.programmare.dotnet*,
Si può leggere il manifesto su
news:it.news.annunci o news:it.news.votazioni

 Ecco la mia ipotesi:

io, fra la tua soluzione e quella di Luca, preferisco senz'altro quella di
Zanna, postata alle 22:23.
Usando la Split$() e lo spazio come delimitatore


mmm
Ragazzi,
Grazie a tutti...
Scusate se non sono stato spiegato..
Questa funzione andra a fare parte di una dll per una pagina ASP che
simulerà il datagrid in 
asp.net
 (+ o -)
Purtroppo se uno utilizza un Alias per il campo della chiave primaria
mi genera un errore..
Così io intendo creare una funzione che mi restituisca(conoscendo la
stringa sql completa, ed il nome della chiave primaria) l'alias
eventualmente utilizzato per la chiave primaria..
                                                   Grazie ^_^
                                                     luigi
termopilucco aveva fatto un buon lavoro ma io aggiungendo il suo pezzo
di codice mi sono reso conto di avere utilizzato delle premesse
sbagliate..

 Usando la Split$() e lo spazio come delimitatore
Giovane padawan, dai per scontato che a) gli spazi siano uno solo b) ci
siano spazi
In particolare nota la stringa
SELECT Campo1 AS Pippo,Campo2 AS Pluto, Campo3  AS Paperino
e prova a immaginare come verrebbe fuori
Si puo' fare tranquillamente con lo split, ma temo che anche li non ti eviti
qualche giro di InStr come ho fatto io o qualche replace "preparatorio" come
ha fatto Lupo...
Ciao
-- 
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown

 Ciao
ciaociao

 Usando la Split$() e lo spazio come delimitatore
Va bene, vorrà dire che plonkerò sia te che Zanna. ;-)

 ha fatto Lupo...
uhm, umh, ci ho provato in pochi minuti e ho ottenuto questo.
Effettivamente, maestro, la Forza mi dice che bisogna curare bene gli spazi,
però secondo me qualcosa di bello lo si può ottenere, per cui in pieno
spirito open-source (ovvero completamente buggato), posto questo codice:
Private Function GetCampoAlias(StringaSQL As String, CampoReale As String)
As String
Dim strTemp() As String
Dim lng As Long
Dim Dopo As String
strTemp = Split(StringaSQL, Chr$(32))
For lng = 0 To UBound(strTemp)
    If UCase$(strTemp(lng)) = UCase$(CampoReale) & "," Then
        Dopo = UCase$(strTemp(lng - 1))
        If Dopo = "AS" Then
            GetCampoAlias = strTemp(lng - 2)
        End If
    End If
Next
End Function
sistematelo voi, che è meglio.....
good coding!!!
