Autore Topic: Modificare un record  (Letto 2054 volte)

Offline Tiziano60

  • Gambero
  • **
  • Post: 53
    • Mostra profilo
Modificare un record
« il: 12 Dicembre 2008, 00:51:36 »
Salve a tutti

Sto completando un piccolo progetto realizzato con un database di SQLite3
Come ho detto, l'ho quasi finito...mi manca solamente la possibilità di poter correggere un record che è stato editato male.

saèpevo farlo con Visual Basic 6, ma ho visto che con Gambas la sintassi è un po' diversa e la guida non mi è di aiuto

Qualcuno può darmi un suggerimento?

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Modificare un record
« Risposta #1 il: 12 Dicembre 2008, 11:27:55 »
Codice: [Seleziona]
Risultato = Connessione.Edit(....)
....modifichi i dati
Risultato.Update
Visita il mio sito personale: http://www.leonardomiliani.com

Offline Tiziano60

  • Gambero
  • **
  • Post: 53
    • Mostra profilo
Re: Modificare un record
« Risposta #2 il: 12 Dicembre 2008, 13:27:36 »
L'ho fatto!...infatti è la stessa sintassi che usavo con visual basic, ma mi da questo errore:

Cannot modify record: abort due to constraint violation

posto il codice

 Risultato = Connessione.edit("Nome_tabella")

  Risultato["campo_1"] = Text1.text
  Risultato["campo_2"] = Text2.text
  Risultato["campo_3"] = Text3.text
 
  Risultato.Update

il record è foramto da 3 campi  e il record incriminato lo faccio visualizzare in 3 texbox...ma se vado a modificare un campo, Gambas evidenzia la riga Risultato.Update  e da l'errore che ho sopra citato

Offline Phoenix

  • Gamberetto
  • *
  • Post: 10
    • Mostra profilo
Re: Modificare un record
« Risposta #3 il: 12 Dicembre 2008, 22:57:43 »
... prova direttamente a dargli da mangiare una query sql ...

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: Modificare un record
« Risposta #4 il: 13 Dicembre 2008, 11:08:19 »
la sintassi della funzione edit e questa:

Codice: [Seleziona]
FUNCTION Edit ( Table AS String [ , Request AS String, Arguments AS , ... ] ) AS Result


quindi se non mi ricordo male dovresti fare qualcosa del genere:

Codice: [Seleziona]

criterio= nome_campo & "=" & valore

Risultato = Connessione.edit("Nome_tabella",criterio)

Risultato["campo_1"] = Text1.text
Risultato["campo_2"] = Text2.text
Risultato["campo_3"] = Text3.text

Risultato.Update
 


per semplicita puoi indicare come nome campo l' id del record da cambiare

Offline Tiziano60

  • Gambero
  • **
  • Post: 53
    • Mostra profilo
Re: Modificare un record
« Risposta #5 il: 13 Dicembre 2008, 13:31:15 »
immaginavo fosse qualche cosa del genere!..infatti nell'help di gambas c'è un esempio di questo tipo, ma pensavo che che esistesse un modo più semplice

cmq, oggi ci proverò e vi farò sapere se avrò successo!

Per il momento, grazie a tutti per l'aiuto

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Modificare un record
« Risposta #6 il: 14 Dicembre 2008, 00:44:37 »
La colpa è mia che sono stato troppo stringato.

Dunque, ipotizziamo che tu utilizzi un campo come indice, ad esempio campo_1. Quindi, diciamo che vuoi editare la riga il cui campo_1 contiene XXX. Ecco allora il codice:
Codice: [Seleziona]

Risultato = Connessione.Edit("nome_tabella", "campo_1=&1","XXX")

L'ultima opzione contiene il valore che sarà sostituito ad "&1" per creare la query SQL.
Il comando di cui sopra si potrebbe quindi tradurre in SQL puro così:
Codice: [Seleziona]

Risultato = Connessione.Exec("SELECT * FROM nome_tabella WHERE campo_1 = 'XXX'")

La differenza fra i 2 comandi è che il primo è più Gambassiano e lascia al linguaggio il compito di creare la query SQL.
Visita il mio sito personale: http://www.leonardomiliani.com

Offline Tiziano60

  • Gambero
  • **
  • Post: 53
    • Mostra profilo
Re: Modificare un record
« Risposta #7 il: 16 Dicembre 2008, 21:29:53 »
credo di esserci riuscito!
questo è il codice
DIM MiaSQL AS String
 
 MiaSQL = ("UPDATE ELENCO SET NOME_CAMPO1 = 'NUOVO_NOME' WHERE NOME_CAMPO1 = 'VECCHIO_NOME'")
 
 Connessione.Commit


per il momento, sembra funzionare,sebbene, sostituisca tutti i vecchi nomi uguali con il nuovo nome

Grazie a tutti per l'aiuto...sei stati veramente grandi!!

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: Modificare un record
« Risposta #8 il: 16 Dicembre 2008, 22:45:14 »
scusa tiziano ma stiamo parlando di due cose differenti!


tu stai modificando il record tramice una query sql

l' esempio da noi dato utilizza invece gli strumenti di gambas


rimanendo nel semplice puoi fare così:


1) sapendo qual'è il record che devi modificare ne ricavi l' "id"

2) elimini tutto il record corrispondente all' "id"

3) aggiungi un nuovo record con tutti i nuovi dati

questo sistema molto semplice è non pulitissimo funziona benissimo se il tuo db ha l' idice autoincrementale .

tradotto in codice diventa:

Codice: [Seleziona]

'ponendo che l' indice della tua tabella di nome "elenco" si chiami "id" e che l id del record che 'vuoi cambiare sia ad esempio  21

  dim hres as result

  hData = $hConn.edit("elenco", "id=21")
 
  hdata.Delete  ' caccelli tutto il record
  $hConn.Commit
 
   $hConn.Begin
    hres = $hConn.Create("elenco")
 
  hres!campo1=valore1
  hres!campo2=valore2
  hres!campo3=valore3
 ' ecc ecc per tutti i campi
 
  hres.update
  $hconn.close




questo metodo io trovo che sia + pratico l' importante sia con questo metoto che con una query diretta è dare un "indirizzo" unico al db su cui scrivere altrimenti si cambiano piu elementi.

Offline Tiziano60

  • Gambero
  • **
  • Post: 53
    • Mostra profilo
Re: Modificare un record
« Risposta #9 il: 17 Dicembre 2008, 11:01:15 »
hai ragione!..infatti, quando usavo Visula basic, facevo riferimento all'id, cioè al numero dell'indice ed correggevo o eliminavo il record

Non sapendo come costruire un database con il codice di gambas,(in Visual Basic lo costruivo con un "Private Type") l'ho fatto graficamente con Sqlite3 che poi ho disistallato


Non so come come possa essere successo, ma l'ID (chiave primaria) viene nascosto da Sqlite.
Se vado a vedere nel database,l'indice esiste!...ma non lo trova se lo cerco con Gambas e mi da un errrore (campo sconosciuto o una cosa del genere)

Ho trovato in rete, un esempio di come creare una tabella..proverò a rifare tutto il database e seguire il vostro consiglio

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.484
    • Mostra profilo
Re: Modificare un record
« Risposta #10 il: 17 Dicembre 2008, 13:35:24 »
creare un db con gambas è semplicissimo.

ti posto l' inizio di una piccola guida sull' utilizzo di sqlite con gambas che sto realizzando nel tempo perso :)

ciao ciao