Newsgroup: it.comp.lang.visual-basic
Titolo: Problema con un programmino in VB4

Cercando di eseguire o di creare l'eseguibile per un piccolo
progetto in VB4 con un form con un solo tasto con codice mi
dà gli errori:
**L'istruzione a ... ha fatto riferimento alla memoria a ... La
memoria non poteva essere "read"** e
**IDEM ..."written"**.
È un problema di librerie o che altro? Devo controllare meglio
il codice?
Grazie
-- 
Gia


Aggiungo che ho copiato il codice da un altro progetto.
Lo trascrivo qui di seguito perché non sono sicuro che
sia VB4, forse VB5 e non riesco a compilarlo con VB4?
*****
Private Sub Form_Load()
Dim nomeout
Dim rigapar, percorso, parametri, risposta, convfl
nomeout = "CONVESAT.PAR"
percorso = CurDir
If Right(percorso, 1) = "\" Then
 parametri = percorso & nomeout
 Else
 parametri = percorso & "\" & nomeout
End If
convfl = Dir(parametri)
If convfl <> nomeout Then
 risposta = MsgBox(nomeout & " non trovato")
 GoTo fineini
End If
Open parametri For Input As #1
If EOF(1) Then GoTo finefl
Line Input #1, rigapar
filesat.Text = rigapar
If EOF(1) Then GoTo finefl
Line Input #1, rigapar
filconad.Text = rigapar
finefl:
Close #1
fineini:
End Sub
*****
***
Private Sub Conversione_Click()
Dim tiprec As String * 2
Dim numpro As String * 5
Dim numfat As String * 6
Dim datfat As String * 6
Dim numddt As String * 6
Dim datddt As String * 6
Dim codsoc As String * 15
Dim descon As String * 24
Dim codart As String * 15
Dim desart As String * 30
Dim unimis As String * 2
Dim qunati As String * 7
Dim cosuni As String * 9
Dim imptot As String * 9
Dim numpez As String * 4
Dim tipiva As String * 1
Dim aliiva As String * 2
Dim tipmov As String * 1
Dim tipces As String * 1
Dim tiptra As String * 1
Dim costra As String * 5
Dim codcon As String * 1
Dim tipfat As String * 1
Dim costddt As String * 6
Dim bufferfat
Dim nump, numf, numd, numx, numxfa, numxna, numby,
 numrec, impstat, impstaf, impstan, impstaa, swiddt, risposta
Dim numst As String * 15
Dim rigain(66) As String * 128
Open filesat.Text For Input As #1
Open filconad.Text For Output As #2
numrec = 0
impstat = 0
impstan = 0
numx = 999999999
nump = 0
'Leggo la fattura di 65 righe e la carico nella matrice
leggifa:
For i = 1 To 66
Line Input #1, rigain(i)
If EOF(1) Then
 Exit For
End If
Next
'Debug.Print i
If EOF(1) And i < 66 Then GoTo finefl   'fine input esco
'Analizzo la fattura e scrivo i record filconad
'Scrivo record filconad tipo 01 per ogni rottura di num. doc. trasp. (ddt)
 swiddt = 0
 bufferfat = rigain(13)
 costddt = Mid(bufferfat, 2, 6)     'fattura o altro
 bufferfat = rigain(15)
 datfat = Mid(bufferfat, 17, 2) & Mid(bufferfat, 14, 2)
   & Mid(bufferfat, 11, 2)
 numf = Mid(bufferfat, 1, 6)
 numfat = Format(numf, "000000")
 RSet codsoc = Mid(bufferfat, 109, 10)
'RSet codsoc = Mid(bufferfat, 19, 8)    10/02/2000
  'dalla descr. aggiuntiva
 If IsNumeric(datfat) Then
    risposta = " "
  Else
    risposta = MsgBox("Data fattura non numerica
   " & datfat & " , correggere i dati in input e riprovare",
   vbOKOnly, "Errore - interrompo la conversione")
  GoTo finefl
 End If
