2 messaggi dal 24 novembre 2020
Buona sera, inizio con una premessa, sono nuovo del forum e non sono un programmatore, per vivere faccio altro, ma occasionalmente per sopperire a delle mancanze o per necessità legate all'attività lavorativa mi diletto a scrivere del codice più o meno funzionante...

Da circa ben 3 settimane mi sto affacciando sul mondo VB.net.

Leggendo e documentandomi qua e la sono riusco ad improvvisare qualcosa, solo che adesso ho un problema, ...forse più di uno che non riesco a risolvere.

Sto cercando di realizzare una piattaforma che racchiuda:
diverse macro excel, sviluppate nel corso degli anni
alcune funzionalità aggiuntive derivanti da nuove attività
l'inserimento di un database come storico e contenitore delle informazioni.

Tali Informazioni risiedono su un database PostgreSQL di cui dispongo un accesso in sola lettura e un nuovo database Access di mia creazione.

La nuova piattaforma tinge informazioni da entrambe i database e li visualizza su delle maschere, qui il primo problema:
l'accesso al database PostgreSQL non può essere fornito a tutti gli utilizzatori della piattaforma, pensavo di "travasare", periodicamente, il contenuto di alcune tabelle da questo database nel mio Access, ma non ho idea di come connettermi ad un datatabese per leggere e in contemporanea connettermi all'altro db per scrivere.

Il mio secondo problema consiste nella necessità di esportare alcuni dati dal database Access in un foglio excel, qui avrei parzialmente risolto con questo codice:

       Dim ConnAccess As New OleDbConnection(FormAccesso.strConnectTransmissions)
        Dim Selezionafile As SaveFileDialog
        Dim ExcelFile As String

        Selezionafile = New SaveFileDialog() With {
            .Filter = "File excel (*.xls)|*xls",
            .Title = "Scegli il nome del file da salvare"
        }
        Selezionafile.ShowDialog()
        ExcelFile = Selezionafile.FileName
        If Not ExcelFile.EndsWith(".xls") Then
            ExcelFile += ".xls"
        End If
        Dim cm As New OleDbCommand("SELECT * INTO [Excel 8.0;Database=" & ExcelFile & "].[Foglio1] FROM AnalysisType", ConnAccess)
        Try
            ConnAccess.Open()
            cm.ExecuteNonQuery()
        Catch ex As Exception
            Console.WriteLine(ex.Message)
        Finally
            If ConnAccess.State = ConnectionState.Open Then
                ConnAccess.Close()
            End If
        End Try


Con questa porzione di codice riesco a fare parzialmente quello che mi serve, in quanto alcune informazioni risiedono anche nel database PostgreSQL, ma non solo, da questo database dovrei estrapolare solo le informazioni inerenti ai record caricati nella tabella "AnalysisType" del file di Access; quindi eseguire un query per estrapolare i dati, tornando al primo problema anche in questo caso dopo vari tentativi non sono riuscito a risolvere.

Ho provato anche estrapolare la tabella dal database PostgreSQL utilizzando un codice simile a quello proposto, ma non ha funzionato, e qui ho 2 ipotesi:
credo che avendo delle credenziali in sola lettura l'istruzione "ExecuteNonQuery" non venga eseguita;
la stringa sql, da utilizzare nel comando "NpgsqlCommand" sia leggermente diverso dal comando "OleDbCommand"

Probabilmente sto approcciando il problema dal punto di vista sbagliato.

Queste sono attualmente le due problematiche che mi stanno bloccando e che non riesco a risolvere.

Avete qualche suggerimento?

Grazie
223 messaggi dal 30 novembre 2004
Per connetterti a database differenti basta che imposti due stringhe di connessione, e a seconda di dove eseguire le query usi l'una o l'altra.
Poi ti consiglio di usare EntityFramework che ti semplifica di molto il lavoro, per devi leggerti qualcosa per capirne il funzionamento.
2 messaggi dal 24 novembre 2020
Ciao mexico77, grazie per avermi risposto.

Mi hai scritto:" basta che imposti due stringhe di connessione, e a seconda di dove eseguire le query usi l'una o l'altra."

Ma io mi trovo in questa situazione:


