Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    query che non ne vuole sapere di andare...

    Ciao a tutti. allora il problema è questo. per necessità creo una vista su un database access direttamente da codice del mio sito:

    string vista = "REPORT_5";
    OleDbCommand crea_vista = "CREATE VIEW " + vista + " AS SELECT DISTINCT ID, NOME, COGNOME FROM UTENTI";
    crea_vista.ExecuteNonQuery();

    a questo punto la vista è creata e contiene le sue belle 2000 righe, e da access li vedo perfettamente.

    poi vado a fare un gridview contentente i dati che pesco con un datareader.



    OleDbCommand cmd = connection.CreateCommand();
    OleDbDataReader rdr;
    cmd.CommandText = "SELECT * FROM REPORT_5";
    rdr.ExecuteReader();
    if (rdr.Read())
    {
    //FAI QUALCOSA
    }


    praticamente mi esce da questo codice con rdr.hasrows = FALSE!!!!

    se prendo il codice della query e lo lancio in access, questo funziona perfettamente!!!!!

    aiutatemi è un mistero!!!!

  2. #2
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    ho provato un po' ma non trovo problemi :master:
    vedi se può servire.
    codice:
    Option Strict On
    
    Partial Class prove_a
        Inherits System.Web.UI.Page
    
        Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim vista As String = "REPORT_5"
            Dim con As OleDbConnection = Nothing
    
            Try
                'creo nuova connessione
                con = New OleDbConnection(StringaConnessione)
                con.Open() 'la apro
    
                'se la query non esiste la creo
                If Not ExistReport(con, vista) Then
                    Dim command As OleDbCommand = con.CreateCommand()
    
                    command.CommandText = "create view " & vista & " as select distinct id_comune, nome_comune from comuni where codice_istat_regione = '20'"
                    command.ExecuteNonQuery()
                End If
    
                'popolo il GridView
                'la procedura utilizza un OleDbDataReader
                libreria.DataBind(Me.GridView1, con, "SELECT * FROM REPORT_5", Nothing)
    
            Catch ex As Exception
                'se errore stampo messaggio a video
                PrintLn(ex.Message)
    
                'svuoto la griglia
                Me.GridView1.DataSource = Nothing
                Me.GridView1.DataBind()
    
            Finally
                'sempre e comunque chiudo la connessione
                If con IsNot Nothing Then con.Close()
            End Try
        End Sub
    
        'restituisco una tabella con le query
        Private Function GetTables(ByVal conn As OleDbConnection) As DataTable
            Return conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, New Object() {Nothing, Nothing, Nothing, "VIEW"})
        End Function
    
        'dà vero o falso se la query esiste già
        Private Function ExistReport(ByVal con As OleDbConnection, ByVal report As String) As Boolean
            Dim dt As DataTable = GetTables(con)
            For i As Integer = 0 To dt.Rows.Count - 1
                If dt.Rows(i)("table_name").ToString() = report Then
                    Return True
                End If
            Next
            Return False
        End Function
    End Class
    Pietro

  3. #3
    riesco anche io a farlo creando la vista da una tabella. forse che il problema è che creo la vista da una vista (che a sua volta è un join di più viste)????

    a)VISTA_UTENTI
    b)VISTA_CONTATTI

    c)V_CONTATTI_UTENTI (VISTA_UTENTI left outer join VISTA_CONTATTI)

    d) CREATE VIEW REPORT_5 AS SELECT COGNOME, NOME, TIPO_CONTATTO, CONTATTO FROM V_CONTATTI_UTENTI


    prova questa e dimmi se ti funziona...

  4. #4
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    non posso provare; non ho neanche la struttura tabelle. Però una cosa la posso dire.
    Access funziona bene solo se le query non superano una certa complessità. Oltre, funziona malissimo anche scrivendo le query direttamente nel database. Funziona molto male se le query vengono scritte con istruzione sql e non dall'ambiente grafico.
    Perciò, non mi stupisco affatto che non ti funzioni :master:

    Comunque, prova con la sintassi completa:

    select [tabella.campo] as [nuovo] from [tabella]
    Pietro

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.