Creare o aggiungere campi a un database

venerdì 10 settembre 2010 - 14.53
Tag Elenco Tags  VB.NET  |  .NET 3.5  |  Windows XP  |  Visual Studio 2008  |  Access (.mdb)  |  Crystal Reports 2008

Mau67 Profilo | Expert

Ciao al forum, ho ancora bisogno di voi, ho trovato un progetto che fà al caso mio, ma ha un solo problema mi crea il campo ID autoincrementante invece io gli ID delle mie tabelle sono tipo testo.

Vi allego il progetto chiedendovi se quelcuno sa dirmi come fare per cambiare l'istruzione che crea il campo ID autoincrementante con il campo ID testo'

Grazie in anticipo
Mau67

alx_81 Profilo | Guru

>Ciao al forum, ho ancora bisogno di voi, ho trovato un progetto
>che fà al caso mio, ma ha un solo problema mi crea il campo ID
>autoincrementante invece io gli ID delle mie tabelle sono tipo
>testo.
Ciao,
ho dato un'occhiata veloce al codice..
direi che in questa funzione, è sufficiente mettere a False la proprietà Autoincrement:

' crea le tabelle nuove For I = 0 To UBound(Tabelle) - 1 If Len(Trim(Tabelle(I, 0))) > 0 Then If Tabelle(I, 1) = False Then tbl = New ADOX.Table tbl.let_ParentCatalog(cat) tbl.Name = Tabelle(I, 0) ' contatore autoincrement For Z = 0 To UBound(Campi) - 1 If Campi(Z, 5) = "True" And Tabelle(I, 0) = Campi(Z, 1) Then col = New ADOX.Column col.let_ParentCatalog(cat) col.Type = ADOX.DataTypeEnum.adInteger col.Name = Campi(Z, 2) col.Properties("Jet OLEDB:Allow Zero Length").Value = False col.Properties("AutoIncrement").Value = True tbl.Columns.Append(col, ADOX.DataTypeEnum.adInteger, 0) Exit For End If Next cat.Tables.Append(tbl) End If Else Exit For End If Next

poi ovviamente, quando vai ad inserire, devi specificare quella colonna, altrimenti ottieni errore di inserimento.
Più che altro.. non so come reagirà il db access a questa modifica..
Potresti spiegarmi cosa ti serve? Magari eviti di usare questo progetto.. in fondo è un file di ridotte dimensioni, magari sapendo la situazione reale si può pensare di creare una cosa ad hoc..

>Grazie in anticipo
di nulla!
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

Mau67 Profilo | Expert

Praticamente come ben sai quando distribuisci un programma, con il passare del tempo e usandolo ti viene richiesto di aggiungere qualche funzione, e il più delle volte devi aggiungere capi a qualche tabella esistente o addirittura qualche tabella.

Quindi in buona sostanza quel codice lo inserisco nel form di avvio e se trova il file.txt aggiunge campi e tabelle al progetto.

Secondo me è molto comodo. hai qualche altra idea?

Mau67

Mau67 Profilo | Expert

Ho provato il codice funziona solo che il programma in automatico mi inserisce un campo ID autoincremento anche se nel file txt gli metto string, quindi nel codice all'interno del form c'è qualche stringa che richiama ID autoincremento.


Mau67

Mau67 Profilo | Expert

Ho adattato al mio progetto il codice per creare le tabelle, funziona tutto se nella stringa di connessione inserisco il percorso così:
cnn.Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source= " & My.Application.Info.DirectoryPath & "\DB\Data.mdb")
istanziato con
Dim cnn As New ADODB.Connection

se invece inserisco questo codice non funziona perchè?

' Dichiaro stringa di connessione database...
Private FILE_NAME = IO.Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath.ToString).ToString & "\myConnectionString.txt"

If Not File.Exists(FILE_NAME) Then
MsgBox(FILE_NAME & " Stringa di connessione mancante.")
Return
End If
Dim sr As StreamReader = File.OpenText(FILE_NAME)
Dim sqlString As String
sqlString = sr.ReadLine()

