Db Access e VB.Net

giovedì 17 giugno 2004 - 18.47

angelo81 Profilo | Newbie

Ho un piccolo problema…..Praticamente ho una funzione a cui passo una stringa (comando sql) e tale funzione mi restituisce un datareader con i record che il comando sql mi ha filtrato.

Public Function Ricerca(ByVal sql As String) As OleDbDataReader
Try
Me.Apri()
Dim cmd As New OleDbCommand()
cmd.Connection = Me.Connessione
cmd.CommandText = sql
Ricerca = cmd.ExecuteReader()
Me.Chiudi()
Catch ex As OleDbException 'Se si verifica un errore...
MsgBox("RICERCA FALLITA:" + ex.Message)
End
End Try

End Function


Se scrivo il codice chiamante in questo modo:

Dim Ricerca2 As OleDbDataReader
Dim sql As String 'Variabile usata per creare la query sql
sql = "SELECT * FROM nometab”
Ricerca2 = Database.Ricerca(sql) ‘la funzione sopra riportata
While Ricerca2.Read() ‘Errore!! Dice che il dataread è chiuso
‘leggo i dati che mi interessano
End While
Ricerca2.Close()

Il problema è che mi dice che il datareader è chiuso.
Altra cosa…come si fa per calcolare quanti record sono presenti nel dataread?
E come si gestiscono gli errori dell’ oledbexception? (con un case all’ interno di catch e try ma dove si trova il numero dell’ errore che viene generato?). Secondo voi è una regola di programmazione validà la mia…nel senso
È giusto che ce un form che riceve input tramite textbox e lo invia ad una funzione che ricerca qualcosa e restituisce tutti i record tramite un dataread?
Ultima cosa per gestire un db di access cosa usate? ADODB o OLEDB o cos’altro?


Saluti Angelo

trinity Profilo | Guru

Allora per utilizzare l'ado.net e il datareader devi fare in questo modo:

Posto esempio codice:


Dim db as New OledbConnection

apri il database

Dim cmd As New OledbCommand
Dim dr as OledbDataReader

Dim sql As String

sql = "SELECT * FROM nome_tabella"
cmd = New OledbCommand(sql, db)
dr = cmd.ExecuteReader
While dr.Read

esegui le procedure che devi fare

End While
dr.Close()
cmd.Connection.close()


Ciao
Fabio

trinity Profilo | Guru

Per quanto riguarda l'utilizzo di access, purtroppo da parte mia non te lo consiglio, è un database molto limitato, io personalmente utilizzo Mysql e in certi casi MSSQL Server 2000.

Comunque per quanto riguarda access, nel vb net devi utilizzare il provider OleDb.

Ciao
Fabio

angelo81 Profilo | Newbie

Grazie per aver risposto...Ho risolto il problema del datareader (il problema cmq era passare il datareader ad una funzione e non farlo funzionare all' interno di un'altra), per quato riguarda la conta dei record?..possibile che l' unico modo è mettere un contatore all' interno del ciclo while....con dao si usava recordcounts che ora non mi ritrovo...e gli errori?...come posso gestirli?..grazie anticipatamente :-)

trinity Profilo | Guru

La proprietà err.Number esiste in vb net

io la utilizzo nelle procedure

try

codice......

Catch

Msgbox(Err.Number)

End Try


Ciao
Fabio

angelo81 Profilo | Newbie

Nell' evento KeyPress di un textbox voglio controllare il carattere digitato e se non è quello che voglio devo fare in modo che non lo scrive, il problema è come fare per annullare il carattere digitato? in vb5 bastava keyascii=0 ma ora la proprieta è di sola lettura.

Saluti Angelo

trinity Profilo | Guru

In questo esempio nel campo textbox puoi solo scrivere il carattere "a"

Dim cha As Char = e.KeyChar
If cha = "a" Then
Else
e.Handled = True
End If
Questo ti dovrebbe aiutare

Ciao
Fabio

angelo81 Profilo | Newbie

Grazie Fabio per l’aiuto del keypress, sono riuscito a risolvere.
Ora ho un’ altro problema:-), ho una funzione che carica degli items su un combobox dichiarato tramite codice, come qui sotto:

Function Carica() As ComboBox
Dim ComboApp As New ComboBox()
ComboApp.items.add (“TESTO1”)
Return (ComboApp)
End Function

Dopo ho un form con su disegnato un combobox che devo riempire con gli items che elabora la funzione.

(Codice chimante)

ComboBox1=NomeClasse.Carica() 'associazione

Il problema (stranissimo) è che, dopo che associo il combobox alla funzione, nel combobox disegnato sul form non esce l’ item TESTO1 (lo da vuoto come se non avesse associato niente) ma la cosa strana è che se dopo averlo associato scrivo:

Msgbox (combobox1.item(0))

Nel msgbox esce scritto Testo1

C’è di piu’ dopo che ho associato il combo alla funzione, il combo è come morto:-), nel senso che se carico un item dal codice chimante non lo visualizza.

Io penso che ci sia qualche proprietà del combobox1 da cambiare, ma quale?

Io le ho provate tutte da combobox.refresh al combobox.name per impostargli lo stesso name del combobox della funzione, ma niente.
O forse ho sbagliato ad associare con l’operatore uguale ci vuole un operatore apposito per i controlli.

trinity Profilo | Guru

E' strano, ma ora su due piedi non saprei cosa dirti, dovrei vedere il progetto e capire un pò tutto.
Solo ti volevo chiedere, il teso che devi inserire nella combobox è fisso oppure deriva da una tabella di database?Perchè se sono fissi puoi inserire i dati direttamente dalla proprietà Items della combo.

Ciao
Fabio

angelo81 Profilo | Newbie

no deriva tutto da una tabella di database.

angelo81 Profilo | Newbie

Ho risolto:-)..Praticamente da come ho capito io, sicuramente ho capito male, comunque penso che chiedevo al vb di duplicare le risorse, nel senso che creavo 2 combo uno disegnato e uno a livello di codice e passavo quello disegnato nel form alla funzione che me ne restituiva un secondo e lo riassociavo al primo...quindi creavo 2 controlli per aggiornarne uno, invece ora ho risolto passando alla funzione direttamente il combobox da modificare e non restituisco + il controllo come prima.

Ora ho dichiarato la funzione cosi:

Function Carica (ComboBox as ComboBox)

e passo direttamente il controllo alla funzione che lo elabora.
Non ci ho capito + di tanto pero' penso che il ragionamento sia una cosa del genere.
Ciao e grazie ancora per la disponibilità.

trinity Profilo | Guru

di nulla

ciao
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5