Gambas-it

Archivi (sola lettura) => Programmazione (Gambas 2) => Topic aperto da: tornu - 26 Febbraio 2010, 22:21:41

Titolo: [RISOLTO] Update from Select
Inserito da: tornu - 26 Febbraio 2010, 22:21:41
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:

Codice: [Seleziona]
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.

Titolo: Re: Update from Select
Inserito da: fsurfing - 26 Febbraio 2010, 23:00:49
la query è per mysql o per sqlite?

mai usato query come quella sotto ma sul mio pc con gambas mysql richiede questo apice:  ` e non questo:'
Titolo: Re: Update from Select
Inserito da: fsurfing - 26 Febbraio 2010, 23:03:49
tanto di cappello a te che cerchi di fare tutto ciò con una query unica , io avrei scritto un po + di codice e copiato i dati direttamente con più query semplici
Titolo: Re: Update from Select
Inserito da: tornu - 26 Febbraio 2010, 23:51:51
E' per Mysql.
Il simbolo penso sia lo stesso che usi tu, quello che sulla tastiera si trova insieme al ?
Cerco di sfruttare al massimo le potenzialità dell' Sql.
Nel caso specifico quando nel programma che stò sviluppando si verifica una certa condizione devo eseguire la query che ho postato.
Se hai suggerimenti per ottenere lo stesso risultato sfruttando il codice di Gambas non farti pregare, suggerisci pure, io in questo momento sono in fissa (più che altro confuso... >:( a forza di fare prove) a risolvere la query.


Titolo: Re: Update from Select
Inserito da: fsurfing - 27 Febbraio 2010, 08:17:01
l' apice corretto  lo scrivi con Altgr + ?
Titolo: Re: Update from Select
Inserito da: tornu - 01 Marzo 2010, 00:16:52
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:
Codice: [Seleziona]
  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?
Titolo: Re: Update from Select
Inserito da: fsurfing - 01 Marzo 2010, 00:23:44
io farei una query di ricerca su tutti i campi poi prelevi quelli che ti servono dal codice il mio motto è" Keep easy "

ricordati che se conosci il nome del campo puoi scrivere zResult!nomecampo , l' altra notazione mi pare si riferisca all' indice di campo

xsql = "SELECT * FROM tabella1 WHERE databox BEETWEEN 1 AND 10;"

Titolo: Re: Update from Select
Inserito da: tornu - 01 Marzo 2010, 00:55:36
io farei una query di ricerca su tutti i campi poi prelevi quelli che ti servono dal codice il mio motto è" Keep easy "

ricordati che se conosci il nome del campo puoi scrivere zResult!nomecampo , l' altra notazione mi pare si riferisca all' indice di campo

xsql = "SELECT * FROM tabella1 WHERE databox BEETWEEN 1 AND 10;"


??? Scusa, ma non ho capito la tua risposta.
Titolo: Re: Update from Select
Inserito da: leo72 - 01 Marzo 2010, 11:05:17
Io di solito apro 2 connessioni, una per i dati in lettura ed una per i dati in scrittura.
Prova a separare le cose, non usando cioè la stessa connessione per entrambe le operazioni.
Titolo: Re: Update from Select
Inserito da: milio - 01 Marzo 2010, 18:20:18
Codice: [Seleziona]
    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
Titolo: Re: Update from Select
Inserito da: tornu - 01 Marzo 2010, 20:46:52
Siiiiiiii  :D :D :D Funziona!!!!!!
Grazie a tutti per i suggerimenti, naturalmente a milio uno in più per la soluzione.
Titolo: Re: [RISOLTO] Update from Select
Inserito da: milio - 01 Marzo 2010, 21:13:23
 :P :P :P
Titolo: Re: [RISOLTO] Update from Select
Inserito da: Ceskho - 02 Marzo 2010, 00:29:32
:P :P :P

Ma di la verità....ti occupi solo di database tu?? :D
Titolo: Re: [RISOLTO] Update from Select
Inserito da: milio - 02 Marzo 2010, 10:36:09
Diciamo che con il lavoro che sto facendo adesso ne ho visti tanti di database :)
Titolo: Re: [RISOLTO] Update from Select
Inserito da: Ceskho - 02 Marzo 2010, 13:44:27
Diciamo che con il lavoro che sto facendo adesso ne ho visti tanti di database :)
:o....sporcaccione... :P
Titolo: Re: [RISOLTO] Update from Select
Inserito da: Golia - 02 Marzo 2010, 22:51:29
Milio è un mito :-* :P :P