PDA

View Full Version : Database!


Furla
02-09-2005, 08:57
dunque, vorrei realizzare un programma che possa cercare, aggiungere, modificate, eliminare dati da una tabella di un file mdb. conosco (poco) vb6 e vb.net, ma con entrambi ho degli errori. ho cercato qualche guida ma non ne sono venuto a capo.

inizio in vb6, scrivo un semplice bottone per aggiungere un record:

Private Sub cmdAggiungi_Click()
If cmdAggiungi.Caption = "Aggiungi" Then
'Attiva la funzione di aggiunta.
txtnome.text=""
txtcognome.text=""
txtcodice.text=""
Data1.Recordset.AddNew
cmdAggiungi.Caption = "Inserisci i dati"
else
Data1.Recordset.Update
cmdAggiungi.Caption = "Aggiungi"
end if
end sub


è abbastanza semplice, premendo la prima volta viene abilitata l'aggiunta di un nuovo record e vengono svuotate le txt, in cui poi si inseriscono i dati per confermare clickando su cmdAggiungi la seconda volta.

RaouL_BennetH
02-09-2005, 10:10
dunque, vorrei realizzare un programma che possa cercare, aggiungere, modificate, eliminare dati da una tabella di un file mdb. conosco (poco) vb6 e vb.net, ma con entrambi ho degli errori. ho cercato qualche guida ma non ne sono venuto a capo.

inizio in vb6, scrivo un semplice bottone per aggiungere un record:

:mbe: hai volutamente lasciato incompleto il post o ti è scappato l'invio mentre finivi di scrivere? :D

Ad ogni modo,su visual basic ci sono diversi metodi per la connessione ai database.Uno dei più utilizzati e più comodi è ADO. Questo significa che quando apri il nuovo progetto visual basic,devi includere un riferimento a questa libreria:

Dal menu:

Progetto - Riferimenti:

Microsoft ActiveX Data Object Librerary 2.x (scegli la versione più alta).

Fatto questo la connessione e la manipolazione del db è molto semplice.

Nel Form dovrai dichiarare delle variabili che servono a gestire il db. Es.:



Dim myconnection As ADODB.Connection
Dim myrecordset As ADODB.Recordset



Inizia con l'impostare il progettino e man mano che hai problemi poi li posti.

Se fai una ricerca in questa sezione,trovi numerosi 3d a riguardo e in alcuni ci sono anche link e file di esempio da scaricare.

Furla
02-09-2005, 10:35
la seconda che hai detto, poi mi è saltata la connessione -.-

io ho usato un oggetto data (data1) che al form_load si collega al database di nome XXX nella cartenlla dell'applicazione.

poi ho impostato data1 come datasource di varie textbox, a cascuna ho assegnato ovviamente una "colonna" diversa della tabella del database. il collegamento funziona visto che con l'elemento Data1 è possibile esplorare il database, ma quando premo per la seconda volta il pulsante cmdAggiungi (sub nel primo post) ottengo il seguente errore (non sempre, mi sono accorto che a volte riesco ad aggiungere dei record): "errore di runtime 3426: L'azione è stata eliminata da un oggetto associato", premendo "Debug" viene evidenziata la riga sottolineata nel primo post.

per fare sto programma ci ho messo 5 minuti, se esistono altri metodi più indicati/semplici ben venga! :D

RaouL_BennetH
02-09-2005, 10:38
io ho usato un oggetto data (data1) che al form_load si collega al database di nome XXX nella cartenlla dell'applicazione.

poi ho impostato data1 come datasource di varie textbox, a cascuna ho assegnato ovviamente una "colonna" diversa della tabella del database. il collegamento funziona visto che con l'elemento Data1 è possibile esplorare il database, ma quando premo per la seconda volta il pulsante (sub nel primo post) ottengo il seguente errore (non sempre, mi sono accorto che a volte riesco ad aggiungere dei record): "errore di runtime 3426: L'azione è stata eliminata da un oggetto associato", premendo "Debug" viene evidenziata la riga sottolineata nel primo post.

per fare sto programma ci ho messo 5 minuti, se esistono altri metodi più indicati/semplici ben venga! :D

Come consiglio,dimentica questo tipo di connessione al database che hai fatto.E' poco efficiente e ti costringe ad essere collegato al database dal momento in cui avvii il programma.

ADO ti permette invece di collegarti al db solo quando necessario,fare le operazioni che desideri e chiudere la connessione(anche con il programma ancora in esecuzione).

Sostanzialmente il modo poi di aggiungere/eliminare/modificare i dati,non cambia.

Furla
02-09-2005, 20:42
ok, thx per il consiglio.

secondo te per usare ADO mi conviene usare vb.net o vb6? in vb.net ci ho provato, ma non mi riconosce la namespace System.Data :cry:

Furla
03-09-2005, 12:22
fammi capire, siamo ancora in vb6 vero?

dunque, se io inizio così:

option explicit
Dim myconnection As ADODB.Connection
Dim myrecordset As ADODB.Recordset


la routine di cmdAggiungi diventa:


