Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    VB - esportare txt in mdb

    buonasera a tutti
    sto cercando di esportare il contenuto di un file sequenziale del tipo txt in una tabella di access attraverso una routine VB in un caso estremamente semplice:

    file txt c:\archivio\dati.txt
    contenuto del file:

    mario
    luca
    anna
    fabio


    file di access c:\archivio\dati.mdb --> tabella: amici --> unico campo : nomi (tipo testo) e nessuna chiave primaria

    In una form di VB importo l'oggetto adodc che connetto correttamente al database
    inserisco una casella di testo text1 (ove imposto datasource=Adodc1 e datafield= nomi)
    inserisco command button1 ove nell'evento click scrivo questo codice:


    Open "c:\archivio\dati.txt" For Input As #1
    Line Input #1, riga
    Text1 = riga
    Close #1
    End Sub

    il click fa scrivere "mario" nella casella di testo Text1

    inserisco un secondo pulsante di comando
    ove inserisco il codice

    Adodc1.Recordset.AddNew

    mi scrive in access il record "mario" nella tabella amici (ma solo quello)
    per scrive tutti i 4 nomi pensavo ad un ciclo for....!?!

    ma come fare?

    grazie a tutti in anticipo e spero di aver indovinato la sezione del forum e il resto del regolamento (...sono al primo messaggio...)

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    758
    L'errore sta nel fatto che ogni volta che clicchi il Commandutton1 esegui di nuovo la Open del file di testo e quindi la successiva Line Input rilegge sempre il primo nome.
    Ma, a parte questo, potresti benissimo fare a meno del controllo Adodc e anche della casella di testo Text1 e dei vari bottoni.

    Dovresti invece prevedere un ciclo di lettura (Do While... o Do Until) all'interno del quale leggere una riga dal file di testo (Line Input) e scrivere un record in un recordset precedentemente creato sulla tabella amici. Questo fino all'esaurimento delle linee di input, quindi chiudere input e output.

  3. #3
    Utente di HTML.it L'avatar di yyzyyz
    Registrato dal
    Oct 2001
    Messaggi
    1,653
    Io utilizzavo qualkosa del genere tempo fa, nn so se ti possa esser d'aiuto. ciao

    codice:
    Private Sub Command1_Click()
    Open App.Path & "\dati.txt" For Input As #1
    While Not EOF(1)
        Line Input #1, lineoftext$
        
        With Data1.Recordset
        .MoveFirst
        .AddNew
        nom = Mid(lineoftext$, 1, 14)
        .Fields("nome") = nom
        .Update
        .MoveNext
        End With
    Wend
        
    Close #1

  4. #4
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Qui trovi tutte le informazioni che ti servono:

    ImportText.exe Importing Text into Access with ADO/RDO/DAO/Filesys/Automation (August 5, 2004)
    http://support.microsoft.com/kb/230265/en-us


    In futuro, nel caso dovessi importare record con più di un campo, allora questi saranno utilissimi:

    ACC: How to Use Schema.ini for Accessing Text Data (January 19, 2007)
    http://support.microsoft.com/kb/149090/EN-US/

    ACC: How to Create a Schema.ini File Programmatically (January 19, 2007)
    http://support.microsoft.com/kb/155512/EN-US/


  5. #5
    grazie a tutti per i preziosi suggerimenti

    riesco a esportare da txt( due colonne) a mdb (due campi) con il seguente codice

    ' importa txt (due colonne) in mdb (2 campi)
    Private Sub Command1_Click()
    Dim fno As Long
    fno = FreeFile
    Open "c:\...\prova.txt" For Input As #fno
    While Not EOF(1)
    Line Input #fno, sline
    arrFlds = Split(sline, " ")
    With Adodc1.Recordset
    .MoveFirst
    .AddNew
    camp1 = arrFlds(0)
    camp2 = arrFlds(1)
    .Fields("sup") = camp1
    .Fields("sup2") = camp2
    .Update
    .MoveNext
    End With
    Wend
    Close #1
    End Sub

    però se la tabella del database non contiene almeno n.1 record, si blocca tutto.
    da cosa potrebbe dipendere?
    ciao a tutti

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472

    Moderazione

    Originariamente inviato da mmmmmmmm
    riesco a esportare da txt( due colonne) a mdb (due campi) con il seguente codice
    Usa il tag [CODE] per formattare il codice, come da Regolamento.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  7. #7
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da mmmmmmmm
    grazie a tutti per i preziosi suggerimenti

    riesco a esportare da txt( due colonne) a mdb (due campi) con il seguente codice
    Invece di fare esperimenti, ti consiglio caldamente di guardarti il progetto calloaudato che ti ho linkato.
    Poi vedi tu...


  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    758
    Originariamente inviato da mmmmmmmm
    grazie a tutti per i preziosi suggerimenti
    Mica tanto. Quel MoveFirst che hai copiato da un esempio che ti hanno postato non mi sembra molto prezioso .
    Comunque, più che "bloccarsi tutto", credo che che tu riceva un errore che faresti bene a segnalare.

    Ribadisco l'inutilità del controllo AdoDc.

  9. #9

    errore su db vuoto

    E' il Move.First che genera l'errore. Non puoi scorrere un recordset vuoto.

    Devi gestire l'errore. Potresti ad esempio verificare prima di eseguire il move se il recordeset è vuoto tipo
    if rs.recordcount > 0 then .........
    A parte che non capisco a cosa serva il move.first in questo caso.....

  10. #10
    infatti ho verificato: il Move.First generava l'errore. ho eliminato quella riga nel codice e sembra che non ci siano più problemi.

    altro problema (meno grave) si verifica provando ad importare un file di testo che contiene dati numerici di questo tipo:

    38,52 esterno_lordo
    10,58 interno_netto
    2,94 interno_netto
    2,94 interno_netto
    6,75 interno_netto
    27,84 interno_lordo

    (i dati provengono dalla lettura automatica di un file di disegno ove si individuano superficie in mq e layer di appartenenza di entità di disegno)

    viene popolata la tabella del file mdb in questo modo

    superf layer
    3852,00 esterno_lordo
    1058,00 interno_netto
    294,00 interno_netto
    294,00 interno_netto
    675,00 interno_netto
    2784,00 interno_lordo

    e non riesco ad adeguare il format in maniera opportuna

    (brutalmente ho creato una query dove ho diviso la superficie per 100)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.