Gambas-it

Archivi (sola lettura) => Programmazione (Gambas 2) => Topic aperto da: EnzoCurky - 31 Gennaio 2010, 18:06:05

Titolo: modifica chiave primaria
Inserito da: EnzoCurky - 31 Gennaio 2010, 18:06:05
ciao a tutti espongo subito il problema...

Questa è la mia tabella...
"CREATE TABLE 'clienti' ( 'id' INTEGER PRIMARY KEY, 'nome' VARCHAR(255) DEFAULT NULL, 'cognome' VARCHAR(255) DEFAULT NULL, 'indirizzo' VARCHAR(255) DEFAULT NULL);"

quando voglio inserire i dati nella tabella clienti non riesco ad inserire nel campo id il valore ke voglio io ma in automatico lo inserisce in modo crescente,mentre gli altri campi vengono salvati con i valori ke scrivo io.....
          $hConn.Begin
          hres = $hConn.Create("clienti")
          hres!id = TextBox3.Text
          hres!nome = TextBox4.Text 
          hres!cognome = TextBox5.Text
          hres!indirizzo = TextBox6.Text
          hres.Update     
          $hConn.Commit

perche??????sto impazzendo .. :'( :'( :'( :'(

stessa cosa se cerco di modificare il loro valore...i campi nome,cognome e indirizzo si,mentre il campo id (ke è la chiave primaria)no...
Titolo: Re: modifica chiave primaria
Inserito da: leo72 - 31 Gennaio 2010, 18:20:21
E' ovvio. Se dichiari un campo INTEGER PRIMARY KEY un DB imposta quel campo autoincrementante in automatico, non puoi scriverci sopra.

O dichiari il campo di un altro tipo invece che INTEGER oppure non lo dichiari PRIMARY.
Titolo: Re: modifica chiave primaria
Inserito da: EnzoCurky - 31 Gennaio 2010, 19:39:56
ho tolto dalla creazione della tabella il PRIMARY KEY,ma ugualmente nn me lo fa cambiare...posso alternativamente mettere il campo id come string e come chiave primaria?o magari aggiungo un altro campo alla mia tabella clienti cosi:

"CREATE TABLE 'clienti' ( 'idTab' INTEGER PRIMARY KEY,'id' INTEGER DEFAULT NULL, 'nome' VARCHAR(255) DEFAULT NULL, 'cognome' VARCHAR(255) DEFAULT NULL, 'indirizzo' VARCHAR(255) DEFAULT NULL);

ke ne dite?
-------------------------------------
Poi..nel mi database ho.
id=1,nome=enzo;
id=3,nome=ciccio;
id=4,nome=lory;

come faccio a scrivere il mio nuovo campo 'nome=leo' sulla posizione 'id=2', se ogni volta ke inserisco un record id viene incrementato da solo?


 :'( :'( :'( :'( :'( :'( :o :o :o :o
Titolo: Re: modifica chiave primaria
Inserito da: fsurfing - 31 Gennaio 2010, 22:24:25
se hai creato la tabella con un undice che si chiama idtab poi sicuramente imporre un valore al campo "id" se è dichiarato solo numerico, controlla bene il codice
Titolo: Re: modifica chiave primaria
Inserito da: leo72 - 31 Gennaio 2010, 23:09:45
Scusa ma nella query SQL che hai postato leggo _ancora_ PRIMARY INTEGER KEY...
E poi, che DB usi? Spesso alcuni DB impostano in automatico il primo campo autoincrementante se lo vedono di tipo integer. Prova a dichiararlo di un altro tipo.
Titolo: Re: modifica chiave primaria
Inserito da: EnzoCurky - 01 Febbraio 2010, 00:35:52
sto usando un DB sqlite...grazie cmq delle risposte proverò come hai detto tu, ma per quanto riguarda...

Poi..nel mi database ho.
id=1,nome=enzo;
id=3,nome=ciccio;
id=4,nome=lory;

come faccio a scrivere il mio nuovo campo 'nome=leo' sulla posizione 'id=2', se ogni volta ke inserisco un record id viene incrementato da solo?

ke cosa sai dirmi?esiste un modo x fare questo?
Titolo: Re: modifica chiave primaria
Inserito da: leo72 - 01 Febbraio 2010, 16:17:55
Ti ho già risposto. Alcuni DB (e SQLite mi pare rientri in questi) impostano in automatico la proprietà autoincrementante se vedono che il primo campo è di tipo Integer e se si chiama ID.
Titolo: Re: modifica chiave primaria
Inserito da: EnzoCurky - 02 Febbraio 2010, 16:19:20
ok.....intesi...vuoi dire ke se invece di chiamarlo id lo chiamo codice e lo dichiaro integer risolvo il problema?......se invece lo dichiaro string ma voglio ke vengano inseriti solamente dei numeri come faccio?dovrei controllare il codice ascii dei tasti premuti o esiste qualke funzione apposto x questo?
Titolo: Re: modifica chiave primaria
Inserito da: Ceskho - 02 Febbraio 2010, 16:22:46
se invece lo dichiaro string ma voglio ke vengano inseriti solamente dei numeri come faccio?dovrei controllare il codice ascii dei tasti premuti o esiste qualke funzione apposto x questo?

Se cerchi nel forum mediante la ricerca vedrai che questo argomento in particolare è stato già discusso..
Titolo: Re: modifica chiave primaria
Inserito da: EnzoCurky - 02 Febbraio 2010, 16:43:12
grazie potresti dirmi cosa scrivere nella ricerca?..please :( :( :( :(
Titolo: Re: modifica chiave primaria
Inserito da: EnzoCurky - 02 Febbraio 2010, 17:39:06
scusate la mia stupidità..... :P :P

ho appena trovato eseguendo una ricerca ke esiste il controllo ValueBox.....


grazie ...
Titolo: Re: modifica chiave primaria
Inserito da: Ceskho - 02 Febbraio 2010, 18:12:44
Tranquillo....se cerchi bene trovi pure funzioni che "trasformano" una textbox in una valebox ma più potente poichè gestisce anche decimali...
Titolo: Re: modifica chiave primaria
Inserito da: Picavbg - 03 Febbraio 2010, 23:14:48
@ EnzoCurky:
vedo che la tua tabella non contiene i nomi ordinati alfabeticamente e capisco che vuoi inserirli nella posizione che più ti aggrada. Avendo definito un "id", cone ti ha detto Leo, non hai alcuna possibilità di gestirlo.
A mio modestissimo avviso, l'unica cosa che puoi fare per inserire il nominativo nella posizione che desideri è quella di caricarti la tabella del DB in memoria, oppure in una ListBox, eseguire l'inserimento lì, dove vuoi tu e, dopo avere cancellato tutta la tabella del DB, riscriverla per intero coi dati completi dell'inserimento fatto.
Ciao.
Titolo: Re: modifica chiave primaria
Inserito da: leo72 - 04 Febbraio 2010, 01:02:49
Io non capisco una cosa.
Ma perché ti interessa che i dati vengano inseriti nel DB in un certo ordine?
Essendo un DB un motore che può fornire dati secondo query di ricerca, perché non inserirli come capita ed ordinarli solo al momento della lettura facendo eseguire l'operazione di ordinamento direttamente al DB stesso?

Codice: [Seleziona]
SELECT * FROM clienti ORDER BY (quello che ti pare)
Titolo: Re: modifica chiave primaria
Inserito da: EnzoCurky - 04 Febbraio 2010, 10:03:11
ciao Picavbg ho risolto il problema dichiarando id come numeric....

ciao leo72 ho fatto questo xke nel mio DB eseguo un comando ke cerca il primo record libero col minore id disponibile, mentre il comando aggiungi crea un record aumentando di 1 l'id maggiore.
Titolo: Re: modifica chiave primaria
Inserito da: Picavbg - 04 Febbraio 2010, 12:57:21
EnzoCurky  scrive
Citazione
nel mio DB eseguo un comando ke cerca il primo record libero col minore id disponibile, mentre il comando aggiungi crea un record aumentando di 1 l'id maggiore.

Ma allora se i tuoi inserimenti devono prendere sempre l'id più basso a quello esistente,  perchè non tenti l'attruibuzione all'id di una chiave primaria ordinata in maniera decrescente?
Codice: [Seleziona]
$Conn.Exec(CREATE TABLE 'Tabella'  ("'id'  INTEGER PRIMARY KEY DESC,  'campo2', .... ,'campoN")
ed esegui poi la lettura come ti suggerisce Leo (order by 'id')
Ciao.