Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    10

    [VB 2008 Express] Creare Database .mdb da codice

    Ciao a tutti,
    sono nuovo in questo forum e spero di non aver già sbagliato sessione

    Qualcuno può aiutarmi a creare un database .mdb direttamente da codice?
    grazie in anticipo

    (Uso visual basic 2008 express edition)

  2. #2
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Devi usare ADOX, ovvero l'estensione di ADO.
    http://www.codeguru.com/vb/gen/vb_da...icle.php/c5149

    Ti consiglio di scaricarti il SDK di ADO 2.8, dove troverai una guida dettagliata con esempi di codice.

    Microsoft Data Access Components (MDAC) 2.8 Software Development Kit
    http://www.microsoft.com/downloads/d...DisplayLang=en

    per ulteriori ricerche:
    http://lmgtfy.com/?q=how+to+make+mdb+database+vb+2008


  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    10
    solo un'informazione...
    io sto creando un archivio con, ovviamente, un database per l'archiviazione dati.

    Ogni volta che parte il programma quest'ultimo controlla se esiste il database (salvato in C:\database.mdb): nel caso in cui non lo trovasse allora lo ricrea...(usando ADOX)

    Questo programma serve a mio padre su un altro pc...
    se sposto l'eseguibile su un altro pc, funziona ugualmente???


    ps: non mi funziona
    ho scaricato il Microsoft ADO Ext. 2.7 for DDL and Security ma quando vado su Service References > Add Reference. non me lo trova =S

  4. #4

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    10
    grazie 1000
    non avevo letto una parte...(non chiedermi il perchè )

    comunque. ora ho riscontrato un errore che non riesco a risolvere:
    Creato il database, mi connetto a quest'ultimo...e funziona
    quando creo le tabelle mi da errore in Cat.Tables.Append(objTable)

    Qui il codice:



    Cat = New ADOX.Catalog
    Dim Cn As ADODB.Connection
    Dim objTable As ADOX.Table
    Cn = New ADODB.Connection
    objTable = New ADOX.Table

    Cn.Open(New"PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & DataPatch & ";Jet OLEDBatabase Password=" & DataPassw)

    Cat.ActiveConnection = Cn
    objTable.Name = "Profile"
    objTable.Columns.Append("PrimaryKey_Field", DataTypeEnum.adChar)

    Cat.Tables.Append(objTable) < ERRORE ComException non è stata gestita .Tipo non valido

    objTable = Nothing
    Cat = Nothing
    Cn.Close()
    Cn = Nothing

  6. #6
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Infatti adChar non mi pare sia un tipo valido per il database Access.

    Vado a memoria: dovrebbe essere adVarWChar .

    Fai attenzione, devi studiarti bene i tipi di dati di Access, ogni tipo di database (Acces, Oracle, SQL Server, ecc..) può gestire tipi di dati diversi a volte specifici solo per quel determinato database.
    Per potersi interfacciare con tutti i tipi di database, ADOX li contempla tutti, ma sei tu che devi sapere quali usare.

    Questo può aiutarti:
    Progettino di esempio su ADO-ADOX
    http://www.visual-basic.it/areadownload.asp?key=ADOX
    (solo utenti registrati possono scaricare).


  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    10
    grazie 1000
    risolto ancora...
    ihih

    ho finito il form di aggiunta dati,
    eliminazione dati
    e riordino dati

    ora però non capisco perchè mi ritorna questo errore quando modifico una pratica tramite il bottone "modifica":

    Generazione SQL dinamica per UpdateCommand non supportata per un SelectCommand che non restituisce informazioni di colonne chiave.

    Qui il codice:

    Private Sub EditButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EditButton.Click
    If (PraticaField.Text = "") Then
    MsgBox("Attenzione: il nome della pratica deve essere specificato", MsgBoxStyle.Information)
    Return
    End If

    Dim Cn As New OleDb.OleDbConnection
    Cn.ConnectionString = "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & DataPatch & ";Jet OLEDBatabase Password=" & DataPassw
    Cn.Open()

    'Edit Data
    Dim ds As New DataSet
    Dim da As OleDb.OleDbDataAdapter
    Dim sql As String

    sql = "SELECT * FROM Archive WHERE Gnr_Pratica='" + OldVar + "'"
    da = New OleDb.OleDbDataAdapter(sql, Cn)
    da.Fill(ds, "Edit")

    ds.Tables("Edit").Rows(0).Item("Gnr_Pratica") = PraticaField.Text
    ds.Tables("Edit").Rows(0).Item("Gnr_Committente") = CommittenteField.Text
    ds.Tables("Edit").Rows(0).Item("Gnr_Indirizzo") = IndirizzoField.Text
    ds.Tables("Edit").Rows(0).Item("Gnr_Comune") = ComuneField.Text
    ds.Tables("Edit").Rows(0).Item("Gnr_Recapito1") = Recapito1Field.Text
    ds.Tables("Edit").Rows(0).Item("Gnr_Recapito2") = Recapito2Field.Text

    Dim cb As New OleDb.OleDbCommandBuilder(da)
    da.Update(ds, "Edit") < ERRORE
    MsgBox("Pratica Modificata!", MsgBoxStyle.Information)
    Cn.Close()
    Me.Close()
    End Sub

  8. #8
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Se non indichi QUALE riga genera l'errore...

    Tra l'altro, spiega cosa c'entra questa riga

    codice:
    Dim cb As New OleDb.OleDbCommandBuilder(da)
    con il resto del codice ???
    Non mi sembra usato da nessuna parte...


  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    10
    l'errore lo genera qua:

    da.Update(ds, "Edit")


    il fatto è che non capisco come va fatto l'update...
    secondo una guida bisogna introdurre un OleDb.OleDbCommandBuilder ma non saprei dove metterlo...

  10. #10
    Il problema sta nel fatto che per costruire le query di aggiornamento ed eliminazione dei record con un CommandBuilder:
    codice:
    Dim cb As New OleDb.OleDbCommandBuilder(da)
    devi specificare, nella tabella del Db, una colonna con chiave primaria ..... altrimenti il commandbuilder non riesce, ovviamente, a costruire le query di Update e Delete in quanto gli manca l'indice di ricerca del Record.
    Qualora avessi problemi a definire una colonna come chiave primaria (dico io) potresti comunque sempre pensare di costruirti a mnina le query di Update e Delete.

    Aggiungo anche che, questa riga di codice:
    codice:
    Dim cb As New OleDb.OleDbCommandBuilder(da)
    deve essere scritta prima dell'esecuzione del metodo Fill del DataAdapter, altrimenti, non serve a nulla.


    Facci sapere....
    Ciao

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.