Telefonino.net network
 
| HOMEPAGE | INDICE FORUM | REGOLAMENTO | ::. NEI PREFERITI .:: | RSS Forum | RSS News | NEWS web | NEWS software |
| PUBBLICITA' | | ARTICOLI | WIN XP | VISTA | WIN 7 | REGISTRI | SOFTWARE | MANUALI | RECENSIONI | LINUX | HUMOR | HARDWARE | DOWNLOAD | | CERCA nel FORUM » |

Torna indietro   WinTricks Forum > Software > Programmazione

Notices

Rispondi
 
Strumenti discussione
Vecchio 20-10-2004, 04.29.51   #1
Fast-M
Senior Member
 
Registrato: 02-08-2003
Loc.: Lamezia Terme
Messaggi: 344
Fast-M promette bene
Stringa sql e VB?!

Salve a tutti!
Sono riuscito ad aggiungere un record in una tabella tramite codice vb, inviando un semplice insert into tramite una stringa sql nel metodo Execute dell'oggetto Database ed ha funzionato.
Il record è stato aggiunto.
Ora ho due problemi:
1- Capire come utilizzare le funzioni sql tipo Max() e simili, perchè ho provato ad usarle nella stringa stessa e in esecuzione mi ha dato il messaggio "impossibile utilizzare funzioni di aggregazione".
2- Come fare interagire una variabile definita in vb con l'output o l'input di una query sql passata tramite stringa?
Esempio: devo eseguire la query "INSERT INTO TABELLA1(CAMPO1,CAMPO2) VALUES(MAX(CAMPO1),testoImmessoDaComboBox)"
Dove testoImmessoDaComboBox è il testo immesso in una combobox inserita in una maschera di Access.
Aiuto!
Fast-M non è collegato   Rispondi citando
Vecchio 20-10-2004, 15.15.09   #2
gkcuvb
Junior Member
 
Registrato: 03-04-2002
Loc.: Follonica
Messaggi: 94
gkcuvb promette bene
Per capire se la sintassi della query è corretta basta che tu la applichi direttamente al database, per esempio se il db è un db access puoi provare ad eseguire la stessa query nella sezione delle query. Se ti da errore anche qui significa che la sintassi è sbagliata, altrimenti il problema è sul tipo di collegamento che fai con il database.
Per la seconda domanda , basta che tu faccia una composizione di stringhe ossia
"INSERT INTO TABELLA (CAMPO1,CAMPO2) VALUES ('PIPPO',"' & MiaTextBox.text & "')"
Chiaro?!!?!?
Ciao
gkcuvb non è collegato   Rispondi citando
Vecchio 20-10-2004, 16.00.27   #3
Fast-M
Senior Member
 
Registrato: 02-08-2003
Loc.: Lamezia Terme
Messaggi: 344
Fast-M promette bene
Ok grazie!
Non sapevo della composizione di stringhe e del fatto che in qualsiasi punto di una stringa la si può chiudere ed inserire il codice vb tramite la &.
Per la prima domanda invece non intendevo quello che hai scritto, ma appunto chiedevo come fare per potere usare le funzioni di aggregazione di oracle sql tipo Max(),Avg(), Min() ecc.
Perchè nella stringa non mi permette di inserirle, ma a questo punto tramite la composizione di stringhe con codice vb credo di potere agirare il problama.
Grazie!
Fast-M non è collegato   Rispondi citando
Vecchio 20-10-2004, 17.44.34   #4
gkcuvb
Junior Member
 
Registrato: 03-04-2002
Loc.: Follonica
Messaggi: 94
gkcuvb promette bene
mmhhh, prova comunque dipende molto anche da come ti sei collegato al database....se hai ancora problemi riposta....
gkcuvb non è collegato   Rispondi citando
Vecchio 20-10-2004, 17.53.02   #5
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
Try This:
INSERT INTO TABELLA1 ( CAMPO1, CAMPO2 )
SELECT MAX(CAMPO1), testoImmessoDaComboBox
FROM TABELLA1;
LoryOne non è collegato   Rispondi citando
Vecchio 22-10-2004, 16.17.05   #6
Fast-M
Senior Member
 
Registrato: 02-08-2003
Loc.: Lamezia Terme
Messaggi: 344
Fast-M promette bene
Allora, ho seguito le vostre indicazioni e ho associato un pezzo di codce che dovrebbe eseguire una query di accodamento all'evento di pressione del tasto enter sulla combo box 1 che ho nella maschera Form1:

