+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17

[VB6] Esportazione XLS causa errore DataGrid

  1. #1
    L'avatar di StegcO
    StegcO non  in linea Scolaretto
    Partiamo dal codice:

    Private Sub Form_Load()
    
    Dim SQL As String
    
    Set Conn = New ADODB.Connection
    Set Rs = New ADODB.Recordset
    StringaConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\database.mdb;Persist Security Info=False"
    Conn.Open StringaConn
    
    
    
    SQL = "SELECT ID,Cognome,Societa,Telefono_1 FROM Agenda ORDER BY ID"
        
    With Rs
        .ActiveConnection = Conn
        .CursorLocation = adUseServer
        .CursorType = adOpenKeyset
        .LockType = adLockOptimistic
        .Properties("IRowsetIdentity") = True
        .Open SQL, , , , adCmdText
    End With
    
    Set dgr_agenda.DataSource = Rs
    
    dgr_agenda.Columns(0).Width = 500
    dgr_agenda.Columns(1).Width = 2000
    dgr_agenda.Columns(2).Width = 2000
    dgr_agenda.Columns(3).Width = 1500
    
    dgr_agenda.MarqueeStyle = 3
    
    End Sub
    
    Private Sub cmd_excel_Click()
    
    Dim i As Integer
    Dim SQL As String
    Set Rs = New ADODB.Recordset
    
    Dim ExcelApp As Excel.Application
    Dim ExcelBook As Workbook
    
    MsgBox "Esportazione in Excel effettuata.", vbOKOnly, "Avviso"
    
    Set Rs = Conn.Execute("SELECT * FROM Agenda")
    
    Rem Set ExcelApp = CreateObject("Excel.Application")
    Set ExcelApp = New Excel.Application
    
    ExcelApp.Application.Visible = True
    
    Set ExcelBook = ExcelApp.Workbooks.Add
        
    With ExcelApp.Application
        .Range("A1", "L1").Select
        .Selection.Interior.ColorIndex = 35
    
        .Cells(1, 1).Value = "ID"
        .Cells(1, 2).Value = "Societ"
        .Cells(1, 3).Value = "Nome"
        .Cells(1, 4).Value = "Cognome"
        .Cells(1, 5).Value = "Indirizzo"
        .Cells(1, 6).Value = "Citt"
        .Cells(1, 7).Value = "Telefono (1)"
        .Cells(1, 8).Value = "Telefono (2)"
        .Cells(1, 9).Value = "Cellulare"
        .Cells(1, 10).Value = "Fax"
        .Cells(1, 11).Value = "E-Mail"
        .Cells(1, 12).Value = "Note"
    
        i = 2
        Do While Not Rs.EOF
        
            .Cells(i, 1).Value = Rs.Fields("ID").Value
            .Cells(i, 2).Value = Rs.Fields("Societa").Value
            .Cells(i, 3).Value = Rs.Fields("Nome").Value
            .Cells(i, 4).Value = Rs.Fields("Cognome").Value
            .Cells(i, 5).Value = Rs.Fields("Indirizzo").Value
            .Cells(i, 6).Value = Rs.Fields("Citta").Value
            .Cells(i, 7).Value = Rs.Fields("Telefono_1").Value
            .Cells(i, 8).Value = Rs.Fields("Telefono_2").Value
            .Cells(i, 9).Value = Rs.Fields("Cellulare").Value
            .Cells(i, 10).Value = Rs.Fields("Fax").Value
            .Cells(i, 11).Value = Rs.Fields("Mail").Value
            .Cells(i, 12).Value = Rs.Fields("Notes").Value
            
            i = i + 1
            
        Rs.MoveNext
        Loop
    
        .Cells(1, 1).Select
        ExcelApp.Selection.HorizontalAlignment = xlCenter
    End With
    
    ExcelApp.Quit
    Set ExcelApp = Nothing
    Set ExcelBook = Nothing
    
    End Sub
    
    fin qui tutto bene, il problema nasce quando voglio aprire i dettagli del record:

    Private Sub dgr_agenda_dblClick()
    
    ID_Agenda = Rs.Fields("ID").Value
    frm_agenda_dettaglio.Show
    
    End Sub
    
    DOPO aver fatto l'esportazione, come se sballasse l'acquisizione dell'ID Record.

    Avete idea di come risolvere? Refresh? RIcaricare la datagrid?

    Grazie

  2. #2
    L'avatar di gibra
    gibra non  in linea Very Important Person
    Private Sub dgr_agenda_dblClick()
    
    ID_Agenda = Rs.Fields("ID").Value
    frm_agenda_dettaglio.Show
    
    End Sub
    
    Non mi pare che vi sia alcuna attinenza tra ID_Agenda e frm-agenda_dettaglio.

    ciao
    ℹ️ Leggi di pi su gibra ...

  3. #3
    L'avatar di StegcO
    StegcO non  in linea Scolaretto
    Semplicemente metto l'ID nella variabile (che globale in un modulo) e apro la form che la utilizzer..

    infatti secondo me che v in conflitto non quello ma l'esportazione in excel

  4. #4
    L'avatar di gibra
    gibra non  in linea Very Important Person
    Quote Originariamente inviato da StegcO Visualizza il messaggio
    Semplicemente metto l'ID nella variabile (che globale in un modulo) e apro la form che la utilizzer..

    infatti secondo me che v in conflitto non quello ma l'esportazione in excel
    Invece secondo me l'esportazione non c'entra niente.
    ℹ️ Leggi di pi su gibra ...

  5. #5
    L'avatar di StegcO
    StegcO non  in linea Scolaretto
    Secondo me, invece, l'esportazione, ti spiego.

    in pratia l'errore che non trova il record nell'elenco ecc (il classico end of file), il punto che secondo me si sballa tutto perch l'evento click ricarica il recordset e quindi non si trva pi quello messo nella datagrid.

    Pu essere? Secondo voi?

  6. #6
    L'avatar di gibra
    gibra non  in linea Very Important Person
    Quote Originariamente inviato da StegcO Visualizza il messaggio
    Secondo me, invece, l'esportazione, ti spiego.

    in pratia l'errore che non trova il record nell'elenco ecc (il classico end of file), il punto che secondo me si sballa tutto perch l'evento click ricarica il recordset e quindi non si trva pi quello messo nella datagrid.

    Pu essere? Secondo voi?
    Penso che l'errore che commetti quello di utilizzare la stessa variabile oggetto che, probabilmente, hai dichiarato RS a livello di modulo.
    Dico probabilmente perch noi non vediamo dove l'hai dichiarata, quindi una supposizione.

    Diventa ovvio che se tu carichi il record prendendo il valore dal recordset
    Rs.Fields("ID").Value
    questo potrebbe non essere lo stesso del record selezionato nella griglia.

    Per distinguere le due cose, nella SELECT che popola il recordset della griglia devi includere anche la colonna ID e poi quando ti serve leggi il valore dalla griglia, ovvero:


     
    ID_Agenda = DataGrid1.Columns("id").Value
    frm_agenda_dettaglio.Show
    

    Di norma io carico sempre la colonna ID al primo posto e la nascondo.

    Vedi ad esempio questo progetto, che ho appena pubblicato:
    ADO, Parametri e affini

    Ciao
    ℹ️ Leggi di pi su gibra ...

  7. #7
    L'avatar di StegcO
    StegcO non  in linea Scolaretto
    Ricapitoliamo:

    Option Explicit
    
    Dim Conn As ADODB.Connection
    Dim StringaConn As String
    Dim SQL As String
    Dim Rs As ADODB.Recordset
    Dim Sub_Rs As ADODB.Recordset
    
    Private Sub Form_Load() con questo popolo la DataGrid con TUTTI i RECORD (ma solo alcuni campi)
    
    Set Conn = New ADODB.Connection
    Set Rs = New ADODB.Recordset
    StringaConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\database.mdb;Persist Security Info=False"
    Conn.Open StringaConn
    
    lbl_username.Caption = Username
    
    SQL = "SELECT ID, Societa, Nome, Cognome, Telefono_1, Cellulare, Mail, Notes FROM Agenda"
        
    With Rs
        .ActiveConnection = Conn
        .CursorLocation = adUseServer
        .CursorType = adOpenKeyset
        .LockType = adLockOptimistic
        .Properties("IRowsetIdentity") = True
        .Open SQL, , , , adCmdText
    End With
    
    Set dgr_agenda.DataSource = Rs
    
    dgr_agenda.Columns(0).Width = 500
    dgr_agenda.Columns(1).Width = 2000
    dgr_agenda.Columns(2).Width = 1500
    dgr_agenda.Columns(3).Width = 1500
    dgr_agenda.Columns(4).Width = 1500
    dgr_agenda.Columns(5).Width = 1500
    dgr_agenda.Columns(6).Width = 2000
    dgr_agenda.Columns(7).Width = 2500
    
    dgr_agenda.MarqueeStyle = 3
    
    End Sub
    
    Private Sub cmd_cerca_Click() ora, per esempio, st modificando i dati contenuti nella DataGrid
    
    Dim Cerca As String
    Set Rs = New ADODB.Recordset
    
    Cerca = txt_cerca.Text
    
    SQL = "SELECT ID, Societa, Nome, Cognome, Telefono_1, Cellulare, Mail, Notes FROM Agenda WHERE 1=1"
    
    SQL = SQL & " AND Societa LIKE '%" & Cerca & "%' "
    SQL = SQL & " OR Nome LIKE '%" & Cerca & "%' "
    SQL = SQL & " OR Cognome LIKE '%" & Cerca & "%' "
    SQL = SQL & " OR Telefono_1 LIKE '%" & Cerca & "%' "
    SQL = SQL & " OR Cellulare LIKE '%" & Cerca & "%' "
    SQL = SQL & " OR Mail LIKE '%" & Cerca & "%' "
    SQL = SQL & " OR Notes LIKE '%" & Cerca & "%' "
    
    With Rs
        .ActiveConnection = Conn
        .CursorLocation = adUseServer
        .CursorType = adOpenKeyset
        .LockType = adLockOptimistic
        .Properties("IRowsetIdentity") = True
        .Open SQL, , , , adCmdText
    End With
    
    Set dgr_agenda.DataSource = Rs
    
    dgr_agenda.Columns(0).Width = 500
    dgr_agenda.Columns(1).Width = 2000
    dgr_agenda.Columns(2).Width = 1500
    dgr_agenda.Columns(3).Width = 1500
    dgr_agenda.Columns(4).Width = 1500
    dgr_agenda.Columns(5).Width = 1500
    dgr_agenda.Columns(6).Width = 2000
    dgr_agenda.Columns(7).Width = 2500
    
    dgr_agenda.MarqueeStyle = 3
    
    MsgBox "Ricerca effettuata.", vbOKOnly, "Avviso"
    
    End Sub
    
    Private Sub dgr_agenda_dblClick() con questo, infine, dovrei passare la variabile alla form_dettagli
    
    ID_Agenda = dgr_agenda.Columns("ID").Value
    frm_agenda_dettaglio.Show
    
    il problema che prende sempre lo stesso ID, prima prendeva sempre il primo del RS, ora prende il primo su cui clicco

    Perch diavolo fa cos?
    End Sub

  8. #8
    L'avatar di gibra
    gibra non  in linea Very Important Person
    Veramente non capisco perch popoli 2 volta la griglia...
    - Form_Load
    - cmdCerca_CLick

    Lo vuoi spiegare?

    Ti pongo una riflessione:
    la tua tabella contiene 800.000 record...


    Inoltre, non capisco nemmeno il metodo di ricerca che stai usando.
    E' molto limitato...

    Ciao
    ℹ️ Leggi di pi su gibra ...

  9. #9
    L'avatar di StegcO
    StegcO non  in linea Scolaretto
    Veramente non capisco perch popoli 2 volta la griglia...
    - Form_Load
    - cmdCerca_CLick

    Lo vuoi spiegare?
    Certo

    In Form_Load la popolo con TUTTI i Record, per una prima visualizzazione, tramite il comando Cerca la popolo SOLO con i risultati della ricerca

    Ti pongo una riflessione:
    la tua tabella contiene 800.000 record...
    Apriti cielo
    Bh, secondo me, c' poco da fare.. no?


    Inoltre, non capisco nemmeno il metodo di ricerca che stai usando.
    E' molto limitato...

    Ciao

    Si lo s, ma cos che mi/ci/gli serve, in pratica una ricerca per LIKE di una sola parola/stringa ( un'agenda questa parte del progetto)

    Nelle altre sezioni user diverse stringhe


    Io non ho ancora capit operch si salva l'ID su cui clicco e tiene in memoria quello.. st impazzendo!

  10. #10
    L'avatar di gibra
    gibra non  in linea Very Important Person
    Quote Originariamente inviato da StegcO Visualizza il messaggio
    In Form_Load la popolo con TUTTI i Record, per una prima visualizzazione, tramite il comando Cerca la popolo SOLO con i risultati della ricerca
    Questo l'avevo capito, ma il PERCHE' che non capisco...


    Quote Originariamente inviato da StegcO Visualizza il messaggio
    Apriti cielo
    Bh, secondo me, c' poco da fare.. no?
    Dici ? Beato te che la fai cos semplice.
    Vediamo un po'... allora vuoi dirmi che fra 5 anni, tu caricherai tutti i record della tua tabella degli utlimi 5 anni solo per fare una ricerca? E fra 10 farai lo stesso? ecc. ecc. ecc.
    Ti consiglio di riflettere su questo...


    Quote Originariamente inviato da StegcO Visualizza il messaggio
    Si lo s, ma cos che mi/ci/gli serve, in pratica una ricerca per LIKE di una sola parola/stringa ( un'agenda questa parte del progetto)
    L'ho capito che un'agenda. ma c' modo e modo di fare le ricerche.
    Ad esempio guarda il mio progetto DataGrid con Filterbar
    http://nuke.vbcorner.net/Progetti/VB...9/Default.aspx

    Quote Originariamente inviato da StegcO Visualizza il messaggio
    Io non ho ancora capit operch si salva l'ID su cui clicco e tiene in memoria quello.. st impazzendo!
    Perch cos deve funzionare. A meno che tu non voglia fare qualcos'altro, in questo caso spiega bene quello che vuoi ottenere. Non serve che mostri altro codice, ma spiega in dettaglio le tue esigenze.

    Ciao
    ℹ️ Leggi di pi su gibra ...

+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo

Potrebbero interessarti anche ...

  1. Sub infinita a causa di un ciclo (Do While)
    Da gippe69 nel forum Microsoft Word
    Risposte: 4
    Ultimo Post: 21-09-2014, 16:29
  2. errore controllo DataGrid
    Da jon nel forum Visual Basic 6
    Risposte: 1
    Ultimo Post: 30-01-2013, 11:44
  3. Codice VBA cha causa il crash di EXCEL?
    Da Max Rotula nel forum Microsoft Excel
    Risposte: 5
    Ultimo Post: 01-10-2010, 09:28
  4. Errore esportazione pdf in cr8
    Da Carmen nel forum Visual Basic 6
    Risposte: 1
    Ultimo Post: 28-11-2008, 21:48
  5. Errore con datagrid
    Da newpc82 nel forum Visual Basic 6
    Risposte: 7
    Ultimo Post: 28-06-2007, 23:40