20 messaggi dal 08 novembre 2008
Ho 2 tabelle. La prima tabella contiene i turni e la seconda tabella contiene le competenze legate al turno.
Nella prima tabella (Turni) vi sono anche i riposi mentre nella tabella competenze i riposi non vengono contemplati, visto che non vi sono competenze. Il problema e che non riesco a caricare i dati della prima tabella (in effetti la sola voce RIPOSO, come turno, perchè nella seconda non vi sono riferimenti. Ho provato con INNER JOIN, LEFT JOIN e RIGHT JOIN, con quest'ultimo va in errore per violazione della chiave primaria. Quando sono presenti le 2 voci, i dati vengono caricati perfettamente.
Potrei Aggiungere nella tabella competenze la sola voce IdxTurno per riferimento e lasciare i campi NULL, ma sembra una soluzione stupida al problema
Questa la mia stringa di connessione

sql = "SELECT Turni.*, Competenze.* " _
& "FROM Competenze INNER JOIN " _
& "Turni ON Competenze.IdxTurno = " & giorni & " " _
& "AND Competenze.IdxFeriale = " & tipoturno.IdxFeriale & " " _
& "AND Competenze.IdxInvernale = " & tipoturno.IdxInvernale & " " _
& "AND Competenze.Scorporazione = '" & CmbTurno.SelectedItem & "' " _
& "WHERE (Turni.IdxTurno = " & giorni & ") " _
& "AND (Turni.IdxFeriale = " & tipoturno.IdxFeriale & ") " _
& "AND (Turni.IdxInvernale = " & tipoturno.IdxInvernale & ") " _
& "AND (Turni.Scorporazione = N'" & CmbTurno.SelectedItem & "')"

Giorni=riferimento del turno da caricare
IdxFeriale= se feriale, sabato o festivo
IdxInvernale= Se turno invernale, luglio o agosto
cmbturno= combobox contiene la stringa di appartenenza al turno, sono 12 turni diversi

Spero di essere stato chiaro e ringrazio tutti
Modificato da oldman il 08 marzo 2009 09.54 -
60 messaggi dal 30 dicembre 2006
da quello che ho capito, un paio di considerazioni
1) dovrebbe andare bene "left join"
2) forse il problema è nella "where":
magari una delle condizioni che imponi,
(p.es. "AND (Turni.IdxFeriale = " & tipoturno.IdxFeriale & ") ") esclude la riga che ti interessa ...
ciao.
.
308 messaggi dal 13 luglio 2005
Ciao oldman,
... ci sono molti (troppi) punti "oscuri" nella tua descrizione  ...
Cosa sono i valori tipoturno.IdxFeriale e tipoturno.IdxInvernale (sono valori booleani, cioè vero o falso) ? Da dove arrivano ? da checkbox o cosa? Come funziona la pagina ? inserisci dei parametri e ottieni l'importo del turno ? oppure ?
Dovresti descrivere un po' meglio il problema, postare un po' più di codice e magari fare un esempio con dei valori ...

A presto, ciao.

Umb
20 messaggi dal 08 novembre 2008
Cerchero di essere piu chiaro
1) i turni vanno da 1 a 36 IdxTurno contiene il numero del turno
2) per ogni turnazione e ve ne sono ben 12 divise per nome che fa capo ad un combobox contenente le turnazioni (cmbscorporazione.selecteditem)
3) idxferiale è integer 0=feriale 1=Sabato 2=festivo o domenica i turni variano durante la settimana appunto se risultano in queste condizioni
4)IDX Invernale 0= Invernali 1= Mese di luglio 2=mese di agosto

L'unico parametro che imposto è la data. Ovviamente vi è una data predeterminata di partenza per il calcolo e con datediff calcolo lo spostamento in giorni per sapere ad esempio il 25 dicembre 2009 che turno devo effettuare.
Questo per la mia turnazione, ovviamente i turni assegnati ai nominativi come idxturno partono da quella data predeterminata

le 2 tabelle hanno i seguenti campi

tabella turni
IDX = chiave primaria
IdxTurno = numero del turno che va da 1 a 36
IdxFeriale= vedi descrizione precedente
Scorporazione = Napoli, Sorrento, Baiano, Sarno, Poggiomarino etc.
Turno = turno effettivo da visualizzare

La tabella competenze ha gli stessi campi di ricerca ed ovviamente ha le competenze legate al turno quali pernottazione, diaria, km etc.
Se il turno n.12 prevede come turno il RIPOSO ne consegue che non vi sono competenze a questo turno e quindi nella tabella competenze non vi è nessun riferimento ad IdxTurno=12
Spero con questo di essere stato chiaro. Personalmente ho provato ad aggiungere nella tabella competenze anche il turno 12 di riposo ed il tutto funziona perfettamente utilizzando INNER JOIN ma sembra un po stupido aggiungere dei ROWS inutili dove al suo interno è inserito solo il numero del turno e gli altri campi sono DBNULL. Se fosse una sola riga avrebbe poca importanza, ma su 36 turni vi sono 6 turni di riposo e moltiplicati per le scorporazioni, vengono fuori parecchi righe inutili.
Enzo
60 messaggi dal 30 dicembre 2006
ciao oldman,
sempre che ancora ti serva
1) se non erro, potresti semplificare la select che hai scritto: anzichè
..." Turni ON Competenze.IdxTurno = " & giorni & " " ...
e .. "WHERE (Turni.IdxTurno = " & giorni & ") " ...
con
... " Turni ON Competenze.IdxTurno = Turni.IdxTurno "
e alla fine
.. "WHERE (Turni.IdxTurno = " & giorni & ") " ...
e via discorrendo: in questo modo useresti la metà dei parametri; 2) usa i "parameters" e cerca di evitare di comporre la
select come hai fatto finora;
3) posta la struttura delle 2 tabelle come codice sql;
4) posta le necessarie istruzioni di insert per popolare le tabelle in questione.
5) se credi, posta anche il codice client che utilizza la select; 6) tieni le dita incrociate!

ciao.
.

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.