Private Sub Combo1_Enter()
Dim db As Database, rs As Recordset
Set db = CurrentDb()
Set rs = db.OpenRecordset("INSERT INTO Clienti( Id_Cliente, Nome ) values (" & Combo1.Text & "," & Combo2.Text & ")")
End Sub

Mi da errore.
Aiuto!
Perchè non riesco a inserire un maledetto record in una tabella?
Io seguo la sintassi sql concatenando la stringa con il codice vb(con " apro/chiudo la stringa sql e con & apro/chiudo il codice vb o sbaglio??):

"insert into tabella1(campo1) values(" & combo1.text & ")")

ma niente, gli errori si susseguono!
Mi avevano detto che vb fosse semplice, ma invece...

Ultima modifica di Fast-M : 22-10-2004 alle ore 16.55.05
Fast-M non è collegato   Rispondi citando
Vecchio 22-10-2004, 17.44.01   #7
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
Non esistono linguaggi semplici o difficili, bensì concetti semplici o difficili.

Il metodo Execute viene utilizzato per query di azione, mentre i recordset per query di selezione.
Non è una selezione cio che intendi fare con INSERT INTO, quindi non devi usare i recordset, bensì il metodo Execute dell'oggetto Database
LoryOne non è collegato   Rispondi citando
Vecchio 22-10-2004, 17.52.20   #8
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
Ora prima di procedere trova le risposte a queste domande:

1) Cos'è un recordset ?
2) Come faccio a crearlo ?

Quando avrai capito il oncetto ti sarà chiaro l'errore
LoryOne non è collegato   Rispondi citando
Vecchio 22-10-2004, 18.02.07   #9
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
...poi quando ti sarà chiaro l'errore dovrà esserti chiara la sintassi.

Cacchio ragazzi, procedete per gradi...cribbio !
LoryOne non è collegato   Rispondi citando
Vecchio 22-10-2004, 18.10.31   #10
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
Ora non vorrei passare per rompiballe ma prova a risolvere questo:
Tu hai due stringhe:

a$="FAST-M "
e
b$="vuole imparare a concatenare due stringhe"

- Alla pressione di un pulsante, fai comparire:

1) FAST-M vuole imparare a concatenare due stringhe
2) FAST-M vuole imparare 'a' concatenare due stringhe
3) FAST-M vuole imparare a "concatenare due stringhe"

Ps: Nel 3° esercizio DEVONO comparire i doppi apici.
Ps: sebbene possa sembrare stupido è di grande aiuto, credimi
LoryOne non è collegato   Rispondi citando
Vecchio 23-10-2004, 06.16.51   #11
Fast-M
Senior Member
 
Registrato: 02-08-2003
Loc.: Lamezia Terme
Messaggi: 344
Fast-M promette bene
Va beh nel primo caso congiungo semplicemente a e b con &, cioè a & b, negli altri due dovrei conoscere i comandi per le stringhe di vb di cui non sono pratico, perchè bisogna eseguire una ricerca del carattere "a" o della stringa "concatenare due stringhe".
Comunque se puoi dirmi dove sbaglio mi fai guadagnare parecchio tempo e per questo progetto ne ho davvero poco.
Da quello che ho capito con i doppi apici si apre la stringa sql, quindi per induzione i doppi apici la chiudono se vengono riutilizzati. Quindi se inizio una stringa sql come argomento del metodo Execute, ogni volta che voglio mandare argomenti o caratteri che non riguardano sql, ma vb devo rimettere i doppi apici seguiti dal simbolo & che a sua volta apre/chiude il codice vb.(forse è quì che sbaglio e "&" serve solo a concatenare due stringhe??)
Grazie.
Fast-M non è collegato   Rispondi citando
Vecchio 23-10-2004, 11.54.00   #12
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
Il discorso che fai è corretto.
Passare una stringa ad un messagebox o passare una stringa al metodo execute dell'oggetto Database sono concettualmente uguali, cambia solo il risultato.

Vi sono generalmente 3 tipi di query:
1) Selezione
2) Aggiornamento/Cancellazione
3) Accodamento

e due categorie:

a) Query di azione
b) Query di definizione

Ricorda che generalmente per i tipi 2 e 3 si adotta il metodo Execute, mentre per il tipo 1 si agisce con i recordset.
Qualora non venisse rispettata la sintassi si genererebbe un errore.

