Newsgroup: it.comp.lang.visual-basic
Titolo: Domanda sull' inserimento in un db...

Salve,
una domanda...più che altro una conferma. Quando inserisco qualcosa in
un db, non c'è nessuna funzione di default che verifica se quello che
ho inserito esiste già? Ho fatto per caso una prova banale e...mi ha
inserito senza fare una piega un record che già era dentro. Ma dietro
l' inserimento, c'è anche la ricerca e la verifica di quello che ho
inserito? Devo farla io?
Saluti...

 ha scritto nel messaggio
news:3a534053...@news.enter.it...


>Ma la tabella in cui hai inserito il record, aveva almeno una chiave?
Una chiave? No...in effetti nessuna chiave ho inserito nella tabella.
Ma allora il controllo automatico viene fatto sulla chiave? Io il db
lo creo da codice, e gli dicevo solamente di inserire i campi che mi
interessavano. La chiave mi ritorna utile anche per cancellare i
record? Conisidera questa la mia tabella:
| chiave | nome | cognome |
     01	  mario       rossi
     02	 marco     bianchi
     03	 mauro      verdi
Se io cancellassi il record con chiave 02, il record con chiave 03 mi
diventa automaticamente 02 o resta 03?
Saluti...

 Saluti...
Ciao
Sebamix


Resta 03, esattamente come un'automobile non cambia targa prendendo
quella di un'altra auto demolita (la targa e' un ottimo candidato ad
essere la chiave primaria per una ipotetica tabella "automobili").
--
Roal Zanazzi

 ha scritto nel messaggio
news:3a53508a...@news.enter.it...

Il problema è che se usi una chiave come impostato nell'esempio, il
controllo viene fatto solo sulla chiave, quindi nulla ti vieta di avere:
01    mario    rossi
02    mario    rossi
03    mario    rossi
Quindi hai due alternative, ho utilizzi una chiave multipla che comprende
tutti i campi che non vuoi duplicati, o controlli prima di salvare il record
se ne esiste già uno uguale.
Ciao VB

se ne esiste già uno uguale.
Si, quello che dici è logico, però nel mio esempio mi interessava
capire se cancellando un record, potevo in qualche modo avere un
riordinamento autimatic del campo indice (chiave).
Saluti...

Spero di averti aiutato un po'...
Si, ma siamo solo all' inizio...questo thread lo prevedo lungo :))
Saluti...

essere la chiave primaria per una ipotetica tabella "automobili").
Per riattappare i buchi della cancellazione, in un campo definito come
contatore, non esiste niente? Se inserisco qualcosa mi sembra di aver
capito che il db mi incrementa il contatore automaticamente, ma se io
levo un record? L' esempio di:
01
02
03
che diventa
01
03
come lo posso ovviare, lasciandolo esclusivamente al db?
Saluti...

 Saluti...
CiaoZ!

