Sono da alcuni giorni che mi leggo tonnellate di documentazione su Mysql e l'Sql ma non riesco proprio ad uscirne, come scritto in oggetto ho la necessità di aggiornare una tabella prelevando i dati da una seconda tabella in base a dei criteri.
Il tutto fà parte di un programma che stò sviluppando in Gambas, per escludere che il problema dipendesse da qualche istruzione errata ho provato la query direttamente sul DB ma niente da fare mi da errore di sintassi.
Vi posto la query (che non funziona...purtroppo :'() per spiegarmi meglio:
UPDATE tabella1 SET (campo1, campo2, campo3, campo4) =
(SELECT campoA, campoB, campoC, campoD FROM tabella2 WHERE campoX BETWEEN 1 AND 10)
WHERE tabella1.campoZ = 'pippo'
Spero tanto che sia una mio errore.
l' apice corretto lo scrivi con Altgr + ?
Ok.
Sto seguendo il tuo consiglio per quanto riguarda scrivere qualche riga di codice in più, in quanto mi sono accordo che la query unica che stavo cercando di eseguire non andava bene.
Ora però ho un'altro problema con il codice che sostituirà la query:
DIM xSQL AS String
DIM c AS Integer
DIM xResult, zResult AS Result
' Selezione dati
xSQL &= " SELECT dato1, dato2, dato3"
xSQL &= " FROM tabella1"
xSQL &= " WHERE datox BETWEEN '1' AND '10'"
xResult = MGlobal.db.Exec(xSQL)
c = xResult.Index
' Inserisce i dati selezionati
FOR c = 0 TO xResult.Count - 1
zResult = MGlobal.db.Create("tabella2")
zResult["campoA"] = TextBox.Text
zResult["campoB"] = xResult!dato1
zResult["campoC"] = xResult!dato2
zResult["campoD"] = xResult!dato3
zResult.Update
NEXT
MGlobal.db.Commit
MGlobal.db.Close
Questo codice nel programma reale dovrebbe inserire tre record, invece inserisce il primo ripetuto 3 volte.
Perchè, cosa sbaglio?
FOR c = 0 TO xResult.Count - 1
xResult.MoveTo(c)
zResult = MGlobal.db.Create("tabella2")
zResult["campoA"] = TextBox.Text
zResult["campoB"] = xResult!dato1
zResult["campoC"] = xResult!dato2
zResult["campoD"] = xResult!dato3
zResult.Update
NEXT