Newsgroup: it.comp.lang.visual-basic
Titolo: ERRORE DURANTE CARICAMENTO IN ACCESS

Ciao a tutti,
sto facendo un caricamento in access da un txt ed ho messo questo codice
 
Private Sub CARICA_Click()
 
    Dim StrRiga As String
    Dim MioDb As Database
    Dim MioRcs As Recordset
 
 
        Set MioDb = CurrentDb
        Set MioRcs = MioDb.OpenRecordset("EMESSI_APPOGGIO", dbOpenDynaset)
 
 
    Open "C:\INCASSI\EURO\" & [Forms]![CARICAMENTO]![nome_emessi] For Input As #1
        Do While Not EOF(1)
            Line Input #1, StrRiga
                Select Case Mid(StrRiga, 1, 2)
                    Case Is = "AA"
                        AggiungiRecords MioRcs, StrRiga, 1, MioRcs
                    Case Is = "00"
                        AggiungiRecords MioRcs, StrRiga, 2, MioRcs
                    Case Is = "ZZ"
                        AggiungiRecords MioRcs, StrRiga, 3, MioRcs
 
                End Select
        Loop
    Close #1
    MioRcs.Close
    MioDb.Close
End Sub
 
dopo parte la Function con il caricamento 
 
Si blocca però subito sul primo case AA dandome l'errore argomento non facoltativo su AggiungiRecords 
 
consigli?
 
ciao e grazie
-- 
Daniele

 ciao e grazie
 
Magari metti anche la funzione AggiungiRecord :D tanto per vedere che 
parametri ha !
 
 

Function AggiungiRecords(RecTemp As Recordset, StrNum As String, NumFl As Byte, RecTemp1 As Recordset, _
    StrConto As String)
 
    Select Case NumFl
        Case Is = 1
            With RecTemp
                .AddNew
                !TIPO = RECORD
                !CONTO = Strings.Mid(StrNum, 3, 12)
                !DATA_VIDIMAZIONE = Strings.Mid(StrNum, 171, 6)
                .Update
                .Bookmark = .LastModified
            End With
        Case Is = 2
            With RecTemp
                .Edit
                !BENEFICIARIO = Strings.Mid(StrNum, 147, 35)
                !CO = Strings.Mid(StrNum, 182, 35)
                !INDIRIZZO = Strings.Mid(StrNum, 217, 40)
                !CAP = Strings.Mid(StrNum, 257, 5)
                !LOCALITA = Strings.Mid(StrNum, 262, 34)
                !PROVINCIA = Strings.Mid(StrNum, 297, 2)
                !DESCRIZIONE = Strings.Mid(StrNum, 299, 74)
                !ANNO = Strings.Mid(StrNum, 374, 4)
                !NUMERO_FATTURA = Strings.Mid(StrNum, 379, 15)
                !PROGRESSIVO = Strings.Mid(StrNum, 394, 9)
                !IMPORTO = Strings.Mid(StrNum, 440, 12)
                !COD_TRANSAZIONE = Strings.Mid(StrNum, 453, 22)
                !NUMERO_ASSEGNO = Strings.Mid(StrNum, 475, 12)
                !COD_RACCOMANDATA = Strings.Mid(StrNum, 485, 12)
                .Update
                .Bookmark = .LastModified
                End With
        Case Is = 3
            With RecTemp
                .Edit
                !IMPORTO_TOTALE = Strings.Mid(StrNum, 16, 12)
                !NUMERO_EMESSI = Strings.Mid(StrNum, 28, 7)
                .Update
                .Bookmark = .LastModified
            End With
    End Select
End Function
 

questo è il caricamento che in teoria dovrebbe fare, ma non parte neanche.
 
se mi salvi ti mando da babbo natale un bel regalo :)
 


Scusa ma a prima vista sembra che la tua funzione si aspetta 5 parametri 
mentre tu ne passi solo 4 quando chiami AggiungiRecords, non vorrei dire 
una fregnaccia ma mi sembra così
 
