Newsgroup: it.comp.appl.access
Titolo: Aggiungere condizioni in istruzione sql

Salve ho 1 problema su queste due istruzioni:
strSQL = "INSERT INTO [TABELLA PAGAMENTI] " & "(prgsol,Prgsoluni, Nrrata, 
Importorata, IMPORTOPAGRATA) VALUES ('" & Me!prgsol & "','" & Me!prgsoluni & 
"'," & i & "," & 0 & "," & 0 & ")"
Cosě scritta funziona ma io gli vorrei dire anche di ordinare il tutto per 
nrrata ed ho trovato che il relativo sql č
ORDER BY [TABELLA PAGAMENTI].Nrrata;
ma non so a che punto e con quali accorgimento va inserito
L'altra istruzione č questa e cancella in tabella pagamenti tutti i records 
dove importorata=0 e prgsoluni di tabella pagamenti č = a quello di me
For i = NumRec To frazpagvar + 1 Step -1
miosql = "DELETE [TABELLA PAGAMENTI].ImportoPagrata, [TABELLA 
PAGAMENTI].prgsoluni FROM [TABELLA PAGAMENTI]WHERE ((([TABELLA 
PAGAMENTI].ImportoPagrata)=0) AND (([TABELLA PAGAMENTI].prgsoluni)=" & "'" & 
Me.[prgsoluni] & "'" & " ));"
DoCmd.RunSQL miosql
Next i
il problema č che per ogni "i" mi cancella tutti i records invece che solo 
quello corrente. Avevo pensato di risolverlo aggiungendo questa istruzione
 and rata =i
ma non so a che punto e con quali accorgimento va inserito e soprattutto se 
tale istruzione č adatta
Grazie
Ciao
Carla
 

Ciao Carla.
ORDER BY va al fondo della query, quindi:
strSQL = "INSERT INTO [TABELLA PAGAMENTI] (prgsol,Prgsoluni, Nrrata,
Importorata, IMPORTOPAGRATA) VALUES (" & Me!prgsol & "','" &
Me!prgsoluni &
"'," & i & ",0,0) ORDER BY [TABELLA PAGAMENTI].Nrrata;"
Se l'ordine è inverso, aggiungi DESC prima del punto e virgola che
chiude l'SQL.
Il secondo problema è di difficile comprensione. Se devi cancellare il
record corrente e la maschera è associata, non fare un comando SQL,
usa Me.recordset.Delete (sintassi ADO), oppure crea un bottone con il
wizard e scegli elimina record corrente.
Matteo

 ha scritto nel messaggio 
news:1131382105.3...@o13g2000cwo.googlegroups.com...
Ciao Carla.




Matteo
Ciao e innanzitutto grazie
1° istruzione
Ho inserito la tua istruzione in vba ma mi da il seguente errore
Errore di run-time 3705: Errore di sintassi (operatore mancante) 
nell'espressione della query  (950,9505,4,0,0) order by [tabella 
pagamenti].nrrata
Se invece provo ad accodare il codice che mi hai dato in fondo alla mia mi 
da il seguente errore
Errore di run-time 3137:Punto e virgola mancante alla fine dell'istruzione 
sql
Come devo correggere l'errore?
2°istruzione
Hai ragione forse mi sono incartata ed ho provato a correggere l'istruzione 
che ti invio. Comunque ti faccio un esempio della mia situazione
Maschera principale formata
prgsoluni  frazpag (che riporta il numero di rate in cui è suddiviso 
l'importodapagare)
a1               5
....             ....
Tabella Pagamenti è così formata
prgsoluni   nrrata  importorata importopagato
a1          1          10                 0
a1          2          20                 0
a1          3            5                 5
a1          4          15                 0
a1          5          50                 25
Vorrei che quando vado a diminuire il numero di rate (e quindi il valore di 
frazpag) mi eliminasse le rate di differenza presenti in tabella pagamenti
Gli ho fatto quindi controllare se il valore digitato in frazpag è inferiore 
al numero effettivo di records presenti nella tabella pagamenti. Nel caso 
affermativo mi deve togliere i records di differenza per quel sollecito solo 
se non ci sono pagamenti registrati (e quindi importopagrata=0).
Quindi in questo caso se in frazpag al posto di 5 ci scrivo 3 mi deve 
togliere solo 2 rate tra le non pagate (1,2,4) di prgsoluni a1
Dim frazpagvar As Integer
NumRec = DCount("*", "TABELLA PAGAMENTI", _
   "Prgsoluni='" & Me!prgsoluni & "'")
frazpagvar = FrazPag.Value
If frazpagvar < NumRec Then
 miosql = "DELETE [TABELLA PAGAMENTI].ImportoPagrata, [TABELLA 
PAGAMENTI].prgsoluni FROM [TABELLA PAGAMENTI]WHERE ((([TABELLA 
PAGAMENTI].ImportoPagrata)=0) AND (([TABELLA PAGAMENTI].prgsoluni)=" & "'" & 
Me.[prgsoluni] & "'" & " ));"
    DoCmd.RunSQL miosql
Eseguendo tale istruzione il risultato è che mi toglie 3 rate anzichè 2, 
quindi mi toglie tutte quelle non pagate e non solo quelle da me richieste, 
per questo avevo pensate di mettere l'istruzione così
For i = NumRec To frazpagvar + 1 Step -1
 miosql = "DELETE [TABELLA PAGAMENTI].ImportoPagrata, [TABELLA 
PAGAMENTI].prgsoluni FROM [TABELLA PAGAMENTI]WHERE ((([TABELLA 
PAGAMENTI].ImportoPagrata)=0) AND (([TABELLA PAGAMENTI].prgsoluni)=" & "'" & 
Me.[prgsoluni] & "'" & " ));"
    DoCmd.RunSQL miosql
next i
e di aggiungere in miosql  l'istruzione
and rata =i
Ma ho pensato male perchè non riesco ad inserrire nell'istruzione tale 
codice ed inoltre non so se funzionerà per ottenere il risultato da me 
voluto
Aiutooo....Come posso risolvere la questione?
Grazie
Ciao
Carla

Ciao Carla,
1. scusa ero sovrapensiero: ORDER BY non può essere usato con una
INSERT. Non c'è motivo, ha senso solo con una SELECT. Se quindi devi
ordinare la tabella nella maschera, nel campo Ordina Per del pannello
Dati metti Nrrata.
2. non puoi usare un ciclo per limitare una DELETE, a meno di non avere
un id univoco che restringe la WHERE. La via più semplice è creare un
recordset ad hoc per cancellare i record che ti interessano. Usa TOP
per avere solo il numero di record che ti servono, oppure la proprieta
MaxRecords dell'oggetto Recordset.
SELECT TOP frazpagvar * FROM [TABELLA PAGAMENTI] WHERE [ImportoPagRata]
= 0 AND prgsoluni = Me!prgsoluni
nel caso del tuo esempio prenderebbe solo 2 righe (e non 3). Lo stesso
in VBA fa Recordset.MaxRecords = frazpagvar
A questo punto puoi eliminare tutti i record ciclando sull'oggetto
recordset con il metodo .Delete
Matteo