'Scrivo i records filconad di tipo 02 ogni articolo
For ia = 1 To 30
 bufferfat = rigain(ia + 21)
 RSet codart = RTrim(Mid(bufferfat, 1, 15))
 desart = Mid(bufferfat, 17, 30)
 unimis = Mid(bufferfat, 50, 2)
    'tolgo gli apici dalla quantità
 i1 = 52
 i2 = 1
 numst = Space(15)
  For i = 1 To 10
  numby = Mid(bufferfat, i1, 1)
  i1 = i1 + 1
   If numby <> "'" Then
   Mid(numst, i2, 1) = numby
   i2 = i2 + 1
   End If
  Next i
 numx = Val(numst) * 100
 qtafat = Format(numx, "0000000")
 'Tolgo gli apici e la virgola dal costo unitario
 i1 = 62
 i2 = 1
 numst = Space(15)
  For i = 1 To 11
  numby = Mid(bufferfat, i1, 1)
  i1 = i1 + 1
   If numby <> "'" And numby <> "." Then
   Mid(numst, i2, 1) = numby
   i2 = i2 + 1
   End If
  Next i
 numx = Val(numst)
 cosuni = Format(numx, "000000000")
     'tolgo gli apici dal totale importo
 i1 = 81
 i2 = 1
 numst = Space(15)
  For i = 1 To 12
  numby = Mid(bufferfat, i1, 1)
  i1 = i1 + 1
   If numby <> "'" And numby <> "." Then
   Mid(numst, i2, 1) = numby
   i2 = i2 + 1
   End If
  Next i
 numx = Val(numst)
 imptot = Format(numx, "000000000")
 numxfa = 0
 numxna = 0
 If costddt = "FATTUR" Then
  numxfa = numx          'Fatture
  Else
  numxna = numx          'Note di accredito
 End If
 numpez = "0001"
 tipiva = Space(1)
 aliiva = Mid(bufferfat, 95, 2)
 tipmov = Space(1)
 tipces = "1"
 tiptra = Space(1)
 costra = "00000"
 codcon = Space(1)
 If costddt = "FATTUR" Then
  tipfat = Space(1)
  Else
  tipfat = "1"
 End If
 'Controllo se esiste almeno un articolo dietro una bolla DDT
 If Mid(bufferfat, 20, 6) = "D.D.T." And swiddt = 1 Then
  risposta = MsgBox("Un record D.D.T. nr. " & numddt &
  " del " & datddt & " non contiene articoli, correggere i dati
  in input e riprovare", vbOKOnly, "Errore - interrompo la conversione")
  GoTo finefl     'esco dal programma per errori
 End If
 'Scrivo di record di testata e dettaglio
 If Mid(bufferfat, 20, 6) = "D.D.T." Then
  nump = nump + 1
  numpro = Format(nump, "00000")
  datddt = Mid(bufferfat, 43, 2) & Mid(bufferfat, 40, 2)
   & Mid(bufferfat, 37, 2)
  numd = Mid(bufferfat, 26, 6)
  numddt = Format(numd, "000000")
 'descon = Mid(rigain(ia + 22), 105, 24) 'nome conad
  RSet codsoc = RTrim(Mid(rigain(ia + 22), 105, 15)) 'preso
   'dalla descr. aggiuntiva
  Print #2, "01"; numpro; numfat; datfat; numddt; datddt;
     Spc(24); Spc(22); codsoc; Spc(2); "EUR"; Spc(31)
'  Print #2, "01"; numpro; numfat; datfat; numddt; datddt;
'     Spc(24); Spc(22); codsoc; Spc(36)
  swiddt = 1      'imposto a 1 switch di testata ddt
  numrec = numrec + 1
   ElseIf qtafat > 0 And nump > 0 Then
   Print #2, "02"; numpro; codart; desart; unimis;
     qtafat; cosuni; imptot; numpez; tipiva; aliiva; tipmov;
     tipces; Spc(10); tiptra; costra; codcon; tipfat; Spc(22)
   swiddt = 0     'imposto o 0 lo switch di testata ddt
   impstan = impstan + numxna
   impstat = impstat + numxfa
   numrec = numrec + 1
 End If
Next ia
'Vado a leggere la prossima fattura
If EOF(1) Then GoTo finefl Else GoTo leggifa
'Chiudo i files prima di uscire
finefl:
Close #1
Close #2
'Scrivo statistiche se non ci sono errori
If swiddt = 0 Then
Tnumrec.Visible = True
Tnumddt.Visible = True
Totfat.Visible = True
Totnacc.Visible = True
Lnumrec.Visible = True
Lnumddt.Visible = True
Ltotfat.Visible = True
Ltotnacc.Visible = True
impstaf = Format(impstat, "###,###,###,##0")
impstaa = Format(impstan, "###,###,###,##0")
Tnumrec.Text = numrec
Tnumddt.Text = nump
Totfat.Text = impstaf
Totnacc.Text = impstaa
End If
End Sub
*****
Il programma serve per prelevare i dati da un file
di testo di input ed immetterli in un file di output
formattato in maniera particolare.
Scusate per il post chilometrico ma è per lavoro
e spero di darvi più dati possibili.
Grazie
-- 
Gia

 sia VB4, forse VB5 e non riesco a compilarlo con VB4?
Ma compilando che errori comunica? Grrrr!
Problema antico (vedi sotto, link su una sola riga, eventualmente cerca per
read, written o memory), mai (che io sappia) risolto, se i SP minimi sono
installati:
http://groups.google.it/groups?hl=it&lr=&ie=ISO-8859-1&q=memoria+read+writte
n+group%3Ait.comp.lang.visual-basic&btnG=Cerca+con+Google&meta=group%3Dit.co
mp.lang.visual-basic
Da un'occhiata veloce al codice (troppo lungo!) una scommessina che debba
andare la farei.

 scommessina che debba andare la farei.
Cioč?
-- 
Gia

Ora ho provato a creare un progetto ex-novo inserendo il form
con il codice e quando compilo e/o genero il .exe non mi dà errori
ma si chiude VB...
 -- 
 Gia

[*Gia* = 
zanbot1...@tiscali.it
 in
news:bv8g5c$p8p5n$
1...@ID-84652.news.uni-berlin.de
] ha scritto:

Cioč, a occhio dovrebbe andare.
Noto solo questo:
Qui sotto non č il caso di testare l'EOF prima di fare il Line Input?
For i = 1 To 66
Line Input #1, rigain(i)
If EOF(1) Then
 Exit For
End If
Next
E qui sotto non č il caso di prevedere tutti i controlli di cui setti il
.Visible (o togliere tutte le istruzioni)?:
'Scrivo statistiche se non ci sono errori
If swiddt = 0 Then
Tnumrec.Visible = True
Tnumddt.Visible = True
Totfat.Visible = True
Totnacc.Visible = True
Lnumrec.Visible = True
Lnumddt.Visible = True
Ltotfat.Visible = True
Ltotnacc.Visible = True
impstaf = Format(impstat, "###,###,###,##0")
impstaa = Format(impstan, "###,###,###,##0")
Tnumrec.Text = numrec
Tnumddt.Text = nump
Totfat.Text = impstaf
Totnacc.Text = impstaa
End If
Altra cosa: Non usare mai numeri di canali assoluti, ma determinali sempre
con num_canale=FreeFile e poi usi la variabile num_canale.
Poi non č chiaro:
-L'errore te lo segnala in fase di compilazione o esecuzione?
-Se in fase di esecuzione, dove, su quale riga? (metti del MsgBox per sapere
dove arrivi)
-non entro nella logica, ma sei sicuro che il file che leggi abbia la
struttura corretta?

 abbia la struttura corretta?
No, infatti è ancora da perfezionare e già ha problemi con il
vecchio eseguibile, come detto, ma dovrebbe almeno compilare.
-- 
Gia

 vecchio eseguibile, come detto, ma dovrebbe almeno compilare.
Bene, ma, permettimi, dubito che quell'errore che citi nei primi post ti
esca in fase di compilazione.
A meno che il VB che usi non sia da reinstallare...

 A meno che il VB che usi non sia da reinstallare...
Il VB è stato installato oggi stesso in un Win2000 Server Family
ed in un WinXP, non credo sia da reinstallare.
Grazie ancora e scusa l'ignoranza
-- 
Gia

 anche quando creo il file .exe.
Crea un progetto con un form e un solo bottone e nell'evento click del
bottone (Command1_Click) metti:
 MsgBox "Ciao"
e prova a compilare ed eseguire. Se non va è il tuo VB mal installato.

 installato.
Ho provato e funziona normalmente.
Provo ad installare il VB5 e vedere se ne vengo fuori.
-- 
Gia

 Provo ad installare il VB5 e vedere se ne vengo fuori.
Con VB5 è ok ma mi in esecuzione mi dà MsgBox "Data
fattura non numerica       , correggere i dati in input e riprovare".
Nessuno mi dà una mano?
-- 
Gia

[*Gia* = 
zanbot1...@tiscali.it
 in
news:bvd6ev$qsk7p$
1...@ID-84652.news.uni-berlin.de
] ha scritto:

E' la logica che è sbagliata (o i contenuti del file di input).
Quel messaggio esce se i dati non sono quelli attesi...

 Quel messaggio esce se i dati non sono quelli attesi...
Il bello č che funziona con il file di input precedente.
Mi spiego: il file precedente aveva una riga cosě:
          DA D.D.T.      5     DEL 14/01/04
mentre quello attuale:
            Da D.D.T.  n.   5 del 14/01/04
perciň non ho fatto altro che cambiare la posizione del controllo
su "D.D.T." da 15 a 20 e su anno mese e giorno da 45, 42, 39
a 43, 40, 37.
Non ho fatto altre modifiche al codice ma dovrň farne al file di
input in qualche campo dei record delle righe articoli, non della
riga incriminata.
-- 
Gia

 riga incriminata.
Allora prima sistema in modo definitivo il file di input e poi adegua il
codice.