Francesco

     StrConto As String)
 
Lasciando perdere il resto della funzione (che potrai debuggare in seguito 
in cerca di eventuali errori), come dice anche Francesco Tattoli tu chiami 
la funzione in questo modo:
   Case Is = "AA"
      AggiungiRecords MioRcs, StrRiga, 1, MioRcs
 
Quanti parametri gli passi? io ne conto 4 :) 
Quanti parametri si aspetta la funzione? Io ne conto 5 :) ossia:
- RecTemp As Recordset
- StrNum As String
- NumFl As Byte
- RecTemp1 As Recordset
- StrConto As String
 
Quindi...? :)
 

in altri DB che ho fatto non l'ho mai definito come parametro ma in quel caso funzionano.
Comunque anche a me sembra che l'errore sia questo ma non so come definire AggiungiRecords che in teoria è la funzione. 
Come dovrei metterla?
 
Dim AggiungiRecords As ????
 
grazie per l'aiuto che mi state dando
 

 ha scritto:

In che senso non sai come definire "AggiungiRecords" ? La funzione è già 
definita nel codice che ci ha fatto vedere prima. Non devi definirla 
ulteriormente. Devi solo usarla aggiungendo l'argomento richiesto quando la 
chiami.
Perchè dovresti crearti una variabile AggiungiRecord?
 
PS: Magari in altri DB se ti funzionava i casi sono principalmente due:
- o non era quella stessa funzione
- o l'ultimo parametro era opzionale 
 
 
 

ok avevo letto e capito male, pensavo fosse da definire anche aggiungirecords.
 
provo ad elimiare strconto che tanto non mi serve e vedo se funziona
 

l'ho modificato cosi e va grazie ragazzi :)
 
Private Sub CARICA_Click()
 
    Dim StrRiga As String
    Dim MioDb As Database
    Dim MioRcs As Recordset
 
 
        Set MioDb = CurrentDb
        Set MioRcs = MioDb.OpenRecordset("EMESSI_APPOGGIO", dbOpenDynaset)
 
 
    Open "C:\INCASSI\EURO\" & [Forms]![CARICAMENTO]![nome_emessi] For Input As #1
        Do While Not EOF(1)
            Line Input #1, StrRiga
                Select Case Mid(StrRiga, 1, 2)
                    Case Is = "AA"
                        AggiungiRecords MioRcs, StrRiga, 1, MioRcs
                    Case Is = "00"
                        AggiungiRecords MioRcs, StrRiga, 2, MioRcs
                    Case Is = "ZZ"
                        AggiungiRecords MioRcs, StrRiga, 3, MioRcs
 
                End Select
        Loop
    Close #1
    MioRcs.Close
    MioDb.Close
End Sub
Function AggiungiRecords(RecTemp As Recordset, StrNum As String, NumFl As Byte, RecTemp1 As Recordset)
 
    Select Case NumFl
        Case Is = 1
            With RecTemp
                .AddNew


mi è rimasto solo un problema, il caricamento va perfettamente ma invece di andare a capo e creare una riga per ogni record che legge mi sovrascrive lo stesso.
 
consigli?
 


Naturalmente aggiungi alla fine del tuo ciclo di lettura rst.movenext e 
vai liscio come l'olio :)

 ha scritto:

Si ma ora facciamoci dare il regalo :D
 

non ve lo meritate ancora :)
non l'ho mai usato quel codice ed è sempre andato bene :)
 
rst come lo devo definire?
 


rst è il tuo recordset... ossia MioRcs.
E' già definito ... devi solo aggiungere l'istruzione movenext alla fine del ciclo per dirgli di passare al record successivo.


mmmmmm direi proprio di NO!
 
Logicamente
 