Ti consiglio di creare una querydef rispettando la sua tipologia in ACCESS e lanciarla manualmente.
Se l'operazione avrà esito positivo, sapari qual'è la sintassi da rispettare durante la creazione della stringa SQL in VBA.
Ovviamente dovrai impostare dei dati fittizi che nell'esecuzione del codice VBA verranno poi sostituiti da quelli immessi nella maschera.
LoryOne non è collegato   Rispondi citando
Vecchio 23-10-2004, 15.33.59   #13
Fast-M
Senior Member
 
Registrato: 02-08-2003
Loc.: Lamezia Terme
Messaggi: 344
Fast-M promette bene
Daccordo, ma io vorrei capire solo una cosa che riguarda l'invio di stringhe sql in vb.
Se voglio inviare una stringa sql in vb apro i doppi apici ", inizio la stringa come se stessi scrivendo in sql per access e se voglio poi inviare il valore della proprietà text di una text box devo chiudere i doppi apici e mettere la e commerciale per concatenere alla stringa sql il codice vb, oppure basta che metto i doppi apici per chiudere la stringa vb e in automatico sto scrivendo vb?
Inoltre, per mandare il valore di una proprietà di un controllo all'interno di una stringa, devo usare dei segni particolari?
Tipo 'Text1.text' oppure [Text1].[Text] oppure (Text1.text) ecc.
Faccio un esempio pratico:

Private Sub Text1_Enter()
Dim db as Database
Set db=CurrentDb()
db.Execute("Insert into Tabella1(campo2) Values(" & Text1.text & ")")
End Sub

Il primo campo di Tabella1 è un contatore autoincrementante.
O sbaglio qualcosa?

Ultima modifica di Fast-M : 23-10-2004 alle ore 16.29.24
Fast-M non è collegato   Rispondi citando
Vecchio 23-10-2004, 17.45.04   #14
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
Per concatenare una stringa in VBA puoi utilizzare indifferentemente sia '&' sia '+'.
L'utilizzo di '&' fa in modo di saltare il passaggio di controllo della tipologia dei due elementi che devono essere concatenati.

Se tu avessi le due stringhe 'a' e 'b' e volessi concatenarle tra loro, potresti utilizzare questa forma a + b, oppure questa a & b con la sola differenza che nel secondo caso "aiuteresti" l'interprete a considerare le variabili 'a' e 'b' come parti della stringa concatenata restituita.
Questo vale anche per il compilatore, non solo per l'interprete.

Supponendo di avere definito due variabili 'a' e 'b' più una terza 'c' come risultato del concatenamento delle prime due in questo modo:
Dim a As String,b As String,c As String

a="Lory"
b="One"

ed aver assegnato ad 'a' questo valore "Lory" ed a 'b' quest'altro "One", affinchè il valore di 'c' risulti essere "LoryOne", l'operazione da compiere si tradurrebbe in questa semplice riga:

c = a & b (oppure c = a + b)

La stessa cosa si sarebbe potuta ottenere senza la dichiarazione preventiva delle variabili (Dim x As y), ossia:

a$="Lory"
b$="One"
c$=a$ & b$ (oppure c$=a$+b$)

L'utilizzo di '$', infatti , impone l'assegnazione della tipologia stringa alla variabile che lo precede, cosi' come '%' per gli interi, '&' per i long e via di seguito.
Senza procedere oltre sul perchè sia necessario definire la tipologia del risultato di un'operazione compiuta su più elementi eterogenei o non (obbligatoria in altri linguaggi, facoltativa in VB), vediamo come far interagire più variabili stringa con valori ricavati da proprietà testauli di oggetti quali una textbox inseriti in una form o maschera.

Riprendiamo le nostre tre variabili a,b e c.
Dim a As String,b As String,c As String

Assegnamo ad 'a' il valore "Lory"

a="Lory"

ed a 'b' il valore ricavato dalla proprietà Text del textbox (chiamato Text1) inserito nella maschera e che per esempio supponiamo sia "One"

b=Text1.Text

Assegnamo quindi a 'c' il valore di ritorno pari ad 'a' & 'b'
c = a & b (oppure c = a & Text1.Text)

Adesso a 'c' sarà assegnato il valore "LoryOne".
Il tutto funziona in quanto la proprietà Text appartiene alla stessa tipologia di a e c, ossia di tipo string.

