Chiedo grande aiuto visual basic.net

martedì 27 febbraio 2007 - 13.05

almax Profilo | Junior Member

Salve un saluto a tutti, sono nuovo.
Mi serve un aiuto importante.
Ho una tabella access con code, anno, importo1, importo2, importo3, al momento la query di select mi restituisce i valori in un file txt
in questo modo :

12345678 05 importo1 importo2 importo3
12345678 o6 importo2 importo2 importo3

io vorrei che si visualizzasse in questo modo
12345678
05 importo1 importo2 importo3
06 importo1 importo2 importo3

Come devo fare?
Ringrazio in anitcipo..

BiBi Profilo | Junior Member

Non ho capito bene, la tua applicazione è Access o .NET ed il file lo devi generare da una funzione di .NET?

almax Profilo | Junior Member

Allora ho un form di inserimento in .net e un form di ricerca sempre in .net
La base di dati è in access, quindi tutte le query le faccio da .net, il file si lo creo con una funzione di .net

BiBi Profilo | Junior Member

Io in genere faccio in questo modo: mi creo una variabile di tipo StreamWriter e poi inserisco i dati al suo interno ad esempio:

Dim lswTXT As IO.StreamWriter
lswTXT = IO.File.CreateText("C:\prova.txt")

lswTXT.WriteLine("Codice cliente") 'Mi inserisce la prima riga
lswTXT.WriteLine("Descrizione") 'Mi inserisce la seconda riga

Non so se ti sono stata utile...

almax Profilo | Junior Member

Si ma infatti è così che faccio , pero' tutto all'interno di un ciclo quindi quello che vado a scrivere è fatto così
12345678 05 importo1 .......
12345678 06 importo2 .........

invece io vorrei che fosse

12345678

05 importo1
06 importo2

credo che la soluzione dovrebbe arrivare sulla query sql

BiBi Profilo | Junior Member

C'è una cosa che mi sfugge, anche se lo fai all'interno di un ciclo, perchè non fai due WtiteLine?

almax Profilo | Junior Member

perchè la query di select mi cicla sui record e ne trova due come ti ho scritto in precedenza,
quindi quello che mi visualizza sono due codici per ogni riga. Io devo raggruppare il codice su una riga e poi listare le seguenti con la data e gli importi .. Come posso fare?

sanbiz Profilo | Senior Member

>perchè la query di select mi cicla sui record e ne trova due
>come ti ho scritto in precedenza,
>quindi quello che mi visualizza sono due codici per ogni riga.
>Io devo raggruppare il codice su una riga e poi listare le seguenti
>con la data e gli importi .. Come posso fare?

Penso che la soluzione migliore sia quella di verificare l'ultimo codice inserito e se uguale a quello della riga che sto ciclando, non lo scrivo; una cosa del genere

1. prima fai la tua select recuperandone probabilmente un datareader od un dataset o datatable non importa

2. Cicli tra tutte le righe


(inizio cilo)
Qui verifichi il tuo codice (if oldCodice = Codice then .... else ..... end if)
oldCodice = Codice
(fine ciclo)

Ovviamente nel caso in cui sia un nuovo codice scrivi solo la riga col codice stesso, altrimenti scrivi solo i valori che ti interessano.


--
Sandro Bizioli
http://blogs.dotnethell.it/sandro/

almax Profilo | Junior Member

Mi sembra che puo' andare questa soluzione, purtroppo non utilizzo nessuno strumento data ,
mi collego al db access faccio la select e vado ad inserire i valori nelle variabili che poi vado scrivere con il writeline..
Per fare quello che tu dici mi potresti dare dei consigli ? Grazie

sanbiz Profilo | Senior Member

>Mi sembra che puo' andare questa soluzione, purtroppo non utilizzo
>nessuno strumento data ,
>mi collego al db access faccio la select e vado ad inserire i
>valori nelle variabili che poi vado scrivere con il writeline..

In che senso non usi "nessuno strumento data"?
Come fai a fare la select?
Non usi Ado.net?
Prova a guardare sui BOL l'utilizzo di Ado.net.

Detto molto sommariamente:
1. Crei un OleDb.OleDbConnection
2. Crei un OleDb.OleDbCommand (che poi sarà la tua select)
3. A questo punto potresti crearti semplicemente un OleDbDataReader