.....leggi 1 file.....con un loop....do while e line input!
poi
leggi i primi caratteri
SOLO SE sono AA aggiungi un record! ...l'errore "logico" e' avere una 
funzione "AggiungiRecord" che SOLO talvolta aggiunge davvero un record!
 
Nell'altro 75% del suo scopo....modifica UN record!
 
quindi ....se trova AA AGGIUNGE un record...altrimenti ti sovrascrive 
quale record??? beh mi sa proprio QUEL record!!!..
E lo deve fare perchè usi una insert differita...un bel macello
 
 
ti fai una insert ed inserisci alcuni dati:
Conto e data vidimazione e ti salvi il bookmark (già qui si va con i 
piedi di pionbo a va verificato se prendi davvero il last insert 
id....vecchia discusssione!)
 
POI inserisci altri dati su quel record
BENEFICIARIO CO...etc etc
 
 
INFINE altra update
Importo totale numero emessi
 
 
....bel macello!
 
Domanda.....ti rendi conto che è passibile di bug logici immani?
forse strconto e la data erano la chiave per non farti inserire duplicati?
 
cmq
AA add record e salva bookmark? no!...ti fidi...speriamo bene!
OO su QUEL bookmark (che si spera sia mantenuto) fai una update...
ZZ ANCORA su quel bookmark fai un altra update....
 
è ovvio che finchè non trova un ALTRO AA continuarà ad aggiornarti QUEL 
record!!!
 
La domanda sorge spontanea
 
 
1 caso ...forse il tuo
 
AA pippo
oo dati
zz dati
oo dati
zz dati
 
record inserito ....UNO! dati sovrascritti!!!
 
 
2 caso...ancora più terribile
 
AA pippo
AA pluto
zz dati di pippo
oo dati di pippo
zz dati di pluto
 
  record pippo inserito vuoto
  record pluto inserito un po con i dati di pippo e un po con quelli di 
pluto....TERIBBBBBBILE!!!!!!
 
 
Forse una occhiata alla logica di funzionamento??? Cambiare un po di logica?
Ma forse non lo puoi fare ( e lavorando ultimamente per un 
multinazionale riesco a  capire i casini irrazionali che ti potrebbero 
aver imposto!)
 
Saluti....mi reco al mio irrazionale luogo di lavoro!!!

 
 
Penso che lui stia caricando un flusso HOST.
 
Se fosse così la logica dovrebbe essere:
AA.... (record di testa, dovrebbe contenere il numero di record da 
inserire/aggiornare)
00.... (primo da inserire/Aggiornare)
00.... (secondo record da inserire/Aggiornare)
..    (ennesimo record da inserire/Aggiornare)
ZZ.... (record di coda)
 

Ho corretto il codice cosi e adesso mette tutto su varie righe correttamente ma non mi salva i dati di CONTOCORRENTE e vidimazione, provo a smanettare un altro po viste le mie scarse conoscienze in materia eheheh 
 
 
Option Compare Database
Option Explicit
 
Private Sub CARICA_Click()
 
    Dim StrRiga As String
    Dim MioDb As Database
    Dim MioRcs As Recordset
    Dim CONTOCORRENTE As String
    Dim vidimazione As String
    Dim StrNum As String
 
 
        Set MioDb = CurrentDb
        Set MioRcs = MioDb.OpenRecordset("EMESSI_APPOGGIO", dbOpenDynaset)
 
 
    Open "C:\INCASSI\EURO\" & [Forms]![CARICAMENTO]![nome_emessi] For Input As #1
        Do While Not EOF(1)
            Line Input #1, StrRiga
                Select Case Mid(StrRiga, 1, 2)
                    Case Is = "AA"
                        CONTOCORRENTE = Mid(StrNum, 3, 12)
                        vidimazione = Mid(StrNum, 171, 6)
                    Case Is = "00"
                        AggiungiRecords MioRcs, StrRiga, 1, MioRcs, CONTOCORRENTE, vidimazione
                    Case Is = "ZZ"
                        AggiungiRecords MioRcs, StrRiga, 2, MioRcs, CONTOCORRENTE, vidimazione
                End Select
        Loop
        MioRcs.MoveNext
    Close #1
    MsgBox "ESECUZIONE TERMINATA"
    MioRcs.Close
    MioDb.Close
