Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2008
    Messaggi
    13

    Vb6 Problema ricerca in db access

    Buongiorno a tutti,
    ho un problema con una ricerca in un db access.
    Probabilmente il problemaq è semplice e sicuramente sbaglio qualche cosa:
    Devo fare una ricerca dove alcune volte mi serve cercare solo (nome e data) mentre altre devo aggiungere anche il nome.
    Vi posto il codice che ho fatto e che funziona solo se cerco in date precedendi all'odierna.
    Difatti se cerco nella dta di ieri e avanti ieri e in quelle precedenti trova tranquillamente quello che cerco.
    Mentre se cerco nella data odierna non trova nulla malgrado siano presenti i nomi
    Perchè? Dove sbaglio?
    Grazie per una cortese spiegazione, vi posto il pezzo di codice:

    [cn.Open stringa
    If txtCognome1.Text <> "" And txtfrData.Text <> "" And txtNome1.Text <> "" Then
    rs.Open "SELECT * FROM QuData WHERE Cognome = '" & txtCognome1.Text & "' And Data
    = #" & txtfrData.Text & "# And Nome = '" & txtNome1.Text & "';", cn, 1
    ElseIf txtCognome1.Text <> "" And txtfrData.Text <> "" Then
    rs.Open "SELECT * FROM QuData WHERE Cognome = '" & txtCognome1.Text & "' And Data = #" & txtfrData.Text & "#;", cn, 1
    End If

    If rs.EOF = False Then
    cmdRichiama.Caption = "OK"
    txtData.Text = NonNull(rs("Data"), "")
    txtDataU.Text = NonNull(rs("DataU"), "")
    txtCognome.Text = NonNull(rs("Cognome"), "")
    txtNome.Text = NonNull(rs("Nome"), "")
    txtDitta.Text = NonNull(rs("Ditta"), "")
    txtTipo.Text = NonNull(rs("Tipo"), "")
    txtNumDoc.Text = NonNull(rs("Numero"), "")
    txtPas.Text = NonNull(rs("Pas"), "")
    txtOraU.Text = NonNull(rs("OraU"), "")
    txtVisitato.Text = NonNull(rs("Visitato"), "")
    rs.MoveNext
    ElseIf rs.EOF Then
    MsgBox "Cognome non trovato", vbOKOnly + vbExclamation, "RICERCA FINITA"
    txtCognome1.Text = ""
    frRichiama.Visible = False
    cmdRichiama.Caption = "Richiama"
    Exit Sub
    End If
    CODE]cn.Open stringa[/CODE]

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

    Moderazione

    In futuro, usa il tag [CODE] per formattare correttamente il codice sorgente.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  3. #3
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Perchè e deprecato usare la sintassi SQL che stai usando, che implica un sacco di problemi, non ultimo quello della formattazione.

    Devi usare un Command coi Parametri.

    leggi questo articolo, soprattutto per quanto riguarda le date

    http://nuke.vbcorner.net/Articoli/VB...T/Default.aspx


  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    758
    Probabilmente l'errore risiede nel formato delle date che non sono nella forma richiesta, cioè:
    #mm-dd-yyyy# .

    Tieni anche presente che il cognome potrebbe contenere un apostrofo e, in questo caso, riceveresti sicuramente un errore.

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2008
    Messaggi
    13

    Come mai

    Strano perchè se non uso l'If per fare le due ricerche funziona.
    Non so perchè dite ma a me il database non prende la formatazione americana, se la inserisco in quel modo me la gira di suo e poi utilizzo le date prese dal pc.
    Se tolgo If e uso solo questo funziona Quando clicko il cmdButon:
    Chiedo venia ma non ho ancora ben capito come si inserisce il codice

    rs.Open "SELECT * FROM QuData WHERE Cognome = '" & txtCognome1.Text & "' And Data
    = #" & txtfrData.Text & "# And Nome = '" & txtNome1.Text & "';", cn, 1

    é quando metto gli if che mi frega
    Grazie a tutti

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    758

    Re: Come mai

    Originariamente inviato da Pepe27
    Non so perchè dite ma a me il database non prende la formatazione americana, se la inserisco in quel modo me la gira di suo
    E' un equivoco molto comune. Chi te le "gira di suo" non è il database, ma Access, cioè un programma applicativo che interagisce con database Ms-Jet.
    Originariamente inviato da Pepe27 poi utilizzo le date prese dal pc.
    Che vuoi dire? Da quanto hai postato sembra che tu usi il contenuto diuna TextBox, che difficilmente conterrà la data nel formato americano.

    Non ho capito se hai provato a seguire la mia indicazione. Dovrebbe funzionare.
    Poi, quando ti sarà chiara la causa del problema, farai bene a seguire le indicazioni di gibra.

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2008
    Messaggi
    13

    Grazie

    Si appena posso provo a fare come mi dici tu e ho anche dato un occhiata a quanto suggerisce Cibra, salvato e appena posso approfondisco.
    Poi faccio sapere
    Acci...vedi agli apostrofi non ci avevo pensato.
    Vi faccio sapere
    Grazie

  8. #8
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244

    Re: Grazie

    Originariamente inviato da Pepe27
    Si appena posso provo a fare come mi dici tu e ho anche dato un occhiata a quanto suggerisce Cibra, salvato e appena posso approfondisco.
    Poi faccio sapere
    Acci...vedi agli apostrofi non ci avevo pensato.
    Vi faccio sapere
    Grazie
    A parte gli apostrofi, che è una delle insidie sempre dietro gli angoli, torniamo per un attimo alle date.

    Il problema è proprio il formato, come indicato nel mio articolo.
    Lo dimostra proprio il fatto che con la data di oggi non li trovi, mentre con le date precedenti si.

    La data interna di un database Access è il formato americano (ma vale un po' per tutti i database) solo che a differenza di altri database in Access non puoi modificare tale impostazione, quindi ti devi adeguare tu.

    Ora, considerando che il JET vuole il formato americano MM/DD/YYYY, quando gli passi una data non formattata correttamente, lui tenta di capire ed interpretare la data, ma ovviamente non gli riesce sempre, o meglio non gli riesce nei casi in cui la data può avere due interpretazioni.

    Se tu gli passi la data di ieri: 31/03/2011 il JET capisce che non esiste un mese 31 , dato che la data NON è ambigua è può solo essere interpretata come 31 marzo 2011.

    Invece La data di oggi, 01/04/2011, è ambigua perchè può essere valida in entrambi i formati (italiano e americano), infatti entrambe sono date valide e potrebbe essere interpretata anche come 04/01/2011, ed è quello che fa il JET.

    Se gli passi 01/04/2011 lui la ritiene valida e la usa nel formato predefinito quindi la considera come 04 gennaio 2011 (MM/DD/YYYY).

    Ecco perchè è più semplice, flessibile e consigliato usare un Command: tutti questi problemi sono prevenuti a monte, idem per gli apostrofi e per i cancelletti nelle date.
    Non vorrei essere pedante, ma ti consiglio vivamente di adottare in futuro i Command, questo ti aiuterà in seguito anche per il NET in cui, di default, vengono utilizzati solo i Command (OleDbCommand, SqlCommand, OracleCommand, ecc....).

    Oltretutto con la routine SetAdoParameter() che trovi nel mio progetto di esempio, impostare Command e relativi parametri è di una semplicità disarmante.


  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2008
    Messaggi
    13

    Ancora grazie

    Grazie gibra, ho risolto modificando il tutto dopo aver letto il tuo e in modo particolare l'ultimo pezo che riguarda date e ora.
    Grazie mille
    Se quel sito è tuo devo leggere dall'inizio alla fine tutto è interessante
    Ciao

  10. #10
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244

    Re: Ancora grazie

    Originariamente inviato da Pepe27
    Grazie gibra, ho risolto modificando il tutto dopo aver letto il tuo e in modo particolare l'ultimo pezo che riguarda date e ora.
    Grazie mille
    Prego

    Originariamente inviato da Pepe27
    Se quel sito è tuo devo leggere dall'inizio alla fine tutto è interessante
    Ciao
    Sì, è mio.


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.