Con le stringhe SQL non cambia nulla, almeno per quanto riguarda la loro creazione.
I problemi sorgono se la sintassi della stringa non è conforme ai dettami imposti dal motore che la deve interpretare ed eseguire, fornendo come risultato un set di record (query di selezione) o un'azione su una o più tabelle (query di azione).

Quando si utilizza il metodo Execute dell'oggetto Database, si da in pasto al motore una stringa SQL così come verrebbe generata manualmente o con l'autocomposizione di ACCESS ed in seguito eseguita attraverso il doppio click. Risulta quindi imperativo che la sintassi sia corretta.

Poichè nella stesura del codice VBA si deve far fronte all'eventualità che la stessa query possa essere eseguita più volte utilizzando variabili ricavate da proprietà di controlli o oggetti presenti in una maschera, risulta ovvio ricorrere alla composizione della stringa SQL utilizzando il concatenamento.

L'inserimento di un nuovo valore testuale all'interno di una ipotetica 'Tabella1' al 'Campo1' della stessa, dovrebbe essere eseguito rispettando la seguente sintassi:

INSERT INTO Tabella1 (Campo1,[Campo2],....) VALUES (valore1,[valore2],....)

e quindi:

Tabella$="Tabella1"
Campo$="Campo1"
SQL$="INSERT INTO " & Tabella$ & " (" & Campo$ & ") VALUES (" & Text1.Text & ")"
DB.EXECUTE SQL$

Ps: Ovviamente la colonna Campo1 deve contenere valori appartenenti alla stessa tipologia dei valori che si vanno ad inserire; in questo caso stringhe. (cioè la variabile c di cui sopra)

Ultima modifica di LoryOne : 23-10-2004 alle ore 17.59.48
LoryOne non è collegato   Rispondi citando
Vecchio 23-10-2004, 19.10.38   #15
Fast-M
Senior Member
 
Registrato: 02-08-2003
Loc.: Lamezia Terme
Messaggi: 344
Fast-M promette bene
Uhhh!
Che spiegazione fantastica!
Grazie mille Lory per tutte le informazioni che mi hai fornito e che anche se conoscevo già per un buon 99%(non sapevo che valesse il simbolo + come in java e la questione dell'aiuto all'interprete con &) ti sono comunque grato perchè mi hai dato la possibilità di eliminare definitivamente qualche sospetto di diversità con le cose che conosco e mi hai messo a posto le nuove conoscenze del mondo vb.
L'unica cosa che vorrei farti notare che secondo me è sfuggita anche a te(forse sbaglio) è questa:
SQL$="INSERT INTO " & Tabella$ & " (" & Campo$ & ") VALUES (" & Text1.Text & ")"
A me così non funziona.
Invece mi funziona così:
SQL$="INSERT INTO " & Tabella$ & " (" & Campo$ & ") VALUES ('" & Text1.Text & "')"
e cioè ho scoperto che il parser delle stringhe sql di access si aspetta anche un apice singolo dopo la parentesi tonda che segue VALUES.
Non so perchè, ma in un modo mi funziona e nell'altro no.
Aspetto un tuo riscontro.

Ultima modifica di Fast-M : 24-10-2004 alle ore 01.50.34
Fast-M non è collegato   Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 
Strumenti discussione

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is ON
Gli smilies sono ON
[IMG] è ON
Il codice HTML è OFF

Vai al forum

Discussioni simili
Discussione Autore discussione Forum Risposte Ultimo messaggio
Segnalazioni KB (Knowledge Base) Microsoft giancarlof Segnalazioni Web 71 12-07-2007 10.04.00
Impossibile avviare SQL Server GiulioCesare Software applicativo 0 03-01-2005 23.28.52
Stringa sql in Vb? Fast-M Programmazione 2 24-10-2004 10.39.22
Sql e VB. Fast-M Programmazione 1 20-10-2004 08.28.58
velocizzare VB6 NS-1 Programmazione 13 11-06-2004 10.55.22

Orario GMT +2. Ora sono le: 07.26.24.


E' vietata la riproduzione, anche solo in parte, di contenuti e grafica.
Copyright © 1999-2017 Edizioni Master S.p.A. p.iva: 02105820787 • Tutti i diritti sono riservati
L'editore NON si assume nessuna responsabilità dei contenuti pubblicati sul forum in quanto redatti direttamente dagli utenti.
Questi ultimi sono responsabili dei contenuti da loro riportati nelle discussioni del forum
Powered by vBulletin - 2010 Copyright © Jelsoft Enterprises Limited.