Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di barnico
    Registrato dal
    Oct 2001
    Messaggi
    490

    [VB.NET]errore nella ricerca di una riga in un DataSet

    cercherò di essere più chiaro del titolo;
    ho un DataGridView che popolo utilizzando un DataSet, dove però nella SELECT uso un "Left OUTER JOIN" poichè nella tabella del db ho un campo che si riferisce alla Key di una tabella dove faccio il collegamento per leggere il campo descrizione collegato al record Key della tabella.
    esempio:
    codice:
    myadapter = new OleDbDataAdapter("SELECT A.campo, A.campo2, B.campo FROM tabella AS A LEFT OUTER JOIN tabella2 AS B ON A.campoID = B.campoID",conn)
    
    adapter.FillSchema(dataSet, SchemaType.Source, "elenco")
    adapter.Fill(dataSet, "elenco")
    fin qui tutto ok, quando però vado a fare una ricerca di una specifica riga attraverso i campi chiave, mi viene dato l'errore che non esistono nella tabella campi chiave, invece io nella tabella del db i primi due campi sono di tipo Key, questo non succede se nella select non inserisco la LEFT OUTER JOIN;
    ho provato a dichiarare io a mano le colonne Key, è funziona solo che qundo vado a cancellare la riga mi dà il seguente errore:
    "generazione SQL dinamica non supporta per tabelle di base multiple"

    per l'eliminazione della riga uso il codice:

    codice:
    Dim objCommandBuilder As New OleDbCommandBuilder(adapter)
    
    riga = dataSet.Tables("elenco").Rows.Find(codice) 
    riga.Delete()
    adapter.Update(dataSet, "elenco")

  2. #2
    Il problema della delete è che lui non sa cosa cancellare dal momento che l'origine dei dati non è una tabella, ma il risultato di una left outer join.

    Te vuoi cancelllare la riga di tabella o tabella2? questo lui non lo sa e quindi lancia l'eccezione.

    Se vai a controllare il tuo designer infatti, per tableadapter generati da origini su basi multiple (in italiano da select con join, union all, eccetera) avrà creato solo le funzioni di select e NON quelle di insert, update e delete), per queste devi farti le funzioni a mano (creado apposite funzioni sul tableadapter), OPPURE creare tabelle e tableadapters per le singole tabelle del DB e poi sfruttare le relations del dataset (che tra l'altro se vuoi ti fanno anche i delete on cascade, ovvere le cancellazioni a cascata dei record relazionati fra loro).

    Spero di esserti stato d'aiuto

  3. #3
    Utente di HTML.it L'avatar di barnico
    Registrato dal
    Oct 2001
    Messaggi
    490
    grazie per il chiarimento e la conferma di funzionamento,
    io voglio cancellare solo la riga di tabella
    per il resto non ho capito bene quello che dici, perchè non ho molta esperienza.
    all'imite provo a cancellare a mano la riga della tabella, in attesa di apprendere una forma più elegante e performante.

  4. #4
    Utente di HTML.it L'avatar di barnico
    Registrato dal
    Oct 2001
    Messaggi
    490
    cosa intendi per crearmi "apposite funzioni sul tableadapter"?
    sarabbero tipo:
    codice:
    adapter.DeleteCommand = New OleDbCommand("DELETE FROM tabella WHERE IDTabella = " & codice(0) & " and Codice = " & codice(1), conn)
    se è caso, quali dovrei implementare?

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.