Private Sub cmdAggiungi_Click()
If cmdAggiungi.Caption = "Aggiungi" Then
txtnome.text=""
txtcognome.text=""
txtcodice.text=""
myrecordset.AddNew
cmdAggiungi.Caption = "Inserisci i dati"
else
myRecordset.Update
cmdAggiungi.Caption = "Aggiungi"
end if
end sub


o cambiano anche i comandi?
e come faccio a connettermi al database e a collegare ad ogni campo una text?

RaouL_BennetH
03-09-2005, 13:58
Più che pensare a come il codice varia,dai prima uno sguardo qui per avere un'idea di come funziona ADO:

http://www.redangel.it/programmatori/nicola_pietralunga/ADO/index.asp

E' un pò vecchiotta come guida ma rende benissimo l'idea e c'è anche un tutorial.

Furla
03-09-2005, 16:38
grazie mille, dò un occhiata e provo a tirare giù qualcosa :D

Furla
04-09-2005, 16:17
mi sembra tutto abbastanza semplice, ma non ho capito bene cosa sono .BOF e .EOF...

aldiablo
05-09-2005, 07:35
ciao
praticamente BOF(Begin Of File) quando il cursore di un file è all'inizio del file stesso ed EOF(End Of File) quando il cursore è alla fine del file, di solito si usano per scorrere un file e per essere sicuri che lo scorra tutto.

spero di essere stato chiaro.

Furla
20-09-2005, 21:12
dunque, ho realizzato un programma molto simile a quello dell'esempio del tutorial linkato (ho selezionato gli ado 2.5 da "riferimenti"), ma quando provo ad aprire la connection al database mi dice che il formato non è riconosciuto... forse è perché ho usato Access 2000 per realizzare il database che uso io? come posso rendere vb6 compatibile agli mdb fatti con access 2000?

ho scaricato il programma pronto dal tutorial, quello mi funziona senza problemi. se provo ad aprire il database Adotutor.mdb con access 2000 mi dice che il formato deriva da una versione precedente... quindi la mia ipotesi era fondata...


[EDIT]
cercando un po' con google ho trovato questo:

http://forum.html.it/forum/showthread.php?s=&threadid=426307

ma non mi sembra dica di fare qualcosa in più rispetto al tutorial, sebbene i codici non siano del tutto uguali...

Furla
21-09-2005, 13:43
ah, poi ho bisogno di sapere se è possibile usare 2 recordset (riferiti a 2 tabelle diverse di uno stesso database) con una sola connessione, e se c'è da prendere qualche accorgimento particolare.

grazie :)

Furla
21-09-2005, 16:13
lol come provider avevo impostato (come nell'esempio del tutorial) come provider (nella stringa relativa alla connection) jet.oledb 3.51, mi è bastato sostituirlo con jet.oledb 4.0 per risolvere -.-

rimane il secondo dubbio:

ho bisogno di sapere se è possibile usare 2 recordset (riferiti a 2 tabelle diverse di uno stesso database) con una sola connessione

Furla
22-09-2005, 20:46
up

Furla
26-09-2005, 18:49
non riesco a far funzionare la funzione di ricerca.

l'ho lievemente modificata per permettere la scelta del campo di ricerca:

.Find Campo & "LIKE '" & StringaDaCercare & "%'"
If .EOF Then 'Se non è stato trovato si torna al record precedente
MsgBox "Record non trovato!", vbExclamation, "Errore ricerca"
.Bookmark = bkmTemporaneo
End If

ogni volta arriva ad EOF, visto che viene visualizzato il msgbox di errore.

ho già provato il seguente codice, eliminando la scelta del campo in cui cercare:

.Find "Codice LIKE '" & StringaDaCercare & "%'"
If .EOF Then 'Se non è stato trovato si torna al record precedente
MsgBox "Record non trovato!", vbExclamation, "Errore ricerca"
.Bookmark = bkmTemporaneo
End If

ma nulla da fare.
ovviamente StringaDaCercare contiene il valoregiusto per trovare il record che lo possegga nel campo "codice"

Furla
27-09-2005, 15:35
ho scoperto che l'errore che ho si verifica soltanto quando la stringa da ricercare nel database è una variabile.

impostando ad esempio come valore da cercare la stringa inserita in una imput box, la ricerca funziona correttamente. ecco il codice:


.Find "Codice LIKE '" & inputbox(blabla, blabla) & "%'"


una domanda:
a cosa servono i caratteri %' a fine stringa?

Furla
07-10-2005, 16:32
up

Furla
24-10-2005, 15:45
non so come, ma ho risolto...

c'è qualche problema se apro due recordset collegati a due tabelle dello stesso database?

Furla
27-10-2005, 23:41
altro problema: se elimino un record dal recordset, ed era l'ultimo record del recordset, .EOF mi diventa true, mentre .BOF no :mbe:

quindi se premo il cmd elimina di nuovo, mi da errore.

la cosa strana è che se il database è già vuoto al caricamento del form (durante il quale avviene la connessione con il database) anche .BOF è true e non si generano errori (prima di fare qualsiasi operazione un blocco if mi fa uscire dalla sub se .BOF e .EOF sono true)