'Lettura informazioni da database PostgreSQL

 Dim sqlquerySerchSiteAll As String = "SELECT irtt.candidates.id, irtt.candidates.candidate_code, irtt.candidates.address, 
                                                                                    irtt.candidates.latitude, irtt.candidates.longitude, 
                                                                                    irtt.candidate_categories.name As Category, irtt.candidates.origin_site_code, 
                                                                                    irtt.candidates.milestone, irtt.origin_types.name As OriginType, 
                                                                                    irtt.candidate_statuses.name AS CandidateStatus, irtt.structure_types.name As 
                                                                                    StructureType, irtt.sites.code AS SiteCode, 
                                                                                    irtt.sites.name AS SiteName, irtt.cities.name As SiteCity, irtt.provinces.name As 
                                                                                    SiteProvince, irtt.regions.name As SiteRegion, 
                                                                                    irtt.zones.name AS SiteZone, irtt.sites.target AS SiteTarget 
                                                                       FROM ((((irtt.candidates LEFT JOIN irtt.candidate_categories ON 
                                                                                    irtt.candidates.candidate_category = irtt.candidate_categories.id) 
                                                                                    LEFT JOIN irtt.origin_types ON irtt.candidates.origin_type = irtt.origin_types.id) 
                                                                                    LEFT JOIN irtt.candidate_statuses ON irtt.candidates.candidate_status = 
                                                                                    irtt.candidate_statuses.id) 
                                                                                    LEFT JOIN irtt.structure_types ON irtt.candidates.structure_type = irtt.structure_types.id) 
                                                                                    INNER JOIN (irtt.sites INNER JOIN (irtt.cities INNER JOIN (irtt.provinces INNER JOIN 
                                                                                    (irtt.regions INNER JOIN irtt.zones ON irtt.regions.zone = irtt.zones.id) ON 
                                                                                    irtt.provinces.region = irtt.regions.id) ON irtt.cities.province = irtt.provinces.id) ON 
                                                                                    irtt.sites.city = irtt.cities.id) ON irtt.candidates.site = irtt.sites.id 
                                                                       WHERE (((irtt.candidates.candidate_code)=@candidate_code));"

connectPostgreSQL.Open()
Using cmd As New NpgsqlCommand(sqlquerySerchSiteAll, connectPostgreSQL)
         cmd.Parameters.AddWithValue("@candidate_code", FormSelezione.CodiceSito)
        Using PostgreSQLtable As NpgsqlDataReader = cmd.ExecuteReader()
              
             PostgreSQLtable.Close()
       End Using
End Using


' Scrittura informazioni sul database Access

Dim sqlqueryInsertSite As String = "INSERT INTO AnalysisType SELECT * FROM ? "

' Al posto di ? dovrei inserire l'origine dei dati che si trova sul datatbase PostgreSQL

Dim ConnAccess As New OleDbConnection(FormAccesso.strConnectTransmissions)
Dim cm As New OleDbCommand(sqlqueryInsertSite, ConnAccess)
ConnAccess.Open()
cm.ExecuteNonQuery()



Una volta letti i dati da PostgreSQL come potrei fare a caricarli su Access?
Avrei pensato di utilizzare, anche se sono obsoleti, superati, i dataset o datatable, ma anche qui non ho capito se potrebbero fare al caso mio; ovvero caricare in un datatable le informazioni prelevate dal database PostgreSQL (tramite query vedi codice "postato", non tabella diretta) e travasarle dallo stesso datatable sul database Access (in una sola tabella).


Leggendo qua e la mi ero già imbattuto in questa terminologia "Entity Framework" e mi sembrava che facesse proprio al mio caso, ma approfondento l'argomento mi sono accorto che in tutti gli articoli che leggevo affermavano che non era "compatibile" con Access (nello specifico il mio è nel formato .mdb).
Ho cercato comunque di capire di cosa si trattasse, ma tutti gli articoli letti erano rivolti a coloro che erano già esprti di vb.net, di asp.NET o c#, ma nulla che spiegasse in realtà come utilizzare questa nuova "tecnologia" partendo dal nulla.

Io non voglio fare il programmatore, anche se mi sarebbe piaciuto, per mia passione mi sto documentando, utilizzando un libro/manuale sul Visual Basic, come dicevo da circa 3 settimane, quindi sono alle basi, ma ciò che mi serve si trova un po' più in la nei capitoli, quello che sto cercando sono esempi semplici da adattare al mio problema di adesso.

Vi ringrazio in anticipo per il vostro interessamento e per le eventuali risposte

Buona giornata
223 messaggi dal 30 novembre 2004
Recupera i Dati da postgres e mettili in un datatable (cerca da sql a datatable) poi li ti cicli il datatable ed inserisci i dati in access

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.