View Full Version : Visual Basic e Database
enrico999
22-03-2005, 15:16
Allora, ho un database con una sola tabella e voglio fare un'applicazione che mi consenta di far vedere tutti i campi di questa tabella, come devo fare???
Brigante
22-03-2005, 15:59
La richiesta è piuttosto generica, puoi fare in vari modi, dipende da te, uno è questo (a grandi linee):
1) Crei una connessione al database;
2) Crei un recordset;
3) Apri il recordset passandogli la stringa SQL:"SELECT * FROM NOMETABELLA";
4) Prendi una DataGrid, la piazzi su un Form e le passi il recordset tramite la proprietà Recordsource.
5) Avvi l'applicazione ed ecco la tabella che appare.
Se vuoi ulteriori spiegazioni basta chiedere.
;)
enrico999
23-03-2005, 09:10
come faccio a creare la connessione al database???
Brigante
23-03-2005, 09:43
Originariamente inviato da enrico999
come faccio a creare la connessione al database???
Il database a cui ti vuoi connettere è fatto con Access, in locale sul tuo PC? Oppure è un database remoto su un server (SQL Server, Oracle, ecc.)?
enrico999
23-03-2005, 09:58
si, fatto con acces in locale
Brigante
23-03-2005, 11:16
Prima di tutto creati un riferimento ad ADO: Menù Progetto -> Riferimenti..., seleziona ActiveX Data Objects 2.x Library, dove x è il secondo numerello della versione (dipende da quale hai installata); poi premi OK e torna al tuo codice. Nella Form piazzaci una bella Datagrid e poi nel codice (anche nella Form_Load per provare) scrivi:
Dim dbConn As ADODB.Connection
Dim rsetMioRecordset As ADODB.Recordset
Dim sSQL as String
Set dbConn=New ADODB.Connection
Set rsetMioRecordset=New ADODB.Recordset
dbConn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=MioDatabase.mdb"
sSQL="SELECT * FROM NOME_TABELLA"
rsetMioRecordset.Open sSQL, dbConn
Set Datagrid1.DataSource=rsetMioRecordset
Avvia il tutto e ti appariranno le informazioni nella datagrid. Quando esci ricordati di chiudere il recordset (rsetMioRecordset.Close) e la connessione al DB (dbConn.Close), non farlo subito altrimenti la datagrid non ti visualizza nulla. Alla fine poi distruggi anche il recordset (Set rsetMioRecordset=Nothing) e anche la Form (Set Form1=Nothing).
P.S.: Questo è il modo più semplice per effettuare una connessione ad un database e visualizzare i dati di una tabella, manca una gestione degli errori ed alcuni parametri nel recordset che dipendono dal tipo di accesso che vuoi effettuare. Volendo puoi specificare anche una password per il database, la dove ci fosse.
enrico999
23-03-2005, 12:13
no, io nei riferimenti non ho questa voce:
ActiveX Data Objects 2.x Library
uso visual basic 6 pro.
un'altra cosa, quando parto, devo selezionare come nuovo progetto:
exe standard, progetto dati, o qualcos'altro???
Brigante
23-03-2005, 12:18
Originariamente inviato da enrico999
no, io nei riferimenti non ho questa voce:
ActiveX Data Objects 2.x Library
uso visual basic 6 pro.
un'altra cosa, quando parto, devo selezionare come nuovo progetto:
exe standard, progetto dati, o qualcos'altro???
...Ce l'hai, ce l'hai, si chiama Microsoft ActiveX Data Objects 2.x Library; ovviamente la x è sostituita dal numerello della versione. Per iniziare devi creare un progetto exe standard.
;)
enrico999
23-03-2005, 12:50
ok, per quanto riguarda Microsoft ActiveX Data Objects 2.x Library tutto OK.
scusa se ti disturbo ancora, ma è la prima volta che uso visual studio, comunque ho un'altra domanda:
scegliendo exe standar nella barra a sinistra non mi compare datagrid, e quindi non so come inserirla....
(per questo prima avevo chiesto se dovevo fare un exe standar o un nuovo porogetto)
Brigante
23-03-2005, 12:59
Originariamente inviato da enrico999
ok, per quanto riguarda Microsoft ActiveX Data Objects 2.x Library tutto OK.
scusa se ti disturbo ancora, ma è la prima volta che uso visual studio, comunque ho un'altra domanda:
scegliendo exe standar nella barra a sinistra non mi compare datagrid, e quindi non so come inserirla....
(per questo prima avevo chiesto se dovevo fare un exe standar o un nuovo porogetto)
Clicca con il tasto destro del mouse sulla casella degli strumenti (quella dove stanno tutti i controlli), seleziona Componenti... e ti si apre un finestra con un elenco di roba, seleziona Microsoft Datagrid Control, clicca su OK ed ecco la datagrid.
P.S.: Scusami, ma se non conosci l'ambiente di Visual Studio, ti conviene iniziare con delle cose molto semplici, e non con un'applicazione per gestire un database.
;)
enrico999
23-03-2005, 13:07
purtroppo devo farlo per forza....
comunque in questo codice:
Dim dbConn As ADODB.Connection
Dim rsetMioRecordset As ADODB.Recordset
Dim sSQL as String
Set dbConn=New ADODB.Connection
Set rsetMioRecordset=New ADODB.Recordset
dbConn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=MioDatabase.mdb"
sSQL="SELECT * FROM NOME_TABELLA"
rsetMioRecordset.Open sSQL, dbConn
Set Datagrid1.DataSource=rsetMioRecordset
cosa devo mettere al posto di MioRecordset???
(Al mosto di MioDatabase ho messo il nome del mio database e al posto di NOME_TABELLA ho messo il nome della tabella che ho nel database.)
Brigante
23-03-2005, 13:40
Originariamente inviato da enrico999
purtroppo devo farlo per forza....
comunque in questo codice:
Dim dbConn As ADODB.Connection
Dim rsetMioRecordset As ADODB.Recordset
Dim sSQL as String
Set dbConn=New ADODB.Connection
Set rsetMioRecordset=New ADODB.Recordset
dbConn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=MioDatabase.mdb"
sSQL="SELECT * FROM NOME_TABELLA"
rsetMioRecordset.Open sSQL, dbConn
Set Datagrid1.DataSource=rsetMioRecordset
cosa devo mettere al posto di MioRecordset???
(Al mosto di MioDatabase ho messo il nome del mio database e al posto di NOME_TABELLA ho messo il nome della tabella che ho nel database.)
Il recordset puoi chiamarlo come vuoi, di solito lo si chiama con un mome che identifica più o meno l'azione che compie, per esempio per leggere una tabella di utenti si può creare un recordset chiamato rsetUtenti; la parola rset viene di solito messa per indicare che appunto ci si riferisce ad un recordset, ma potresti anche scrivere Dim Pluto as ADODB.Recordset.
Ricordati, inoltre, che il nome del database deve essere compreso di percorso, cioè, per esempio: C:\Progetto\Database\NomeDatabase.mdb
:)
enrico999
23-03-2005, 14:10
ok, altra domandina stupida (non per me).
come faccio a creare un recordset???
E' già stato creato nel codice sopra...
enrico999
23-03-2005, 17:09
allora scusate, comunque non ho capito.
Quando scelgo file exe, devo scrivere il codice della connessione al database.
(potete dirmi solo questo codice???)
poi devo creare un recordset (pensavo che si facesse più o meno come con dreamweaver, non so se lo avete già usato, invece a quanto ho capito anche qua scrivo il codice a mano)
se anche per il recordset pèotete scrivermi solo il pezzo di codice per il recordset...
così almeno capisco:
questo pezzo serve per connetermi al database
e quest'altro è il recordset
RaouL_BennetH
23-03-2005, 22:51
Ma anche per il recordset il codice lo hanno già postato :)
facendo un sunto:
clicca sul form col tasto dx e scegli visualizza codice in modo da aprirti l'editor e scrivi:
'questo è un commento, come vedi i commenti si indicano con l'apice singolo e sono molto importanti
Option Explicit 'con questa dichiarazione intendiamo che le variabili che dichiareremo sono visibili a tutti gli oggetti del form
Dim db As ADODB.Connection 'dove db è un nome arbitrario ed è il database
Dim rs As ADODB.Recordset 'dove rs è un nome arbitrario ed è il recordset
Dim sSQL As String 'una comoda variabile di tipo stringa
Private Sub Form_Load() 'cioè, ogni volta che aprirò il form
Set db = New ADODB.Connection
Set rs = New ADODB.Recordset
'instauro la connessione con il database
db.ConnectionString "Provider=Microsoft.Jet.OLEDB.4.0; Data Source =" & App.Path & "\tuodatabase.mdb"
db.Open 'apro il database
sSQL = "" 'in modo che ogni volta che apro il form ho il buffer vuoto
sSQL = sSQL "SELECT * FROM nome_tabella_tuo_database" & VbCrlf
sSQL = sSQL & "ORDER BY Nome_Campo" ' ordino i dati in base a qualcosa
Set rs = cn.Execute(sSQL) 'eseguo la SQL che mi restituirà il recordset
Set Datagrid1.DataSource = rs 'visualizzo i dati sulla griglia
End Sub ' Fine Funzione Form_Load()
E' importante anche che quando chiudi il Form, o esci dal programma, o se il programma crasha, che prevedi una funzione che sganci l'applicazione dal database:
Private Sub Form_Unload(Cancel As Integer)
'sgancio il database alla chiusura del form
If cn.State = adStateOpen Then 'se il db è aperto
If rs.State = adStateOpen Then 'se ho dei recordset aperti
rs.Close 'chiudo il recordset
End If
cn.Close 'chiudo la connessione al database
End If
Set cn = Nothing 'nessuna connessione attiva
Set rs = Nothing 'nessun recordset attivo
End Sub
Brigante
24-03-2005, 20:31
Mi permetto di fare alcune precisazioni:
Non serve scrivere sSQL="" perchè la Form_Load viene eseguita una sola volta all'avvio, quindi la variabile viene dichiarata ed è automaticamente vuota, non si tratta di un buffer.
Per quanto riguarda Option Explicit, ho letto il commento a fianco, ma non ho capito se il commento è riferito alle variabili sotto di lui o ad Option Explicit, se fosse riferito a quest'ultimo è sbagliato, perchè invece serve per avere una dichiarazione esplicita ed obbligatoria delle variabili che verranno usate, questo per evitare di scrivere una variabile sbagliata o non dichiarata, infatti mettendo Option Explicit e scrivendo una variabile non dichiarata si avrà un errore in fase di esecuzione.
;)
enrico999
25-03-2005, 08:43
ho provato con il codice che mi ha detto, ma subito alla prima riga mi da un errore:
Dim Agenda As ADODB.Connection 'dove db è un nome arbitrario ed è il database
L'errore è il seguente:
Errore di compilazione: Tipo definito dall'utente non definito
Possibile che nessuno mi dica chiaramete come si fa la connessione ad un database???
Te lo dice perchè non hai fatto questa operazione:
"Prima di tutto creati un riferimento ad ADO: Menù Progetto -> Riferimenti..., seleziona ActiveX Data Objects 2.x Library, dove x è il secondo numerello della versione (dipende da quale hai installata);"
RaouL_BennetH
25-03-2005, 09:07
Originariamente inviato da Brigante
Mi permetto di fare alcune precisazioni:
Non serve scrivere sSQL="" perchè la Form_Load viene eseguita una sola volta all'avvio, quindi la variabile viene dichiarata ed è automaticamente vuota, non si tratta di un buffer.
E' giusto, hai ragione, è dovuto al fatto che in genere io per i recordset associo tutto a comodi pulsanti. :)
Per quanto riguarda Option Explicit, ho letto il commento a fianco, ma non ho capito se il commento è riferito alle variabili sotto di lui ......-cut-
;)
Rileggendo il mio post, in effetti non era chiaro dalla posizione del commento, ma non intendevo assolutamente il secondo caso.
Grazie cmq, per le precisazioni :)
RaouL.
enrico999
25-03-2005, 09:43
Originariamente inviato da cionci
Te lo dice perchè non hai fatto questa operazione:
"Prima di tutto creati un riferimento ad ADO: Menù Progetto -> Riferimenti..., seleziona ActiveX Data Objects 2.x Library, dove x è il secondo numerello della versione (dipende da quale hai installata);"
Come faccio a sapere la versione che ho installato???
RaouL_BennetH
25-03-2005, 09:50
Originariamente inviato da enrico999
Come faccio a sapere la versione che ho installato???
Seguendo la procedura che ti ha indicato cionci, quando arrivi a vedere nell'elenco:
Microsoft ActiveX Data Objects 2.x Library
seleziona quella che ha il numero più alto.
Per vedere se il componente è stato riferito correttamente, puoi accorgertene facendo così:
all'interno del codice, se scrivi Dim Agenda As (premendo spazio, ti si dovrebbe aprire l'intellisense, ovvero quell'elenco di "voci" e dovresti vedere anche la voce ADODB).
Se esce nell'elenco, allora hai messo il riferimento giusto.
enrico999
25-03-2005, 10:21
altro errore: (è una di queste due righe)
Private Sub Form_Load() 'cioè, ogni volta che aprirò il form
db.ConnectionString "Provider=Microsoft.Jet.OLEDB.4.0; Data Source =" & App.Path & "\tuodatabase.mdb"
Errore di compilazione: utilizzo non valido di property
RaouL_BennetH
25-03-2005, 11:50
Originariamente inviato da enrico999
altro errore: (è una di queste due righe)
Private Sub Form_Load() 'cioè, ogni volta che aprirò il form
db.ConnectionString "Provider=Microsoft.Jet.OLEDB.4.0; Data Source =" & App.Path & "\tuodatabase.mdb"
Errore di compilazione: utilizzo non valido di property
Hai dimenticato il segno di uguale tra connectionstring e provider:
db.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source =" & App.Path & "\tuodatabase.mdb"
FAI attenzione ad una cosa, al posto di "tuodatabase.mdb" devi mettere il nome del database di access che hai creato.
enrico999
25-03-2005, 12:24
Prima di tutto ringraio tutti per la vostra disponibilità, sto procedendo in questo mio progetto a piccoli passi...
però ora ho un altro errore alla riga (che tra l'altro è l'unica ad essere rossa):
sSQL = sSQL "SELECT * FROM Rubrica" & VbCrlf
Errore di compilazione: errore di sintassi
RaouL_BennetH
25-03-2005, 12:25
Originariamente inviato da enrico999
Prima di tutto ringraio tutti per la vostra disponibilità, sto procedendo in questo mio progetto a piccoli passi...
però ora ho un altro errore alla riga (che tra l'altro è l'unica ad essere rossa):
sSQL = sSQL "SELECT * FROM Rubrica" & VbCrlf
Errore di compilazione: errore di sintassi
anche qui, piccolo errore di sintassi, hai dimenticato un "&":
sSQL = sSQL & "SELECT * FROM Rubrica" & vbCrlf
enrico999
25-03-2005, 12:27
scusate, mi rispondo da solo, manca un " & " e la riga diventa:
sSQL = sSQL & "SELECT * FROM Rubrica" & vbCrLf
Giusto???
comunque dopo aver messo a posto questa riga ho un altro errore in questa riga:
Set rs = cn.Execute(sSQL) 'eseguo la SQL che mi restituirà il recordset
Errore di compilazione: variabile non definita
RaouL_BennetH
25-03-2005, 12:38
Originariamente inviato da enrico999
scusate, mi rispondo da solo, manca un " & " e la riga diventa:
sSQL = sSQL & "SELECT * FROM Rubrica" & vbCrLf
Giusto???
comunque dopo aver messo a posto questa riga ho un altro errore in questa riga:
Set rs = cn.Execute(sSQL) 'eseguo la SQL che mi restituirà il recordset
Errore di compilazione: variabile non definita
Probabilmente perchè la variabile da te definita non si chiama cn.
Vedendo il tuo post precedente, l'hai chiamata "db", quindi sostituisci cn con db:
set rs = db.Execute(sSQL)
Nota una cosa, quando cìè qualcosa che non va puoi accorgertene prima di lanciare il programma perchè l'intellisense non ti mostra l'elenco dei metodi e delle proprietà.
Nel senso che, quando hai scritto "cn." avrebbe dovuto aprirsi l'intellisense, non aprendosi, vuol dire che, la maggior parte delle volte almeno, stai utilizzando una variabile che non hai ancora definito.
Per capire qual'è la tua variabile, devi riferirti a quella che hai utilizzato per:
Dim nome_che_hai_dato As ADODB.Connection
Se si chiama db, allora la riga diventa: set rs = db.Execute(sSQL)
se, per esempio, l'avessi chiamata Collegamento:
Set rs = Collegamento.Execute(sSQL)
Brigante
25-03-2005, 12:41
...Perchè metti il vbCrLf alla fine della stringa SQL? ...Toglilo, non serve a niente!
:)
RaouL_BennetH
25-03-2005, 12:43
Originariamente inviato da Brigante
...Perchè metti il vbCrLf alla fine della stringa SQL? ...Toglilo, non serve a niente!
:)
Lol, l'ha messo perchè era indicato nel codice che avevo postato io in precedenza, non è colpa sua ma mia :p
enrico999
25-03-2005, 13:00
ho un'altro errore in questa riga:
Set Datagrid1.DataSource = rs 'visualizzo i dati sulla griglia
Errore di compilazione: variabile non definita
... dai che quasi ci sono
Brigante
25-03-2005, 13:33
Originariamente inviato da enrico999
ho un'altro errore in questa riga:
Set Datagrid1.DataSource = rs 'visualizzo i dati sulla griglia
Errore di compilazione: variabile non definita
... dai che quasi ci sono
Controlla che il recordset sia valido, e che Datagrid1 esista.
enrico999
25-03-2005, 14:08
allora, ho messo una datagrid nella form chiamandola Datagrid1, adesso l'errore che mi esce è il seguente:
errore di run-time '-2147217900 (80040e14)
errore di sintassi nella proposizione FROM
aiutooooo
Ma Rubrica esiste nel tuo database ? Ovviamente la query dipende da ciò che tu vuoi visualizzare...
enrico999
25-03-2005, 14:33
certo che esiste!
vi posto tutto il codice del mio porgetto:
'questo è un commento, come vedi i commenti si indicano con l'apice singolo e sono molto importanti
Option Explicit 'con questa dichiarazione intendiamo che le variabili che dichiareremo sono visibili a tutti gli oggetti del form
Dim db As ADODB.Connection 'dove db è un nome arbitrario ed è il database
Dim rs As ADODB.Recordset 'dove rs è un nome arbitrario ed è il recordset
Dim sSQL As String 'una comoda variabile di tipo stringa
Private Sub Form_Load() 'cioè, ogni volta che aprirò il form
Set db = New ADODB.Connection
Set rs = New ADODB.Recordset
'instauro la connessione con il database
db.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source =" & App.Path & "\Agenda.mdb"
db.Open 'apro il database
sSQL = "" 'in modo che ogni volta che apro il form ho il buffer vuoto
sSQL = sSQL & "SELECT * FROM Rubrica"
sSQL = sSQL & "ORDER BY ID" ' ordino i dati in base a qualcosa
Set rs = db.Execute(sSQL) 'eseguo la SQL che mi restituirà il recordset
Set Datagrid1.DataSource = rs 'visualizzo i dati sulla griglia
End Sub ' Fine Funzione Form_Load()
Private Sub Form_Unload(Cancel As Integer)
'sgancio il database alla chiusura del form
If db.State = adStateOpen Then 'se il db è aperto
If rs.State = adStateOpen Then 'se ho dei recordset aperti
rs.Close 'chiudo il recordset
End If
db.Close 'chiudo la connessione al database
End If
Set db = Nothing 'nessuna connessione attiva
Set rs = Nothing 'nessun recordset attivo
End Sub
Serve uno spazio rpima di ORDER...
" ORDER
enrico999
25-03-2005, 14:51
se faccio uno spazio prima di ORDER, mi esce questo errore:
Errore di run-time '7004':
impossibile assegnare segnalibri al gruppo di righe
sSQL = sSQL & "SELECT * FROM Rubrica"
sSQL = sSQL & " ORDER BY ID" '
Così è impossibile che ti dia errore sulla query...l'errore è altrove...
enrico999
25-03-2005, 15:07
quando faccio il debag mi evidenzia questa riga:
Set Datagrid1.DataSource = rs 'visualizzo i dati sulla griglia
forse l'errore sta qui...
Brigante
25-03-2005, 17:09
Originariamente inviato da enrico999
quando faccio il debag mi evidenzia questa riga:
Set Datagrid1.DataSource = rs 'visualizzo i dati sulla griglia
forse l'errore sta qui...
1) Togli quell'sSQL=""!
2) Aggiungi nel tuo codice la riga che ti ho indicato sotto, prima di Set rs = db.Execute(sSQL), quindi:
...
rs.CursorLocation = adUseClient
Set rs = db.Execute(sSQL)
...
Adesso dovrebbe funzionare tutto.
enrico999
26-03-2005, 08:40
fatto, ma continua a darmi questo errore:
Errore di run-time '7004':
impossibile assegnare segnalibri al gruppo di righe
e mi evidenzia ancora questa riga:
Set Datagrid1.DataSource = rs 'visualizzo i dati sulla griglia
P.S.
Comunque ho provato a scaricare un progetto già fatto, per vedere se magari riuscivo a capirci qualcosa, ma già nell'aprirlo mi dice che è impossibile caricare dei file .ocx
Brigante
26-03-2005, 09:04
Togli dal tuo codice la seguente riga:
Set rs = db.Execute(sSQL) 'eseguo la SQL che mi restituirà il recordset
...e sostituiscila con le seguenti righe:
With rs
.CursorLocation = adUseClient
.Open sSQL, db, adOpenDynamic, adLockOptimistic
End With
With rs serve per impostare più di una proprietà, in questo caso del recordset (rs), senza dover digitare sempre rs ad ogni riga. Poi, CursorLocation = adUseClient indica che il cursore è gestito nel client, le parole adOpenDynamic e adLockOptimistic indicano rispettivamente l'apertura di un cursore dinamico e il blocco ottimistico, che vincola i record solo in fase di update.
Comunque, ora funziona.
P.S.: Consiglio gratuito: Oltre al nostro aiuto comincia a leggerti un buon manuale su Visual Basic 6.0 altrimenti non riesci a capire quello che fai senza le basi del linguaggio.
;)
enrico999
26-03-2005, 09:33
grazie, grazie grazie!!!!
però mi serivirebbe sapere perchè se apro un progetto già fatto che ho trovato in rete mi dice che non può caricare alcuni file .ocx
casa devo fare per aprirlo e provarlo????
Brigante
26-03-2005, 11:55
Originariamente inviato da enrico999
grazie, grazie grazie!!!!
però mi serivirebbe sapere perchè se apro un progetto già fatto che ho trovato in rete mi dice che non può caricare alcuni file .ocx
casa devo fare per aprirlo e provarlo????
Ti appare un errore perchè quel progetto utilizza dei controlli ocx che non sono installati sul tuo PC, quindi dall'errore che appare leggi qual'è il file .ocx che manca, lo cerchi su internet e lo installi sotto la directory System32 di Windows.
enrico999
26-03-2005, 13:25
Grazie a tutti!
fulviettino
01-04-2005, 11:29
Ciao a tutti,
mi inserisco al 3d perchè ho un problemino simile a quello di cui si è parlato.
Dovrei realizzare alcune query su tabelle con visual basic; la differenza con quello di cui si è parlato fin'ora è che le tabella che ho sono in paradox (hanno estenzione .DB).
Mi si inchioda in questo punto:
dbConn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=Mixi.DB"
con l'errore Formato di databse sconosciuto.
Non è possibile con visual basic effettuare query su tabella .DB?
Brigante
01-04-2005, 11:51
Originariamente inviato da fulviettino
Ciao a tutti,
mi inserisco al 3d perchè ho un problemino simile a quello di cui si è parlato.
Dovrei realizzare alcune query su tabelle con visual basic; la differenza con quello di cui si è parlato fin'ora è che le tabella che ho sono in paradox (hanno estenzione .DB).
Mi si inchioda in questo punto:
dbConn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=Mixi.DB"
con l'errore Formato di databse sconosciuto.
Non è possibile con visual basic effettuare query su tabella .DB?
La stringa di connessione deve essere così:
dbConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=c:\...\Mixi.DB;" & _
"Extended Properties=Paradox 5.x;"
Dove: dbConn è l'oggetto connessione, C:\...\File_Database.DB è il path del tuo database.
N.B.: Dal sito di Microsoft: Note Paradox data is only updateable when Jet 4.0 SP5 or a later version or the BDE is installed. Without Jet 4.0 SP5 or a later version or the BDE, Paradox data can be read, imported and exported, or linked to as read-only.
fulviettino
01-04-2005, 11:59
Originariamente inviato da Brigante
..cut...
dbConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=c:\...\Mixi.DB;" & _
"Extended Properties=Paradox 5.x;"
...cut...
Su questo pezzo di codice
dbConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=c:\prova\Mixi.DB;" & _
"Extended Properties=Paradox 5.x;"
ottengo questo errore:
"c:\prova\Mixi.DB" non è un percorso valido. Assicurarsi che il nome del percorso sia corretto e di essere collegati al server in cui si trova il file.
Il file Mixi.DB è una tabella diciamo, non un vero e proprio database. Inoltre se può essere di aiuto, l'accesso a questa tabella è protetto da pw...:muro:
edit: forse dico una cavolata..ma è giusto usare la connessione ADO?
Scusate, ma perchè cercate di aprire un file con estensione .db con il provider OLE di Jet ???? Quello può aprire solo file .mdb...
Che tipo di database è quello ?
fulviettino
01-04-2005, 13:35
Originariamente inviato da cionci
Scusate, ma perchè cercate di aprire un file con estensione .db con il provider OLE di Jet ???? Quello può aprire solo file .mdb...
Che tipo di database è quello ?
Non ho un vero e proprio database; ho un insieme di tabelle che hanno estensione .DB (paradox) ...:muro:
Brigante
01-04-2005, 14:08
Originariamente inviato da cionci
Scusate, ma perchè cercate di aprire un file con estensione .db con il provider OLE di Jet ???? Quello può aprire solo file .mdb...
Che tipo di database è quello ?
No, leggendo la MSDN c'è scritto che il Microsoft Jet può lavorare benissimo i file di Paradox, basta scaricarsi l'ultimo aggiornamento di MS Jet e dovrebbe funzionare senza problemi in scrittura, perchè in lettura già funziona da tempo.
;)
fulviettino
01-04-2005, 14:14
Originariamente inviato da Brigante
No, leggendo la MSDN c'è scritto che il Microsoft Jet può lavorare benissimo i file di Paradox, basta scaricarsi l'ultimo aggiornamento di MS Jet e dovrebbe funzionare senza problemi.
Io ho installato visual basic 6 e tra i riferimenti ho trovato microsoft jet and replication objects 2.5 library...devo aggiungere questo riferimento? Ma come dichiaro la connessione?
Dim dbConn As...
Brigante
01-04-2005, 14:15
Originariamente inviato da fulviettino
Su questo pezzo di codice
dbConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=c:\prova\Mixi.DB;" & _
"Extended Properties=Paradox 5.x;"
ottengo questo errore:
"c:\prova\Mixi.DB" non è un percorso valido. Assicurarsi che il nome del percorso sia corretto e di essere collegati al server in cui si trova il file.
Il file Mixi.DB è una tabella diciamo, non un vero e proprio database. Inoltre se può essere di aiuto, l'accesso a questa tabella è protetto da pw...:muro:
edit: forse dico una cavolata..ma è giusto usare la connessione ADO?
Non devi puntare il file .DB ma soltanto la cartella che lo contiene, come avviene con i file .dbf
...Cioè:
dbConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=c:\prova;" & _
"Extended Properties=Paradox 5.x;"
Poi quando fai la SELECT SQL scriverai:
SELECT ... FROM NOME_TABELLA ...
Dove: NOME_TABELLA è il nome del file senza estensione .db.
Prova e vedrai che funziona.
:)
Brigante
01-04-2005, 14:18
Originariamente inviato da fulviettino
Io ho installato visual basic 6 e tra i riferimenti ho trovato microsoft jet and replication objects 2.5 library...devo aggiungere questo riferimento? Ma come dichiaro la connessione?
Dim dbConn As...
No, devi utilizzare semplicemente ADO (ActiveX Data Objects 2.x Library), dove x è il numerello dell'ultima versione, passandogli la stringa di connessione che abbiamo creato poco fà. Per vedere come si effettua una connessione al database rileggiti questo post dall'inizio e troverai tutte le informazioni che ti servono.
fulviettino
01-04-2005, 14:22
Grazie Brigante, sei troppo paziente! Ti metto ancora un pò alla prova :)
Sembra girare tutto solo che ora sulla riga
sSQL = sSQL & "SELECT * FROM Mixi"
ho un errore run-time: impossibile decifrare il file...
il dubbio che ho è che la tabella cui cerco di accedere "Mixi.DB" è protetta da password solo che non mi da modo di inserirla...
edit: scusa la riga dove c'è l'errore è questa:
Set rsetMioRecordset = dbConn.Execute(sSQL)
Brigante
01-04-2005, 14:30
Originariamente inviato da fulviettino
Grazie Brigante, sei troppo paziente! Ti metto ancora un pò alla prova :)
Sembra girare tutto solo che ora sulla riga
sSQL = sSQL & "SELECT * FROM Mixi"
ho un errore run-time: impossibile decifrare il file...
il dubbio che ho è che la tabella cui cerco di accedere "Mixi.DB" è protetta da password solo che non mi da modo di inserirla...
edit: scusa la riga dove c'è l'errore è questa:
Set rsetMioRecordset = dbConn.Execute(sSQL)
Se la password la conosci prova a modificare la stringa di connessione in questo modo:
dbConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=c:\prova;" & _
"Password=scrivi_qua_la_password" & _
"Extended Properties=Paradox 5.x;"
...e riprova.
:)
fulviettino
01-04-2005, 14:32
Originariamente inviato da Brigante
Se la password la conosci prova a modificare la stringa di connessione in questo modo:
dbConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=c:\prova;" & _
"Password=scrivi_qua_la_password" & _
"Extended Properties=Paradox 5.x;"
...e riprova.
:)
nome account o password non valida
:muro: :muro: :muro: :muro: :muro: :muro:
Brigante
01-04-2005, 14:35
Originariamente inviato da fulviettino
nome account o password non valida
:muro: :muro: :muro: :muro: :muro: :muro:
Se vuoi inserire anche la UserID:
dbConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=c:\prova;" & _
"User Id=scrivi_qua_la_user_ID;" & _
"Password=scrivi_qua_la_password;" & _
"Extended Properties=Paradox 5.x;"
N.B.: La UserID e la password le devi inserire nella stringa di connessione così come sono, senza virgolette, apici e affini!
fulviettino
01-04-2005, 14:37
Originariamente inviato da Brigante
Se vuoi inserire anche la UserID:
dbConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=c:\prova;" & _
"User Id=scrivi_qua_la_user_ID;" & _
"Password=scrivi_qua_la_password" & _
"Extended Properties=Paradox 5.x;"
eh ma la user id non l'ho mai usata...con qualsiasi programma che legga i file .db riesco a leggere quella tabella inserendo solo la password...non mi è mai stata richiesta la user:muro:
Brigante
01-04-2005, 14:39
Originariamente inviato da fulviettino
eh ma la user id non l'ho mai usata...con qualsiasi programma che legga i file .db riesco a leggere quella tabella inserendo solo la password...non mi è mai stata richiesta la user:muro:
ATTENZIONE! Nella stringa di connessione che ti ho dato sopra mancava il ; (punto e virgola) dopo la password, forse il problema è quello.
fulviettino
01-04-2005, 14:40
Mancava il punto e virgola dopo la password :muro: :muro: :muro: :muro:
ora un altro err sempre qui
dbConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=c:\prova;" & _
"Password=pw;" & _
"Extended Properties=Paradox 5.x;"
Impossibile avviare l'applicazione. il file di informazioni sul gruppo di lavoro è mancante o aperto in modo esclusivo da un altro utente
fulviettino
01-04-2005, 15:01
Ma questo simpaticissimo file .DB non è aperto da nessuna parte!!!! :muro: :muro:
fulviettino
01-04-2005, 16:36
Non è che c'è qualche impostazione nel driver odbc?:confused:
:help: :help:
Brigante
01-04-2005, 16:51
Originariamente inviato da fulviettino
Non è che c'è qualche impostazione nel driver odbc?:confused:
:help: :help:
Stai usando ADO non l'ODBC...
Al posto di ...Password=bla_bla_bla; metti Jet Oledb: Database Password=bla_bla_bla;
Prova...
P.S.: Quando scrivi il codice togli lo spazio tra i due punti e la parola database.
Al posto di "Password=pw;" metti: "Jet Oledb:Database Password=pw;"
Prova così...
Brigante
01-04-2005, 16:53
Originariamente inviato da cionci
Al posto di "Password=pw;" metti: "Jet Oledb:Database Password=pw;"
Prova così...
:D ...Anche a te ti ha inserito la faccina che ride!
...Bisognerebbe far disabilitare le faccine in questa sezione, altrimenti se scrive del codice appaiono cose strane.
:D
Le puoi disabilitare prima di inviare il messaggio ;)
fulviettino
01-04-2005, 17:05
beh quella della faccina è proprio bella :D
cmq in questo modo la query funziona ho solo un errore Impossibile assegnare segnalibri al gruppo di righe che però è dato da questa istruzione:
Set DataGrid1.DataSource = rsetMioRecordset 'visualizzo i dati sulla griglia
quindi direi che dipende dal DataGrid1 che non ho impostato a dovere.
Una domanda: avrei bisogno di effettuare una query (per esempio query1) e sul risultato di questa (dataset1) effettuare un'altra query. Posso farlo effettuando la query2 sul dataset1 senza necessariamente memorizzare il dataset1 in una tabella di appoggio?
Brigante
01-04-2005, 17:16
Originariamente inviato da fulviettino
beh quella della faccina è proprio bella :D
cmq in questo modo la query funziona ho solo un errore Impossibile assegnare segnalibri al gruppo di righe che però è dato da questa istruzione:
Set DataGrid1.DataSource = rsetMioRecordset 'visualizzo i dati sulla griglia
quindi direi che dipende dal DataGrid1 che non ho impostato a dovere.
Una domanda: avrei bisogno di effettuare una query (per esempio query1) e sul risultato di questa (dataset1) effettuare un'altra query. Posso farlo effettuando la query2 sul dataset1 senza necessariamente memorizzare il dataset1 in una tabella di appoggio?
Riguardo a quell'errore è già stata fornita la soluzione nella pagina precedente, devi impostare nel recordset la proprietà CursorLocation=adUseClient
fulviettino
01-04-2005, 20:36
Originariamente inviato da Brigante
Riguardo a quell'errore è già stata fornita la soluzione nella pagina precedente, devi impostare nel recordset la proprietà CursorLocation=adUseClient
Grazie mille! :)
Lunedì faccio qualche altra prova, ora sono via. Intanto quoto la domanda che ho fatto su..
Una domanda: avrei bisogno di effettuare una query (per esempio query1) e sul risultato di questa (dataset1) effettuare un'altra query. Posso farlo effettuando la query2 sul dataset1 senza necessariamente memorizzare il dataset1 in una tabella di appoggio?
fulviettino
15-07-2005, 10:56
Ciao ragazzi ..riprendo questo 3d morto da un pò di mesi...avrei bisogno di una mano per esportare tabelle (da un database mdb) in dbf...ho aperto un 3d qui (http://www.hwupgrade.it/forum/showthread.php?t=978208)... :help:
fulviettino
20-07-2005, 09:24
Ciao ragazzi ..riprendo questo 3d morto da un pò di mesi...avrei bisogno di una mano per esportare tabelle (da un database mdb) in dbf...ho aperto un 3d qui (http://www.hwupgrade.it/forum/showthread.php?t=978208)... :help:
:help: :help:
fulviettino
20-07-2005, 12:45
sbagliato post...sorry!
uaz mi avevi riaperto le speranze... :(
fulviettino
08-08-2005, 16:09
Ciao a tutti,
tempo fa, seguendo questo 3d, avevo creato un progetto in vb6 che apriva un database fatto in access (MIODB.MDB) e lanciava una query presente nello stesso database (QUERY1).
Con il seguente codice funzionava tutto:
Dim rsquery As Recordset 'recordset per la query
Dim miodb As Database 'database access che contiene la query
Set miodb = OpenDatabase (MIODB.MDB) 'apertura database
Set rsquery = miodb.OpenRcordset("QUERY1") 'esecuzione query
Come riferimenti nel progetto ho aggiunto sia "Microsoft ActiveX Data Objects 2.5 Library" sia "Microsoft DAO 3.6 Object Library".
Qualcuno saprebbe dirmi come mai ora, in corrispondenza dell'ultima riga di codice che ho postato visualizzo il seguente errore:
13 tipo non corrispondente
Manca qualche riferimento nel progetto??
Grazie a tutti!
RaouL_BennetH
08-08-2005, 16:12
Ciao a tutti,
tempo fa, seguendo questo 3d, avevo creato un progetto in vb6 che apriva un database fatto in access (MIODB.MDB) e lanciava una query presente nello stesso database (QUERY1).
Con il seguente codice funzionava tutto:
Dim rsquery As Recordset 'recordset per la query
Dim miodb As Database 'database access che contiene la query
Set miodb = OpenDatabase (MIODB.MDB) 'apertura database
Set rsquery = miodb.OpenRcordset("QUERY1") 'esecuzione query
Come riferimenti nel progetto ho aggiunto sia "Microsoft ActiveX Data Objects 2.5 Library" sia "Microsoft DAO 3.6 Object Library".
Qualcuno saprebbe dirmi come mai ora, in corrispondenza dell'ultima riga di codice che ho postato visualizzo il seguente errore:
13 tipo non corrispondente
Manca qualche riferimento nel progetto??
Grazie a tutti!
non vorrei fosse solo un errore di sintassi:
Set rsquery = miodb.OpenRcordset("QUERY1") 'esecuzione query
da trasformarsi in:
Set rsquery = miodb.OpenRecordset("QUERY1") 'esecuzione query
fulviettino
08-08-2005, 16:26
non vorrei fosse solo un errore di sintassi:
Set rsquery = miodb.OpenRcordset("QUERY1") 'esecuzione query
da trasformarsi in:
Set rsquery = miodb.OpenRecordset("QUERY1") 'esecuzione query
Intanto ti ringrazio per la risposta.
L'errore era nella dichiarazione dei recordset che andavano dichiarati così:
Dim rsquery As DAO.Recordset
solo non capisco come mai prima funzionava...mah
Grassie ancora!
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.