sr.Close()
Dim Cnn As New OleDbConnection(sqlString)
cnn.Open(sqlString)

e non funziona neanche cosi:

Dim cnn As New ADODB.Connection
cnn.Open(sqlString)

Un altra cosa come faccio a dichiarare la Primary Key nel file INFO.txt?
Potete aiutarmi perfavore grazie




Mau67

alx_81 Profilo | Guru

in generale una release è una gestione molto delicata, che prevede una pacchettizzazione della consegna molto complessa. Sia da implementare sia da pensare. In genere mi trovo a creare lo script di esecuzione dell'sql di cui poi farò deploy sul server di test, e, di seguito, in produzione.
Quindi fornisco un pacchetto (se ha un setup) che include come script di post installazione l'esecuzione di quello script.
In altri casi, come siti web, allineo il database seguendo un pattern di rifattorizzazione (ad esempio aggiungendo colonne e gestendo piano piano la migrazione da un sistema ad un altro) e poi le pagine, tenendomi sempre una versione di backup sia dei sorgenti web, sia del database.

>se invece inserisco questo codice non funziona perchè?
cosa intendi per non funziona? hai un errore? Che succede se lo esegui?

>Un altra cosa come faccio a dichiarare la Primary Key nel file INFO.txt?
uhm.. sembra che ci sia un flag per l'univocità, ma non per la primary key.
Non so, alla fine devo dire che il sistema che hai seguito non mi garba molto, sai?
Preferisco dare un bel setup con visual studio ed, ad ogni release, lanciare lo script che allinea le versioni del db..
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

Mau67 Profilo | Expert

Alex io ti ringrazio sempre della puntualità e la tua competenza nelle risposte, e accetto anche i consigli che mi dai in quanto io un quasi principiante e come tale ho appreso tecniche per la costruzione di programmi non di altissimo livello ma funzionanti, quindi da principiante ti chiederei se non ti è di troppo disturbo avere un esmpio concreto potendo vedere un codice che faccia quello che mi serve così che posso rendermi conto di cosa vuol dire allineare il database al rilascio di una versione.

Ti sono sempre grato

Ciao
Mau67

Mau67 Profilo | Expert

Scusate ho scritto questo codice per la creazione della chiave primaria:

' crea la chiave primaria
For I = 0 To UBound(Tabelle) - 1
If Len(Trim(Tabelle(I, 0))) > 0 Then
If Tabelle(I, 1) = False Then
tbl = cat.Tables(Tabelle(I, 0))
pk.Name = "PrimaryKey"
pk.Type = ADOX.KeyTypeEnum.adKeyPrimary
pk.Columns.Append("ID")
End If
End If
Next
tbl.Keys.Append(pk)
cat = Nothing

Se la tabella è una sola mi crea la chiave primaria, se invece ci sono più tabelle genera solo la chiave primaria nella prima tabella che incontro qualcuno sa dirmi dove sbaglio perfavore

Grazie
Mau67

alx_81 Profilo | Guru

>quindi da principiante ti chiederei se non ti è di troppo disturbo
>avere un esmpio concreto potendo vedere un codice che faccia
>quello che mi serve così che posso rendermi conto di cosa vuol
>dire allineare il database al rilascio di una versione.
Il problema è che non si tratta di una cosetta da poco.. Prova a seguire per bene questi walkthrough:
http://support.microsoft.com/kb/307353
http://social.msdn.microsoft.com/Forums/en-US/winformssetup/thread/717cfce0-3061-400f-9ea3-069f73f3a473
inoltre poi, cercando su msdn, potrai anche vedere come si aggiungono i custom script:
http://www.simple-talk.com/dotnet/visual-studio/visual-studio-setup---projects-and-custom-actions/

--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

alx_81 Profilo | Guru

>Se la tabella è una sola mi crea la chiave primaria, se invece
>ci sono più tabelle genera solo la chiave primaria nella prima
>tabella che incontro qualcuno sa dirmi dove sbaglio perfavore
Non so di preciso cosa fanno tutte quelle matrici, ma credo che dovresti spostare
tbl.Keys.Append(pk)
sotto all'append della colonna..
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
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