20 messaggi dal 08 novembre 2008
Che casino ragazzi...proprio non ci riesco. Questa la query per darvi i vari nomi

SELECT Iota.*, DiplomiCustom.*, Iota.Nome_Log AS Expr1, DiplomiCustom.Nome_Diploma AS Expr2
FROM Iota INNER JOIN
DiplomiCustom ON Iota.Nome_Log = DiplomiCustom.Nome_Log
WHERE (Iota.Nome_Log = 'I8VKB') AND (DiplomiCustom.Nome_Diploma = 'Iota')

in effetti ho la necessita di tirare fuori INDIPENDENTEMENTE tutti i campi della prima tabella (Iota) e solo i campi della seconda tabella che soddisfano 2 requisiti.
1) che il nome del log sia identico al nome del log della tabella IOTA in questo caso (I8VKB)
2) che il nome del diploma della seconda tabella sia Iota.

in questo caso con questo tipo di query mi risultano esattamente il doppio dei record visto che in DiplomaCustom sono memorizzati solo 2 record quindi tira fuori 1600 record per il primo e 1600 per il secondo (non va bene)
Ho provato con RIGHT OUTER JOIN ma tira fuori solo il record
Dovendo riempire un dataset e mostrare il tutto in una griglia dovrebbe mostrare i campi di tutti i record di iota ed un particolare campo della tabella DiplomiCustom se presente nella riga interessata della tabella IOTA
Insomma ho fatto un casino che alla fine non mi sono capito nemmeno io. Spero che ci riusciate a capire qualche cosa di quello che ho detto, perchè sono andato completamente nel pallone. Grazie a tutti.
Enzo
308 messaggi dal 13 luglio 2005
Ciao oldman,
se usi il LEFT (o RIGHT) JOIN non puoi filtrare la tabella DiplomiCustom ...: non funzionerebbe  ...
Puoi risolvere usando una tabella derivata, ovvero prova così:

SELECT Iota.*, DC.*, Iota.Nome_Log AS Expr1, DC.Nome_Diploma AS Expr2
FROM Iota LEFT JOIN
(SELECT * DiplomiCustom WHERE Nome_Diploma = 'Iota') AS DC ON Iota.Nome_Log = DC.Nome_Log
WHERE (Iota.Nome_Log = 'I8VKB')

Fammi sapere se ho capito bene e se il risultato è quello che volevi, ciao.

Umb
20 messaggi dal 08 novembre 2008
Invalid column name 'Nome_Diploma'. The column prefix 'DiplomiCustom' does not match with a table name or alias name used in the query. No column was specified for column 1 of 'DC'. Invalid column name 'Nome_Log'. Invalid column name 'Nome_Diploma'.

