codice Select

1nostromo

Nuovo Utente
25 Ago 2014
29
0
0
Buon giorno, leggendo un po’ qui e un po’ là mi sto facendo una cultura su i vari SELECT però entro in crisi con il SELECT UNION, i codici li scrivo correttamente, però alla visione della tabella come nella foto qui sotto i dati li sovrappone e li raddoppia
Il codice incriminato è il seguente
ds = New DataSet
da = New OleDbDataAdapter("SELECT ID_InfoClienti,Cognome,Nome, Via,Localita FROM tblClienti UNION SELECT Data_Inizio_Prestazioni,Ore,Data_Fine_Prestazioni ORDER BY Cognome,Nome", Archivio)
da.Fill(ds, "tblClienti’,’tblPresnotazioni ")

'Contenuto griglia
lvMostra.Items.Clear()
If ds.Tables("tblClienti’,’tblPresnotazioni ").Rows.Count > 0 Then
For i As Integer = 0 To ds.Tables("tblClienti’,’tblPresnotazioni ").Rows.Count - 1
With lvMostra.Items.Add(ds.Tables("tblClienti’,’tblPresnotazioni").Rows(i).Item(0).ToString)
.SubItems.Add(ds.Tables("tblClienti’,’tblPresnotazioni ").Rows(i).Item(2).ToString)
.SubItems.Add(ds.Tables("tblClienti’,’tblPresnotazioni ").Rows(i).Item(3).ToString)
.SubItems.Add(ds.Tables("tblClienti’,’tblPresnotazioni ").Rows(i).Item(4).ToString)
.SubItems.Add(ds.Tables("tblClienti’,’tblPresnotazioni ").Rows(i).Item(5).ToString)
.SubItems.Add(ds.Tables("tblClienti’,’tblPresnotazioni ").Rows(i).Item(2).ToString)
.SubItems.Add(ds.Tables("tblClienti’,’tblPresnotazioni ").Rows(i).Item(3).ToString)
.SubItems.Add(ds.Tables("tblClienti’,’tblPresnotazioni ").Rows(i).Item(4).ToString)

End With
Next
End If

Quindi il SELECT comunica correttamente con la griglia – DataBase, quello che non è corretto è il seguito , mi puoi aiutare per favore?

Per ovviare al problema che ho scritto in precedenza,l'ho agirato costruendo una Query fisica intervenendo direttamente nel DataBase Access, non mi piace,mi sembra troppo riduttivo così, voglio farlo con codice sqlFill. Grazie di nuovo
 

Allegati

  • 20141004_134816.jpg
    20141004_134816.jpg
    101,8 KB · Visite: 285
la UNION si utilizza per unire il contenuto OMOGENEO di due o più tabelle, riporto per chiarezza un quesito precedente,

11) Scrivere una query per visualizzare tutti i nominativi iscritti al circolo
select distinct s.* from (
select * from CACCIATORI
union
select * from PESCATORI
union
select * from SCALATORI
) s
order by s.nome, s.id

12 BIANCHI
2 BISCARDI
49 CRUCIANI
77 MANCINI
11 MARCA
1 MICHELI
27 NERI
4 ROSSI
35 ROSSI

i contenuti delle tabelle usate, sono omogenei e vengono uniti ottenendo il risultato corretto

ma,
SELECT ID_InfoClienti, Cognome, Nome, Via, Localita
UNION
SELECT Data_Inizio_Prestazioni, Ore, Data_Fine_Prestazioni

non sono omogenei ed in aggiunta, il numero delle colonne è diverso, infatti non produce il risultato atteso,
in realtà avrebbe dovuto dare un errore essendo il numero delle colonne non corrispondente

forse la query andava scritta senza la "union select"
saluti
Marino
 
la UNION si utilizza per unire il contenuto OMOGENEO di due o più tabelle, riporto per chiarezza un quesito precedente,

11) Scrivere una query per visualizzare tutti i nominativi iscritti al circolo
select distinct s.* from (
select * from CACCIATORI
union
select * from PESCATORI
union
select * from SCALATORI
) s
order by s.nome, s.id

12 BIANCHI
2 BISCARDI
49 CRUCIANI
77 MANCINI
11 MARCA
1 MICHELI
27 NERI
4 ROSSI
35 ROSSI

i contenuti delle tabelle usate, sono omogenei e vengono uniti ottenendo il risultato corretto

ma,
SELECT ID_InfoClienti, Cognome, Nome, Via, Localita
UNION
SELECT Data_Inizio_Prestazioni, Ore, Data_Fine_Prestazioni

non sono omogenei ed in aggiunta, il numero delle colonne è diverso, infatti non produce il risultato atteso,
in realtà avrebbe dovuto dare un errore essendo il numero delle colonne non corrispondente

forse la query andava scritta senza la "union select"
saluti
Marino


Buona sera Marino, ho capito,bene, non pensavo che le tabelle dovevano essere anche omogenee, grazie mille.
 
Risposta e meravigli

Buona sera Marino, ho capito,bene, non pensavo che le tabelle dovevano essere anche omogenee, grazie mille.

E' vero, ho riprovato a sciver il codice e da errore dicendo che il numero di colonne non sono corrispondenti nelle due tabelle query!!!!!Marino sei un grande!!!
 
Select