Hey!!! Servo a qualcosa! Miiiiiiiii! Ke figata!!!!!!
Hehehe, dimmi grazie che ti faccio sentire importante :)
Ora però focalizziamo un attimo il mio problema, nel centro.
Supponiamo che questa sia la mia tabella:
| INDICE | TITOLO | AUTORE |
|     01     |    Pippo  |   Pippo1   |
|     02     |    Pluto   |   Pluto1    |
|     03     |  Minnie   | Minnie1   |
Io il mio problema è che se faccio ora una select * e carivo tutto in
una listview, selezionando una riga (un record) nella list, il campo
indice è associato ai record giusti. Se cancello il secondo record, la
tabella mi diventa:
| INDICE | TITOLO | AUTORE |
|     01     |    Pippo  |   Pippo1   |
|     03     |  Minnie   | Minnie1   |
Se ora rifaccio select * e carico nella list, cliccamdo sulla seconda
riga (il secondo record) mi becco un indice pari a 2, che però non
corrisponde a quello del record vero, perchè il suo indice è in realtà
3. Per questo io chiedevo se esistesse qualche funzione del db che mi
riapparegguiasse quel campo indice.
In ogno modo, la mia soluzione può sembrare strana ma...è più che
sicura perchè...se tu facessi una ricerca per l' iniziale del campo
titolo (considera molti più record nella mia tabella) in ogni modo, l'
indice che ti restituisce la listview al click, di certo non sarà lo
stesso che hai nel db, anche se hai tutti gli indici in fila.
Considerando quanto ti ho appena detto, che ti viene in mente?
Saluti...

 :::::::::::::::(((((((((((((((((((((((((((((
lo sara' -- credo, essendo interesse di precchi -- se citerai il passo della
guida o (per esempio) di _sql : progettazione e gestione dei database_
(mcgraw hill c1998, isbn 88-386-0464-9, 65mila) che non riesci a mettere in
pratica :)
ciao, a.

Bravooo!! Bravo Zio Pal!!! Clap Clap Clap :))
Finalmente qualcuno che ha
intuito il perchè di quei giri all' interno del mio programma...grande!! Io
ho semplicemente ovviato a un problema, risolvendolo in effetti, che poi
non sia il metodo più pulito del mondo posso anche confermarlo, però di
certo non mi sembra il più zozzo! Hei Pal, leggi il mio utlimo post, che li
c'è un esempio/domanda pratica su quello che è il mio problema. Leggi anche
li...a te che soluzioni vengono in mente?
A parte che il problema degli
indici/contatori/chiave, se proprio dobbiamo dirla tutta, non avrebbe
neanche senso, perchè quando io clicco sulla list mi posso prendere (come
già faccio) i valori dentro le sue colonne e facendo una delete per quei
valori li, senza il bisogno di avere nessun indice. Il problema però mi si
ripropone in inserimento, perchè dovrei fare io a manina, un controllo su
quello che già c'è dentro il db...sarebbe solo una select...ma se posso
fare gestire questa cosa al mio db, perchè farlo io :))
Wè Pal, ora apro
un nuovo trhead, sull' analisi di un db strutturato nel miglior modo
possibile, segui anche li, che ti vedo cazzuto!!
Saluti...
PS: ma
starai mica usando il mio programma!! L' hai visto? Quello che ti ho
mandato via mail, l' hai visto? Che te ne pare?? :) E' bello eh!! :))
--------------------------------
Inviato via 
http://usenet.iol.it
 

 Saluti...
CiaoZ

 ha scritto nel messaggio
news:3a545127...@news.enter.it...

Se usi VB6 nel controllo ListBox esiste la proprietà ItemData che ti
permette di memorizzare in maniera invisibile all'utente la chiave (solo se
di tipo Long).
Una considerazione sulle chiavi:
Il loro uso è fondamentale nel caso lavori su più tabelle, per fare un
esempio rimanendo sulla tua tabella:
dividi la tua tabella in due: nella prima metti gli autori, nella seconda
metti i titoli, alla prima aggiungi un contatore, alla seconda aggiungi un
campo long, il risultato che devi ottenere è il seguente:
Tabella1
idAutore    Autore
1                Pippo1
2                Pluto1
3                Minnie1
Tabella2
idAutore    Titolo
1                SongPippo1
1                SongPippo2
2                SongPluto1
3                SongMinnie2
3                Song Minnie4
Per estrarre i dati che ti servono unisci la Tabella1 con la Tabella2
tramite la chiave idAutore, inoltre con questo sistema puoi anche evitare di
avere nel tuo DB lo sesso autore scritto in forme diverse (per es. 'Pippo1'
o 'Pippo   1' o 'piPPo1').
Da questo esempio si deduce che non puoi rinumerare una chiave, se no perdi
la corrispondenza fra autori e titoli, immagina se Minnie1 viene rinumerato
con idAutore=2 ...    8-)
Mi fermo qui perché forse sto divagando troppo e probablmente non 'te frega
gniente di sta cosa' 8-))
Se pensate possa essere utile si può tirare giù qualcosa di più dettagliato
da pubblicare sul SC su tabelle , relazioni e simili (tempo permettendo)
Ciao VB

 da pubblicare sul SC su tabelle , relazioni e simili (tempo permettendo)
se posso, penso possa.
:)