Ripeto. Guarda sui BOL (e sui ng) trovi tutto.
--
Sandro Bizioli
http://blogs.dotnethell.it/sandro/

almax Profilo | Junior Member

A si si pensavo per la visualizzaione ... Si utilizzo oledbdatareader ...
faccio la select e vado avanti...
Quello che al momento visualizzo è questo:

Codice Bilancio = 12345678
Codice Classificazione

000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000

Residui = 12,00
Pagamenti = 121,00
Impegni = 12,00
Totale Anno 05 = 133,00
Economie Anno 05 = -121,00
Totale Complessivo = 133,00
Economie Complessive = -121,00

Codice Bilancio = 12345678
Codice Classificazione

000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000
000 000 000 000 000 000 000 000 000 000

Residui = 12,00
Pagamenti = 12,00
Impegni = 12,00
Totale Anno 06 = 24,00
Economie Anno 06 = -12,00
Totale Complessivo = 24,00
Economie Complessive = -12,00

se ci fai caso è uguale il codice bilancio e la classificazione il resto sono le specifiche di due anni..
Io vorrei il codbilancio e la classificazione scritta una sola volta .. Così non va un gran che..
Guarda devo ringraziarti un casino per l'aiuto che mi stai dando perchè sto impazzendo dietro sta cosa..

Cmq fammi capire bene oldcodice dove lo prendo, Sto cercando di utilizzare la proprietà equals o sbaglio?
ti posto il codice:

Do While dr.Read()
Dim bil As String = (dr("codbilancio"))
Dim res As String = Format((dr("residui")), "standard")
Dim pag As String = Format((dr("pagamenti")), "standard")
Dim imp As String = Format((dr("impegni")), "standard")
Dim tot As String = Format((dr("totale")), "standard")
Dim eco As String = Format((dr("economie")), "standard")
Dim t As String = Format((dr("t")), "standard")
Dim e As String = Format((dr("e")), "standard")

Dim an As String = (dr("annocomp"))

'dei campi mancanti che non ti posto'

If dr.Equals(bil) = False Then
sw.WriteLine("Codice Bilancio = " + (dr("codbilancio")), fnt)
sw.WriteLine("Codice Classificazione", fnt)
sw.WriteLine(" ")
sw.WriteLine("" + codp, fnt)
sw.WriteLine("" + codp1, fnt)
sw.WriteLine("" + codp2, fnt)
sw.WriteLine(" ")
sw.WriteLine("Residui = " + res, fnt)

sw.WriteLine("Pagamenti = " + pag, fnt)

sw.WriteLine("Impegni = " + imp, fnt)

sw.WriteLine("Totale Anno " + an + " = " + tot, fnt)

sw.WriteLine("Economie Anno " + an + " = " + eco, fnt)

sw.WriteLine("Totale Complessivo = " + t, fnt)

sw.WriteLine("Economie Complessive = " + e, fnt)

sw.WriteLine(" ")
Else


sw.WriteLine(" ")
sw.WriteLine("Residui = " + res, fnt)

sw.WriteLine("Pagamenti = " + pag, fnt)

sw.WriteLine("Impegni = " + imp, fnt)

sw.WriteLine("Totale Anno " + an + " = " + tot, fnt)

sw.WriteLine("Economie Anno " + an + " = " + eco, fnt)

sw.WriteLine("Totale Complessivo = " + t, fnt)

sw.WriteLine("Economie Complessive = " + e, fnt)

sw.WriteLine(" ")

End If

LOOp

così pero' non mi funziona

sanbiz Profilo | Senior Member

>Cmq fammi capire bene oldcodice dove lo prendo, Sto cercando
>di utilizzare la proprietà equals o sbaglio?

Io intendevo proprio con una variabile
Dim oldCode as integer = 0

Do While dr.Read()
.....
If oldCode <> dr("codbilancio") Then
sw.WriteLine("Codice Bilancio = " + (dr("codbilancio")), fnt)
sw.WriteLine("Codice Classificazione", fnt)
Else
...
....
end if
oldCode = dr("codbilancio")
Loop

--
Sandro Bizioli
http://blogs.dotnethell.it/sandro/

almax Profilo | Junior Member

Il sistema è andato bene grazie Sandro
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5