Buon giorno, mi sembra doveroso rigraziarti della collaborazione e di portarti a conoscenza di come ho risolto il problema, che per me è una conquista. ho agirato il problema con tre qry costruite fisicamente nel DataBase di Access, una qtyClintePrenotazioni la seconda con qryPrenotazioniPrestazioni e la terza finalmente qryClientePrenotazioniPrestazioni con questa query riepilogativa ho potuto fare quello che ti avevo chiesto in precedenza tramite li seguente codice;
Private Sub MostraDati()


ds = New DataSet
da = New OleDbDataAdapter("SELECT * FROM qryClientiPrenotazioniPrestazioni WHERE (Cognome LIKE'" & txtCognome.Text & "')AND(Nome LIKE '" & txtNome.Text & "') ORDER BY Cognome,Nome", Archivio)
da.Fill(ds, "qryClientiPrenotazioniPrestazioni")

'Contenuto griglia
lvMostra.Items.Clear()
If ds.Tables("qryClientiPrenotazioniPrestazioni").Rows.Count > 0 Then
For i As Integer = 0 To ds.Tables("qryClientiPrenotazioniPrestazioni").Rows.Count - 1
With lvMostra.Items.Add(ds.Tables("qryClientiPrenotazioniPrestazioni").Rows(i).Item(0).ToString)
.SubItems.Add(ds.Tables("qryClientiPrenotazioniPrestazioni").Rows(i).Item(16).ToString)
.SubItems.Add(ds.Tables("qryClientiPrenotazioniPrestazioni").Rows(i).Item(17).ToString)
.SubItems.Add(ds.Tables("qryClientiPrenotazioniPrestazioni").Rows(i).Item(18).ToString)
End With
Next
End If
'----------------=============Colora con righe alterne la gilia =====================----------------------
For Each ItemList As ListViewItem In lvMostra.Items
If i Mod 2 = 1 Then
ItemList.BackColor = Color.DarkKhaki
Else
ItemList.BackColor = Color.Khaki
End If
i += 1
Next
End Sub
-----------------------------------------------------------------------------------------------------
Private Sub txtCognome_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtCognome.TextChanged
ds = New DataSet
da = New OleDbDataAdapter("SELECT * FROM qryClientiPrenotazioniPrestazioni WHERE (Cognome LIKE'" & txtCognome.Text & "') ORDER BY Cognome,Nome", Archivio)
da.Fill(ds, "qryClientiPrenotazioniPrestazioni")

'Contenuto griglia
lvMostra.Items.Clear()
If ds.Tables("qryClientiPrenotazioniPrestazioni").Rows.Count > 0 Then
For i As Integer = 0 To ds.Tables("qryClientiPrenotazioniPrestazioni").Rows.Count - 1
With lvMostra.Items.Add(ds.Tables("qryClientiPrenotazioniPrestazioni").Rows(i).Item(0).ToString)
.SubItems.Add(ds.Tables("qryClientiPrenotazioniPrestazioni").Rows(i).Item(16).ToString)
.SubItems.Add(ds.Tables("qryClientiPrenotazioniPrestazioni").Rows(i).Item(17).ToString)
.SubItems.Add(ds.Tables("qryClientiPrenotazioniPrestazioni").Rows(i).Item(18).ToString)
End With
Next
End If
'----------------=============Colora con righe alterne la gilia =====================----------------------
For Each ItemList As ListViewItem In lvMostra.Items
If i Mod 2 = 1 Then
ItemList.BackColor = Color.DarkKhaki
Else
ItemList.BackColor = Color.Khaki
End If
i += 1
Next

End Sub
---------------------------------------------------------------------------------------------------------
Private Sub txtNome_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtNome.TextChanged
ds = New DataSet
da = New OleDbDataAdapter("SELECT * FROM qryClientiPrenotazioniPrestazioni WHERE (Nome LIKE'" & txtNome.Text & "') ORDER BY Cognome,Nome", Archivio)
da.Fill(ds, "qryClientiPrenotazioniPrestazioni")

'Contenuto griglia
lvMostra.Items.Clear()
If ds.Tables("qryClientiPrenotazioniPrestazioni").Rows.Count > 0 Then
For i As Integer = 0 To ds.Tables("qryClientiPrenotazioniPrestazioni").Rows.Count - 1
With lvMostra.Items.Add(ds.Tables("qryClientiPrenotazioniPrestazioni").Rows(i).Item(0).ToString)
.SubItems.Add(ds.Tables("qryClientiPrenotazioniPrestazioni").Rows(i).Item(16).ToString)
.SubItems.Add(ds.Tables("qryClientiPrenotazioniPrestazioni").Rows(i).Item(17).ToString)
.SubItems.Add(ds.Tables("qryClientiPrenotazioniPrestazioni").Rows(i).Item(18).ToString)
End With
Next
End If
'----------------=============Colora con righe alterne la gilia =====================----------------------
For Each ItemList As ListViewItem In lvMostra.Items
If i Mod 2 = 1 Then
ItemList.BackColor = Color.DarkKhaki
Else
ItemList.BackColor = Color.Khaki
End If
i += 1
Next

End Sub
Ad esempio questo codice inpostato nel frmPrestazioniCliente appena scritto, mi permette di visionore un solo cliente con tutte le prestazioni da eseguire, di visionare se esiste un certo cliente e altro.
Tutto funziona correttamente come desideravo, esiste un modo più abreviato o lascio tutto così, che sugerisci?
Grazie per la cortesia e la pazienza. Oscar
 
Buona sera / Buon giorno Oscar,
non ho modo di provare il codice postato, ma leggendolo, mi sembra che sia limitato all'essenziale,
funzionando, non vi apporterei nessuna modifica
alla prossima
Marino
 

Discussioni simili