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

    [VB.NET] Inner join su due tabelle in oledbadapter.

    Per favore mi potreste dare un aiuto?

    Normalmente popolo un oledbadapter con una tabella così:
    Cn = <CreateConnection>
    Sql = "Select * from Clienti Where IDCLIENTE = " & txtCodeDitta.text & ""
    Rs = New ADODB.Recordset
    Rs.ActiveConnection = Cn
    Rs.Open(Sql, Cn)
    Dim Dad As OleDbDataAdapter = New OleDbDataAdapter()
    Dim Ds As DataSet = New DataSet()
    Dad.Fill(Ds, Rs, "Clienti")

    se però devo usare la seguente sql:

    Cn = oCN.CreateConnection()

    Sql = "Select * from Clienti Inner Join Cassa On Clienti.IDCLIENTE = Cassa.IDCLI Where Clienti.IDCLIENTE = " & CodeDitta & ""
    come devo fare?
    Grazie mille

  2. #2
    1)Ci spieghi perchè ti ostini ad utilizzare ADODB quando sotto lo stesso namespace cui trovi l'oggetto OleDbDataAdapter, trovi gli oggetti OleDbCommand ed OleDbConnection che usano tecnologia ADO.NET .... fai come vuoi .... noi lo diciamo per te.
    2)Se utilizzi un oggetto DataAdapter, non c'è bisogno di aprire la connessione manualmente .... si occupa il DataAdapter sia dell'apertura che della chiusura.
    3)Venendo alla tua richiesta ..... non ho capito bene la tua esigenza .... forse vuoi cambiare istruzione sql senza creare una nuova istanza dell'oggetto Command(in questo caso Recordset)????
    Facci sapere...
    Ciao

  3. #3
    Capisco... riguardo ad ADODB come cambieresti il codice?

    Al punto 3 specifico che la sql in grassetto è quella che mi serve (per il join tra tabelle) mentre la parte del .Fill(Ds, Rs, "Clienti") richiama solo la tabella "Clienti" (o sbaglio?)

  4. #4
    Capisco... riguardo ad ADODB come cambieresti il codice?
    codice:
    Private ConnString as string="TuaConnectionString"
    Private Sql as string="Comando Sql"
    
    Private Conn as OledbConnection
    Private Cmd as OledbCommands
    Private Dad As OleDbDataAdapter 
    
    Private Sub FillDataTable
    Conn = New OledbConnection(ConnectionString)
    Cmd = New OledbCommands(Sql,Conn)
    Dad = New OleDbDataAdapter(Cmd)
    Dim Ds As DataSet = New DataSet()
    Dad.Fill(Ds, "Clienti")
    End Sub
    mentre la parte del .Fill(Ds, Rs, "Clienti") richiama solo la tabella "Clienti" (o sbaglio?)
    Sbagli .... "Clienti" non è niente altro che il nome che assegni alla DataTable che viene popolata dal DataAdapter.

    Facci sapere...
    Ciao

  5. #5
    Bene: è tutto OK!
    Ma adesso vorrei approfittare della tua disponibilità e visto che sei l'artefice del mio cambiamento potresti spiegarmi come uscire dal vortice ADODB:

    ...
    Dim Rs As New ADODB.Recordset()
    Dim Cn As ADODB.Connection
    Cn = oCN.CreateConnection()
    Rs.ActiveConnection = Cn
    Rs.Open("Select * from Azienda", Cn)
    If Not Rs.EOF Then
    Me.txtCode.Text = Rs.Fields("CODE").Value
    ...
    End If

    ...
    Dim Sql As String = "Select * from Azienda"
    Rs = New ADODB.Recordset
    With Rs
    .Open((Sql), Cn, ADODB.CursorTypeEnum.adOpenKeyset, ADODB.LockTypeEnum.adLockOptimistic, ADODB.CommandTypeEnum.adCmdText)
    If .EOF Then
    .AddNew()
    Me.txtCode.Text = 1
    End If
    .Fields("CODE").Value = Me.txtCode.Text
    ...
    End With

    Da autodidatta è il massimo che sono riuscito a fare sinora, quindi ti ringrazio di cuore.

  6. #6
    Se devi aggiungere,modificare o eliminare i records della tabella "Aziende", sarebbe corretto avere un'altra DataTable(nello stesso Dataset) .... quindi
    codice:
    Cmd = New OledbCommands("Select * FROM Aziende",Conn)
    Dad = New OleDbDataAdapter(Cmd)
    Dad.Fill(Ds, "Aziende")

  7. #7
    ... tutto qui? E per collegare un record a una textbox?... può bastare

    ...
    Cmd = New OledbCommands("Select * FROM Aziende",Conn)
    Dad = New OleDbDataAdapter(Cmd)
    Dad.Fill(Ds, "Aziende")

    Dim Dr As OleDbDataReader = Cmd.ExecuteReader()
    While Dr.Read()
    ...
    me.txtCode.text = Dr("CODE").ToString()
    ...
    End While

    ... e l'inserimento, cancellazione e update?

    Grazie di cuore!

  8. #8
    ... tutto qui?
    ehm.... non proprio.
    Il discorso è un pò più articolato .... andiamo un attimo per gradi.
    ADO.Net offre 2 possibilità di accesso ai dati.... la modalità connessa e la modalità disconnessa .... nel pezzettino di codice che hai mostrato, le stai usando tutte e due .... poco male, non succede niente, ma non è questo il senso.
    La modalità disconnessa, permette di avere un contenitore dati, identico o meno alla struttura del DataBase, sul quale effettuare operazioni di modifica,cancellazione e inserimento dei record in esso presenti e, successivamente, persistere le modifiche nel DataBase attraverso i metodi che ti espone il DataAdapter(è un pò riduttivo come concetto ma, come ti dicevo ... andiamo per gradi) o semplicemente eseguendo delle quesry di INSERT,UPDATE o DELETE.

    La modalità Connessa, invece, permette di avere un accesso diretto ad una specifica tabella del Db e di "scorrere", record per record, tutti i records permettendone la modifica.

    Ora ... decidere quale usare ed in quale occasione, dipende dallo scopo di accesso ai dati...mi spiego meglio.
    Se hai necessità di fare diverse operazioni su di una serie di records, allora, conviene forse avere a disposizione una DataTable da "manipolare" e,successivamente, persistere le modifiche una volta sola .... diversamente, puoi usare la modalità connessa.
    Spero di essere stato sufficientemente chiaro.
    Facci sapere...
    Ciao

  9. #9
    Sei molto gentile ma non mi ci raccapezzo: sono arrivato a questo punto:
    ...
    Dim Sql As String = "Select * from Azienda"
    Dim Cn As OleDbConnection = New OleDbConnection(>Connessione OleDb>)

    Dim Cmd As OleDbCommand = New OleDbCommand(Sql, Cn)
    Dim Dad As OleDbDataAdapter = New OleDbDataAdapter(Cmd)
    Dim Ds As DataSet = New DataSet()
    Dad.Fill(Ds, "Azienda")
    ...
    adesso devo leggere i dati dal db e consegnare dei valori alle textbox! Come devo fare?!?!?!?

  10. #10
    A questo punto, hai almeno due strade da percorrere.
    La prima è quella di iterare tutta la collezione di Rows della DataTable Azienda ed estrarre i dati che ti interessano in base ad un criterio valutandolo attraverso una condizione If...
    codice:
      For Each row As DataRow In Ds.Tables("Azienda").Rows
                If row.Item("NomeAzienda").ToString = "AziendaDiProva" Then
                    textbox1.text = row.Item("id")
                    textbox2.text = row.Item("NomeAzienda")
                    textbox3.text = row.Item("Indirizzo")
                End If
            Next
    altrimenti .... puoi usare LinqToDataset per filtrare i Record in base ad un criterio(utilizzando la sintassi Linq) ed estrarre i dati che ti servono
    codice:
     Dim query = (From azienda As DataRow In Ds.Tables("Azienda") Where azienda.Item("NomeAzienda").ToString = "AziendaDiProva" Select azienda).Single
            textbox1.text = query.Item("id")
            textbox2.text = query.Item("NomeAzienda")
            textbox3.text = query.Item("Indirizzo")
    Facci sapere...
    Ciao

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.