End Sub
Function AggiungiRecords(RecTemp As Recordset, StrNum As String, NumFl As Byte, RecTemp1 As Recordset, CONTOCORRENTE As String, vidimazione As String)
 
    Select Case NumFl
        Case Is = 1
            With RecTemp
                .AddNew
                !CONTO = CONTOCORRENTE
                !DATA_VIDIMAZIONE = vidimazione
                !BENEFICIARIO = Strings.Mid(StrNum, 147, 35)
                !CO = Strings.Mid(StrNum, 182, 35)
                !INDIRIZZO = Strings.Mid(StrNum, 217, 40)
                !CAP = Strings.Mid(StrNum, 257, 5)
                !LOCALITA = Strings.Mid(StrNum, 262, 34)
                !PROVINCIA = Strings.Mid(StrNum, 297, 2)
                !DESCRIZIONE = Strings.Mid(StrNum, 299, 74)
                !FATTURA = Strings.Mid(StrNum, 374, 28)
                !IMPORTO = Strings.Mid(StrNum, 440, 12)
                !COD_TRANSAZIONE = Strings.Mid(StrNum, 453, 22)
                !NUMERO_ASSEGNO = Strings.Mid(StrNum, 475, 12)
                !COD_RACCOMANDATA = Strings.Mid(StrNum, 485, 12)
                .Update
                .Bookmark = .LastModified
                End With
        Case Is = 2


                 !TIPO = "RECORD" o !TIPO = "miotesto"???
             ........
                  !DATA_VIDIMAZIONE = Mid(DatiGrezzi, 171, 6)
 
                 .Update
                 .Bookmark = .LastModified
'in piï¿œ....salva il bookmark del record inserito
                 RitornaBookmark= .LastModified
         etc etc
 
      case 2
        'NO INSERT...MODIFICA...prima cosa....zompare al record da 
modificare!!!
   with RecTemp
           .bookmark=myRecBookmark 'ecco lo zompo!
           .edit
    etc etc
      case 3
         uguale al 2
end select
 
ULTIMA COSA
Ritorna il bookmark
quindi
AddRecord = RitornaBookmark
end function
 
quindi torniamo all'uso
dim ZompaAlRecord as variant
 
 
              Select Case Ucase(Mid(StrRiga, 1, 2))
                    Case "AA"
                         ZompaAlRecord=AddRecord(MioRcs,StrRiga,1,un 
valore qualsiasi es -1)
                    Case "00"
                          'modifica soltanto...e che cosa?...l'ultimo 
rec inserito da AA ...si usa diversamente...fregandocene del bookmark 
restituito ma dandogli quello dell'insert!
 
                    AddRecord MioRcs,StrRiga,1,ZompaAlRecord
 
 
 
                    Case "ZZ"
                     AddRecord MioRcs,StrRiga,1,ZompaAlRecord
 
                End Select
 
 
 
Cosï¿œ facendo sei SICURO...che ad ogni AA INSERISCI un record e ad ogni 
OO o ZZ modifichi l'ultimo record inserito da AA....sempre quello 
finchï¿œ non trovi un altro AA
 
OVVIAMENTE non sei immune da bug di parsing...
ma  probabilmente il file vien fuori da un as400 e tutto ï¿œ giï¿œ 
controllato!
 
Saluti!
 
-- 
----- Italliaaaaa 3227! -----
Pasquï¿œ...Pasquale Zagaria...u'fighh'Riccard
[Vieni avanti cretino (1982)
c'ho pure il video! 
http://www.martek.it/public/dblog/banfi1.swf
 ]