PDA

Visualizza versione completa : Sintassi corretta per Select


lelaccio
17-10-2007, 22.21.56
Ciao a tutti ho bisogno di un piccolo aiuto, vorrei mettere in una variabile il risultato di una istruzione "Select" e confrontarlo con una variabile definita dall'utente. Mi sono imbattuto in un errore forse di sintassi e non capisco come fare, vi posto quella parte di codice che non va:
Dim returnValue, strRisp As String
returnValue = ""
'digito il valore dell'utente
strRisp = InputBox("Inserisci il Cliente da ricercare")
'creo l'istruzione
returnValue = select ID,PIVA,CF,Ragione_sociale,Indirizzo,Cap,Citta,Pro vincia,Note FROM Clienti _
WHERE(UPPER(Trim(Ragione_sociale))= strRisp
If returnValue = strRisp Then
MsgBox("Il cliente cercato è già presente in Archivio", MsgBoxStyle.Exclamation, "Cerca")
Else
MsgBox("Il cliente cercato non è presente in Archivio", MsgBoxStyle.Exclamation, "Cerca")
End If
Sul SELECT mi da errore"Prevista espressione"
come si può risolvere?

miciomao
18-10-2007, 10.21.04
prova così



returnValue = ("SELECT " _
& "ID,PIVA,CF,Ragione_sociale,Indirizzo,Cap,Citta,Pro vincia,Note " _
& "FROM Clienti WHERE " _
& "UPPER(Trim(Ragione_sociale)= " & strRisp)

LoryOne
18-10-2007, 19.30.20
Una query SELECT è più di una semplice interrogazione.
ll computer ha bisogno di numerose informazioni che riguardano soprattutto la quantità di memoria utile a contenere il risultato di un' operazione, ma nel caso specifico esso ha bisogno di un buffer (recordset) costituito dal numero di elementi selezionati, la loro natura, un identificatore univoco che li distingua gli uni dagli altri, nonchè di tutta una serie di regole sintattiche che siano in grado di fargli interpretare comandi, condizioni da verificare e risultati da ottenere e proporre in maniera ordinata.
Tu non puoi associare una semplice stringa che funga da buffer di contenimento ad una interrogazione basata sulla selezione di numerose grandezze in base ad una condizione specifica da verificare.
Una stringa può contenere un singolo valore, non una serie di valori.
Se io dovessi interpretare l'istruzione SELECT, ti chiederei di specificare quale fra i campi selezionati dovrei identificare come risultato.

LoryOne
18-10-2007, 19.33.19
Toglimi una curiosità: Hai dimestichezza con PHP ?
Scordatelo, è ancor più semplice di BASIC.

lelaccio
18-10-2007, 22.32.15
Ciao Loryone
non ho nessuna dimestichezza con PHP puoi informarmi un po, è ancor più semplice di BASIC?
Ho provato anche inserendo nella Query solo il campo che mi interessa "Ragione_sociale" ma il risultato è sempre lo stesso
grazie

LoryOne
19-10-2007, 08.58.28
Ok.
Prima di tutto alcune considerazioni:

1 - Dim V, S As String
In questo modo V ed S non sono entrambe di tipo string
V è di tipo variant e solo S è string, basta digitare Debug.Print TypeName(v), TypeName(s) e verificare il risultato ottenuto nella finestra immediata (Ctrl+G)

2 - Un valore di tipo stringa viene assegnato tra doppi apici S = "abcd"
Se vuoi spezzare l'assegnazione su due o più righe, devi usare la sintassi seguente:
S = "ab" & _
"cd"

A questo punto, se assegni ad S un valore alfanumerico con la corretta sintassi, al computer non resta che interpretare la variabile S in base al contesto in cui essa si trova.
Poichè S contiene un'istruzione SQL, il computer deve interpretare la sequenza di caratteri come un'azione coerente con l'operazione che l'operatore si aspetta di ottenere.
Alcune istruzioni su come compiere determinate operazioni sono già presenti tra le direttive del compilatore del linguaggio, altre sono incluse in librerie o componenti esterni.
Per poter identificare e comprendere le istruzioni contenute in tali librerie, il computer necessita di un' interfaccia che gli consenta di includerle nel linguaggio in uso, ampliando in questo modo le sue capacità operative.
In pratica, è come se tu fossi capace di effettuare un lavoro idraulico ed avessi qualcuno che ti spiegasse come fare anche quello elettrico.

Riassumendo:
1 - Devi conoscere i limiti operativi del linguaggio in uso
2 - Devi sapere come abbattere tali limiti, includendo nuove librerie d'informazione
3 - Devi imparare come utilizzare tali librerie, scrivendo codice coerente con le regole incluse e lasciare al computer il compito di eseguirle.

Una volta definita l'istruzione SQL, il computer deve darla in pasto ad un'estensione delle sue capacità operative (motore SQL) che deve interpretare, eseguire ed infine restituire un risultato gestibile dall'operatore che deve verificare la coerenza del risultato ottenuto con cio che si aspettava di ottenere.

lelaccio
20-10-2007, 23.02.43
Ho risolto il problema in un modo banalissimo.
ho creato una query con il sistema Wizard di VB2005, invece di usare il codice
tutto funziona benissimo,cmq grazie a tutti

LoryOne
01-11-2007, 10.19.28
Non ho capito.
Cosa avrebbe fatto il Wizard di VB2005 ?

lelaccio
03-11-2007, 00.17.20
Con BindingNavigator e una nuova ToolStrip che comprende solo un Texbox ed un button ho fatto una query del genere "Select ID,Id_cliente, Ragione_sociale ecc WHERE
Ragione_Sociale = ?.
E nel Button_Click ho fatto cosi "Me.ClientiTableAdapter.FillBy(Me.FattureDataSet.Cl ienti, Ragione_socialeToolStripTextBox.Text)".
Tutto funziona.