|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Apr 2004
Città: Provincia di Piacenza
Messaggi: 8190
|
[Access + SQL] Query di "scomposizione"???
Ciao a tutti
Ho un problema con un piccolo programma in Access che sto realizzando per calcolare e stampare delle etichette che andranno apposte successivamente ad alcuni pezzi di metallo. ho una tabella contenente 3 campi: "Articolo", "Numero" e "Componente" ES: XYZ 2 LAMIERA1 ASD 3 LAMIERA2 ed ho bisogno di stampare 1 etichetta per ogni lamiera che verrà tagliata, mi servirebbe quindi una query che in output mi restituisca XYZ 1 LAMIERA1 XYZ 1 LAMIERA1 ASD 1 LAMIERA2 ASD 1 LAMIERA2 ASD 1 LAMIERA2 é tutta mattina che ci provo e ancora nn ho risolto nulla, oltretutto nn so che cercare su Google per avere risposta... Avete delle idee a riguardo?? PS: sono ben accette anche soluzioni diverse |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Feb 2004
Città: TREVISO
Messaggi: 902
|
fammi capire na cosa, se sulla tabella hai una riga con scritto:
XYZ 100 LAMIERA1 vuoi che in uscita ti stampi 100 volte la scritta XYZ 1 LAMIERA1 giusto? oppure ho frainteso? in ogni caso si può fare, basta che mi fai capire bene cosa ti serve.
__________________
![]() |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Apr 2004
Città: Provincia di Piacenza
Messaggi: 8190
|
si hai capito bene
mi interessa creare una tabella dalla quale prendere i dati con un report |
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: Aug 2003
Messaggi: 72
|
mhmmm....
magari si può fare pure (anche se non mi viene in mente come) ma sei sicuro che sia la strada più semplice per farlo? Mi sembra un risultato molto strano da voler ottenere come risultato di una query. Non è molto più semplice un programmino di una decina di righe con un bel ciclo for ... next?
__________________
Visual Basic e dintorni Blog sullo sviluppo web |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Apr 2004
Città: Provincia di Piacenza
Messaggi: 8190
|
prima volevo tentare la query per mantenere il DB + semplice possibile
![]() |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Feb 2004
Città: TREVISO
Messaggi: 902
|
non ho avuto tempo di risponderti prima, ma ho la soluzione al tuo problema, appena ho un minuto te la posto...penso domani.
non è nulla di trascendentale, con qualche riga di codice vba si fa senza problemi. ps come ha detto simoneart ci vuole del codice vba, senza non penso proprio sia possibile farlo...o almeno, se vuoi mantenere le cose semplici è molto meglio usare il codice....anzi, mi sento proprio di affermare che na cosa del genere con le sole query non si possa proprio fare
__________________
![]() Ultima modifica di akyra : 25-01-2007 alle 01:12. |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Apr 2004
Città: Provincia di Piacenza
Messaggi: 8190
|
ti ringrazio dell'aiuto
![]() |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Feb 2004
Città: TREVISO
Messaggi: 902
|
eccomi...meglio tardi che mai....
allora il codice che esegue quanto hai richiesto è il seguente: Codice:
Dim numRec, i, j As Integer Dim rst As ADODB.Recordset Dim conn As ADODB.Connection Set conn = CurrentProject.Connection Set rst = New ADODB.Recordset rst.Open "Tabella1", conn, adOpenDynamic, adLockOptimistic DoCmd.SetWarnings False DoCmd.RunSQL "DELETE * FROM Temp" While Not rst.EOF numRec = rst![Numero] For j = 1 To numRec DoCmd.RunSQL "INSERT INTO Temp (Articolo, Numero,Componente) VALUES ('" & rst![Articolo] & "','1','" & rst![Componente] & "')" Next j rst.MoveNext Wend DoCmd.OpenReport "report1", acViewPreview XYZ 6 ComponenteA ABC 7 ComponenteB ecc ecc... nel database che ho caricato ho implementato il codice sull'evento "click" del pulsante nella maschera denominata "principale". In questa maschera puoi modificare i dati inseriti e verificare che la modifica di questi ha come conseguenza il risultato che avevi richiesto tu. Il report che viene visualizzato alla fine ("report1") serve solo a mostrare il risultato dell'algoritmo, ed è basato sulla tabella "Temp" che utilizzo per inserire i dati che vengono successivamente stampati nel suddetto report. si possono inventare soluzioni stilisticamente migliori, ma questa è la prima che mi è venuta in mente...lascio a te ogni onere di eventuali migliorie ![]() ![]() se hai domande io sono qua.
__________________
![]() Ultima modifica di akyra : 26-01-2007 alle 08:46. |
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Apr 2004
Città: Provincia di Piacenza
Messaggi: 8190
|
Funziona alla perfezione
![]() grazie 1000 |
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Apr 2004
Città: Provincia di Piacenza
Messaggi: 8190
|
un' ultima cosa....
Su google trovo solo .exe precompilati... conoscete un buon algoritmo di nesting ad una dimensione? devo implementare un ottimizzatore di taglio sulle barre di metallo elaborate ![]() |
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Feb 2004
Città: TREVISO
Messaggi: 902
|
sinceramente non sarei perchè ogni casa produttrice di software è gelosa dei propri algoritmi di nesting, immagino....ma cosa vorresti fare? implementarne uno in access? e come creeresti l'immagine del posizionamento dei vari pezzi da "nestare"?
__________________
![]() |
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Apr 2004
Città: Provincia di Piacenza
Messaggi: 8190
|
vorrei implementare un algoritmo che agisca sul recordset creato con il tuo codice. Non mi interessa stampare nessuna immagine, semplicemente vorrei ordinare i record (e quindi le lunghezze di taglio) in modo da ridurre al minimo lo scarto del materiale. Essendo un nesting ad 1 sola dimensione basterebbe un array di long in cui immagazzinare gli ID dei record in successione per poi ri-costruire un terzo recordset ordinato ad hoc
|
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Feb 2004
Città: TREVISO
Messaggi: 902
|
come li dovresti ordinare i record? in base a che dato?
__________________
![]() |
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Apr 2004
Città: Provincia di Piacenza
Messaggi: 8190
|
voglio ordinare i record in base al campo lunghezza, in modo da ottenere un'ipotetica lista di taglio che, sapendo a priori lunghessa di ogni pezzo ed lunghezza delle barre in magazzino mi permetta di ridurre al minimo gli scarti
|
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: Feb 2004
Città: TREVISO
Messaggi: 902
|
quindi in pratica dovresti stampare un report diviso per tipologia di codice (diciamo) e, all'interno di ogni gruppo di tipologia, ordinare i vari record per lunghezza? oppure ti basterebbe ordinare tutti i record per lunghezza?
Nel primo caso dovresti agire a livello di report, spezzarlo per codice ed ordinarlo per lunghezza...ti faccio l'upload di un db di esempio che può esemplificare quanto ho detto. Nel secondo caso invece ti basterebbe implementare la query su cui si appoggia il report finale, in modo tale che presenti nella clausola "Ordinamento" il valore "Crescente". ...è un po' tardi, per cui se hai qualche dubbio su quello che ho scritto chiedi pure, in quanto le mie facoltà intellettive a quest'ora sono un po' "ridotte", per cui potrei essere stato poco chiaro...
__________________
![]() Ultima modifica di akyra : 01-02-2007 alle 00:22. |
![]() |
![]() |
![]() |
#16 |
Senior Member
Iscritto dal: Apr 2004
Città: Provincia di Piacenza
Messaggi: 8190
|
non ci siamo capiti
![]() non devo stamparli in ordine crescente ma in ordine utile a ridurre gli sprechi. es: la lunghezza delle lamiere a magazzino é di 10 metri devo tagliarne 1 da 6 metri 1 da 5 metri 1 da 4 metri 1 da 3 metri e 2 da 1 metro ci sonov arie successioni che permettono di scartare il meno possibile... es: Barra 1 5-4-1 Barra 2 6-3-1 oppure Barra 1 5-3-1-1 Barra 2 6-4 mi servirebbe un'algoritmo in grado di scovare questi ordinamenti ![]() cercando su google et similia si ottengono un sacco di programmi percompilati ma nemmeno uno straccio di codice sorgete da portare in un modulo all'interno di Access ![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:25.