Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [ADO.NET e VB.NET] Se primo record figlio, vertab2 = 0 altrimenti vertab2 = MAX +1

    Cerco di spiegarmi nel limite del possibile, perchè so che le spiegazioni non sono il mio forte.
    Ho due tabelle, una master così creata:

    idtab1
    testo1
    testo2

    la tabella figlio invece è così creata

    idtab2
    idtab1
    vertab2 <-- questo è il valore che se è il primo della serie dovrebbe autoimpostarsi a 0
    testo

    Quello che vorrei fare è questo, ho creato il dataset che contiene le due tabelle create con due select separati, e poi ho aggiunto un datarelation che collega idtab1 di tabella 1 a idtab1 su tabella 2. Ho creato due bindingsource, il primo si occupa del datasource DATASET e come datamember gli ho messo la tabella1 , il secondo bindingsource come datasource ha il bindingsource definito sopra e come datamember ha la relazione. sul form ci ho messo delle textbox e bindate alla tabella 1 e un datagridview con sorgente dati il primo bindingsource.
    Tutto sembra funzionare per il meglio a livello visivo, ora avendo definito a livello di dataset per tabella e per colonna id autoincrement e autoseed a -1 su tutte e due le tabelle come faccio "automaticamente" quando inserisco un record in datagridview a inserire in vertab2 00 se è il primo record figlio della tabella padre, altrimenti vertab2 = max(vertab2) +1 ??
    Forse è una operazione che devo fare tramite storedprocedure o function ? Però dovrebbe essere un valore che mi dovrebbe apparire prima dell'effettivo salvataggio su database.
    Spero di essermi spiegato e confido in un vostro suggerimento per schiarirmi le idee, grazie a tutti.

  2. #2
    Non so se ho capito bene, ma potresti intercettare l'evento di inserimento di una nuova riga e aggiungere il controllo per determinare se è il primo record o meno.

    Ciau

  3. #3
    Ci avevo pensato anche io onstamente, ma essendo ADO.NET e quindi essendo disconnesso dal database potrebbe capitarmi il caso in cui qualcuno mi ha già agiunto una versione e in quel caso la copia che io ho in cash non rispecchia più al momento del salvataggio la situazione reale. Per questo sono piuttosto dubbioso sul da farsi, probabilmente è un dato che devo intercettare tramite una stored ? Non so dove sbattere

  4. #4
    Bhe usando ADO.NET non devi necessariamente fare gli inserimenti in modalità sconnessa, puoi ad esempio gestire gli insert (nel tuo caso solo gli insert) in modalità connessa. In questo modo intercetti l'evento di aggiunta, vedi se è il primo record della tabella figlio (magari tramite una query di count se hai paura che la tua versione in cache non sia aggiornata), manipoli i dati e spari direttamente la query di insert.

    Ciau

  5. #5
    Intendi dire che invece di usare dataadapter e dataset potrei usare gli executenonquery e simili ? Grazie mille per i consigli che mi stai dando.

  6. #6
    Io farei una cosa mista. Nel senso che manterrei i dataadapter etc per le normali operazioni escludendo le insert. In questo modo sei sicuro che i dati delel insert siano sempre corretti. L'unico problema è che se poi usi il dataadapter per fare un fill della tabella potrebeb capitarti che ti riaggiunga i record che avevi inserito in modalità disconnessa. A questo punto o in modalità connessa gli INSERT,UPDATE e DELATE oppure quando vai a fare gli insert cambi il rowstate del record appena aggiunto in modo che poi chiamando il fill del dataadapter non vado ad inserirti un doppione.

    Ciau

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.