ora credo che ci sia un conflitto di colonne premesso che DC non ho capito se deve essere presente nel db o è una tabella che si crea nel momento della query
Un primo errore era dato dal secondo select
SELECT (* diplomaCustom
modificato in SELECT diplomacustom.*
Questo è quanto posso dirti nel momento in cui eseguo la query per riempire il dataset

adpter=new sqlclient.sqldatadapter(sql,connection)
adpter.fill(dataset,"Iota")

PERCHE FACCIO LE COSE COSI DIFFICILI???
Modificato da oldman il 29 novembre 2008 12.56 -

iN EFFETTI RILEGGENDO LA QUERY DOVREBBE FUNZIONARE PERFETTAMENTE
visto che sia il campo prefix sia nome log e nomediploma sono presenti come colonne. Solo Nome_Diploma però è presente in DiplomaCustom

Modificato da oldman il 29 novembre 2008 12.58 -
20 messaggi dal 08 novembre 2008
potrei in effetti effettuare 2 select e riempire il dataset con 2 tabelle distinte e dopo con il prefix (visto che è univoco) inserire il campo della tabella DiplomaCustom nella tabella visualizzata. Ovviamente non mi sembra un'approccio fatto bene, visto che poi dovrei scorrere l'intera tabella Iota per rilevare il prefix esatto per andare ad inserire il dato nella riga interessata. Insomma, non so proprio come risolvere il problema
20 messaggi dal 08 novembre 2008
Questa la tua query
SELECT Iota.*, DC.*, Iota.Nome_Log AS Expr1, DC.Nome_Diploma AS Expr2
FROM Iota LEFT JOIN
(SELECT * DiplomiCustom WHERE Nome_Diploma = 'Iota') AS DC ON Iota.Nome_Log = DC.Nome_Log
WHERE (Iota.Nome_Log = 'I8VKB')

mi dava un'errore vicino DiplomaCustom e mi sono permesso di modificarla in questo modo

SELECT Iota.*, DC.*, Iota.Nome_Log AS Expr1, DC.Nome_Diploma AS Expr2
FROM Iota LEFT JOIN
(SELECT * FROM DiplomiCustom WHERE Nome_Diploma = 'Iota') AS DC ON Iota.Nome_Log = DC.Nome_Log
WHERE (Iota.Nome_Log = 'I8VKB')

Ovvero aggiungendo un FROM

succede questo
la tabella iota viene regolarmente caricata con tutti i suoi campi, mentre i soli 2 record presenti nella seconda tabella, vengono inseriti in tutti i campi dell'altra tabella e non solo dove dovrebbero essere inseriti. Credo che ci sia bisogno di specificare il prefix (presente nelle 2 tabelle per dire inseirisci questi record nella posizione di prefix di iota. AZZ..... sto dando proprio fastidio
308 messaggi dal 13 luglio 2005
Ciao oldman,
... ops  ... sì, hai ragione mi sono scordato il "FROM"! Ma il risultato dovrebbe essere diverso da quello che ti appare ... Dovrebbero apparire tutte le righe di Iota e i dati di DiplomiCustom sempre vuoti tranne in corrispondenza della coincidenza di Nome_Log tra le due tabelle ...

Dovresti fare una verifica. Prova ad eseguire la query direttamente su SQL e vedi un po' cosa viene fuori. Come seconda cosa dovresti postarmi il codice completo che usi per creare il DataSet e dove lo utilizzi ... non mi convince ...

Fammi sapere, ciao.

Umb
20 messaggi dal 08 novembre 2008
superpippo2005 ha scritto:
Ciao oldman,
... Dovrebbero apparire tutte le righe di Iota e i dati di DiplomiCustom sempre vuoti tranne in corrispondenza della coincidenza di Nome_Log tra le due tabelle ...
Umb


Questo mi ha fatto sorgere il dubbio che la tua analisi al problema è perfetta evidentemente ho esposto male il problema o meglio i campi interessati e quindi cercherò di esporre meglio il problema elencando i campi e quello che serve

tabella IOTA questi i campi

IDX ( chiave primaria)
Nome_Log (Identifica la tabella generale a cui fa riferimento IOTA)
Prefix (Serie numeri e lettere che identifica l'isola)
Prefisso (Serie di numeri e lettere che identifica la nazionalita dell'isola)
Isola (nome dell'isola)
Deleted (se è cancellata o meno dal diploma)
Mixed (contiene il dato vero e proprio della tabella generale chiamata in questo caso I8VKB)
RMixed (è l'IDX della tabella generale di I8VKB per il dato interessato)

tabella DiplomiCustom
IDX (Chiave primaria)
Nome_Log (Stesso riferimento di prima)
Nome_Diploma (In questo caso identifica i record per IOTA)
Prefix (come prima)
Nominativo (è il dato Mixed vero e proprio della tabella generale)

in effetti la riga dovrebbe riempirsi (completamente) quando prefix di uno è eguale a prefix dell'altro tenendo conto che il nome_diploma deve essere IOTA ed il nome_log per le 2 tabelle deve essere I8VKB
Per quanto riguarda il codice lo posto senza nessun problema visto che è di una semplicità estrema

Public Class FrmMostraDiplomaIota
Private adapter As SqlClient.SqlDataAdapter
Private dataset As New DataSet

Private Sub FrmMostraDiplomaIota_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim sql As String
sql = qui la query per la selezione dei record
adapter = New SqlClient.SqlDataAdapter(sql, ConnectionUser)
adapter.Fill(dataset, "Iota")
me.grid.setdatabing(dataset, "Iota",true)

tieni presente però che faccio uso della griglia di apex e non la gridview di microsoft, ma questo cambia ben poco.
308 messaggi dal 13 luglio 2005
... chiarimento per chiarimento allora ... forse è meglio se posti un esempio con dei dati (magari 10 record di Iota e 2 di DiplomiCustom) con il risultato di quello che vorresti ottenere ...

a presto, ciao.

Umb

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.