Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [VB.NET] DataInsert con migliaia di variabili

    Buongiorno,
    mi sono deciso a scrivere a questo forum sperando di poter risolvere questo problema che mi assilla da giorni senza trovare soluzione.
    Il problema parte dal fatto che per un progetto devo gestire una form di inserimento dati con oltre 1500 variabili. Sapendo che il limite di una tabella SQL sono 1024 variabili, pensavo di dividere la tabella. Quindi la relazione non è proprio una One-To-Many ma più One-To-One.
    Per semplificare il ragionamento e per chi volesse tentare, ho ridotto le variabili in 2 tabelle A1 (con i campi IDParent, T1 come testo), e A2 (IDChild, IDParent, T2). Per la visualizzazione una semplice form con 2 textbox e un BindingNavigator.
    Questo è il codice per caricare i dati e per la navigazione e vi posso dire che il tutto funziona correttamente.
    Quello che non riesco a capire come fare è l'inserimento e salvataggio di un nuovo record.
    Il salvataggio della tabella A1 è OK ma non riesco a gestire le info da salvare per la tabella A2.

    Vi chiedo gentilmente una mano perchè sto sbattendo la testa senza trovare soluzione.
    Saluti

    codice:
                ds = New DataSet()
    
                'DataAdapter
                sbSql.Clear()
                sbSql.AppendLine("SELECT * FROM A1 ")
                daCollaudi = New SqlDataAdapter(sbSql.ToString, con)
                'daCollaudi.FillSchema(ds, SchemaType.Mapped, "Collaudi")
                daCollaudi.MissingSchemaAction = MissingSchemaAction.AddWithKey
                daCollaudi.Fill(ds, "Collaudi")
    
                'DataAdapter
                sbSql.Clear()
                sbSql.AppendLine("SELECT * FROM A2 ")
                daMB = New SqlDataAdapter(sbSql.ToString, con)
                'daMB.FillSchema(ds, SchemaType.Mapped, "MB")
                daMB.MissingSchemaAction = MissingSchemaAction.AddWithKey
                daMB.Fill(ds, "MB")
    
                'BindingSource
                bs = New BindingSource()
                bs.DataSource = ds
                bs.DataMember = "Collaudi"
                A1BindingNavigator.BindingSource = bs
    
                'Relazione
                ds.Relations.Add("CollaudiMB", ds.Tables("Collaudi").Columns("IDParent"), ds.Tables("MB").Columns("IDParent"), False)
    
                bsMB = New BindingSource()
                bsMB.DataSource = bs
                bsMB.DataMember = "CollaudiMB"
    
                txt1.DataBindings.Clear() : txt1.DataBindings.Add(New Binding("editvalue", bs, "T1", True))
                txt2.DataBindings.Clear() : txt2.DataBindings.Add(New Binding("editvalue", bsMB, "T2", True))
    Questo è il codice che uso per il salvataggio
        Private Sub SaveRec()
    
            Try
                con.ConnectionString = GetConnectionString()
                con.Open()
    
                Me.Validate()
                'Avviso che ho finito di apportare modifiche
                bs.EndEdit()
                bsMB.EndEdit()
    
                Dim cb1 As New SqlCommandBuilder(daCollaudi)
                Dim cb2 As New SqlCommandBuilder(daMB)
    
                If con.State <> ConnectionState.Open Then con.Open()
    
                daCollaudi.Update(ds, "Collaudi")
                daMB.Update(ds, "MB")
    
                ds.Tables("Collaudi").AcceptChanges()
                ds.Tables("MB").AcceptChanges()
            Catch ex As Exception
            Finally
                If con.State <> ConnectionState.Closed Then con.Close()
            End Try
    
        End Sub
    

    Ultima modifica di LeleFT; 17-04-2019 a 18:01 Motivo: Aggiunti i tag CODE

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,303
    Di che linguaggio di programmazione stiamo parlando? Non capisco se è VB/VB.NET o VBA... così magari poi sposto nel forum corretto.

    Io non posso, ovviamente, conoscere lo scenario reale su cui stai lavorando, ma sei sicuro che sia proprio necessario avere una tabella con così tanti campi? Nel senso, dall'analisi non è emersa la possibilità che determinati dati si possano normalizzare in un'entità "più piccola", suddivindendoli, quindi, in più istanze di quell'entità?
    Leggendo il termine "Collaudi" mi viene da pensare che vi sia un oggetto sottoposto ad una serie di collaudi e che tu stia cercando di inserire tutti i possibili collaudi all'interno dello stesso record, quando la logica porterebbe ad avere una relazione uno-a-molti tra l'oggetto e il singolo collaudo... ma, ripeto, non conosco lo scenario su cui stai lavorando quindi vado "a naso", come si suol dire.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    Di che linguaggio di programmazione stiamo parlando? Non capisco se è VB/VB.NET o VBA... così magari poi sposto nel forum corretto.

    Io non posso, ovviamente, conoscere lo scenario reale su cui stai lavorando, ma sei sicuro che sia proprio necessario avere una tabella con così tanti campi? Nel senso, dall'analisi non è emersa la possibilità che determinati dati si possano normalizzare in un'entità "più piccola", suddivindendoli, quindi, in più istanze di quell'entità?
    Leggendo il termine "Collaudi" mi viene da pensare che vi sia un oggetto sottoposto ad una serie di collaudi e che tu stia cercando di inserire tutti i possibili collaudi all'interno dello stesso record, quando la logica porterebbe ad avere una relazione uno-a-molti tra l'oggetto e il singolo collaudo... ma, ripeto, non conosco lo scenario su cui stai lavorando quindi vado "a naso", come si suol dire.


    Ciao.
    Grazie della risposta.
    Il linguaggio è VB.NET.

    Certo che le variabili potrebbero essere gestite diversamente, e di solito con altri progetti lo faccio, ma purtroppo data la natura del cliente e del tipo di esigenza sono "costretto" a questa soluzione.
    Vorrei cercare di capire se esiste una soluzione percorribile prima di dover trovare alternative.

    Ciao
    G.

  4. #4
    semplificando, diciamo che in un record hai nmila campi, puoi strutturare il tuo record in verticale anziché in orizzontale

    ID | IDRECORD | IDVARIABILE | VALORE

    in questo modo ogni record può avere un numero di variabili non definito a priori.

    comunque, auguri e la prossima volta posta nella sezione giusta

  5. #5
    Quote Originariamente inviata da optime Visualizza il messaggio
    semplificando, diciamo che in un record hai nmila campi, puoi strutturare il tuo record in verticale anziché in orizzontale

    ID | IDRECORD | IDVARIABILE | VALORE

    in questo modo ogni record può avere un numero di variabili non definito a priori.

    comunque, auguri e la prossima volta posta nella sezione giusta
    Mi scuso della sezione sbagliata. Ma siccome non ho chiesto mai niente non avevo trovato la sezione giusta.

    La tua indicazione è corretta ed è quella che utilizzo di solito per altri progetti.
    Questa si presta in form dove c'è una associazione One-to-Many e quindi di solito con una DataGrid dove aggiungi i record child.
    Vorrei sapere se l'hai mai usata (e ovviamente come) in una situazione dove hai solo TextBox e dove con un solo clic inserisci i valore Parent e crei il record Child relativo. A meno che mi sia preso una cantonata, non è proprio una cosa immediata.

    Fammi sapere, sono ansioso di sapere a che punto sono della mia ignoranza.

    Grazie
    G.

  6. #6
    non capisco: dici che l'hai già usata ma non sai come usarla... abbi pietà, uno dei miei due neuroni è già partito per le vacanze di Pasqua

  7. #7
    OK Abbiamo bisogno di ferie un po' tutti.

    Per altri progetti l'ho usata ma perchè l'intefaccia potevo farla come volevo tipo Master-Details, quindi con alcuni TextBoxes per la parte Master e una DataGrid per la parte Details.
    Ora ho bisogno di una interfaccia (formata quasi esclusivamente da TextBoxes con una serie di TabPages) dove convivono circa 1500 variabili.
    Siccome (ripeto) le tabelle del DB arrivano fino a 1024 variabili devo trovare (se esiste) il modo per fare questa interfaccia e quindi ho provato la strada descritta. Quindi il tuo suggerimento sarebbe valido se fosse con una interfaccia Master-Details.

    L'affermazione "se tu l'avessi usata" era riferita al fatto che eventualmente la struttura delle tabelle ti era capitato di usarla nella condizione "anomala" che ti ho spiegato sopra. Nel modo classico, come ti ho detto l'ho già usata.

    Mi sono "spiegato"
    G.

  8. #8
    scusa, ma cosa c'entra l'interfaccia grafica con il modo con cui scrivi i dati nel db? quando devi salvare recuperi i valori di tutte le textbox e una per una (du' palle...) fai le insert nel db. ti può aiutare usare un array di textbox, così fai un ciclo invece di leggerle una ad una

  9. #9
    ("anomalo" e "classico" sono concetti talmente personali che non li prendo manco in considerazione )

  10. #10
    Vediamo se ho capito. Durante l'Insert prendo il primo textbox che fa parte della tabella Parent lo salvo, quindi con scope_identity prendo l'IDParent appena inserito e quindi lo uso nel ciclo di tutti textbox Child per il loro inserimento. Uhmm... mi sembra logico, ma cosa mi dici di tutte le altre fasi? Ovviamente dovranno rispecchiare la logica descritta, mi dirai ... mi rimane un dubbio sul DataNavigator che funziona con il BindingSource o se la vogliamo dire in un altro modo come gestire la navigazione tra i records, si tratta comunque di gestire ogni volta il caricamento di tutte le textbox.

    Era questa la tua idea? Pensavo (o meglio speravo) in qualcosa di più "automatizzato" tramite il TableManager o simile.
    Beh se non c'è altra soluzione, per ora ti ringrazio del tuo suggerimento, faccio qualche tentativo.

    Grazie
    G.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.